/trunk/Build-Res.bat |
---|
0,0 → 1,8 |
@echo off |
cd /d %~dp0 |
brcc32 Quelltext\Coder.rc |
brcc32 Quelltext\Activator.rc |
brcc32 Quelltext\ShlExt.rc |
brcc32 Quelltext\ShlErase.rc |
brcc32 Quelltext\SecureMoveExt.rc |
pause. |
/trunk/Cleanup.bat |
---|
0,0 → 1,21 |
del Includes\*.dcu |
del Quelltext\*.dcu |
del Quelltext\*.local |
del Quelltext\*.identcache |
del VCL_DEC\*.dcu |
del VCL_DEC\*.local |
del VCL_DEC\*.identcache |
del VCL_DRAGDROP\*.dcu |
del VCL_DRAGDROP\*.local |
del VCL_DRAGDROP\*.identcache |
del VCL_KAZIP\*.dcu |
del VCL_KAZIP\*.local |
del VCL_KAZIP\*.identcache |
del *.local |
pause |
/trunk/Coder.bdsgroup |
---|
0,0 → 1,21 |
<?xml version="1.0" encoding="utf-8"?> |
<BorlandProject> |
<PersonalityInfo> |
<Option> |
<Option Name="Personality">Default.Personality</Option> |
<Option Name="ProjectType"></Option> |
<Option Name="Version">1.0</Option> |
<Option Name="GUID">{00261C37-1D74-466D-B1FF-6EDFDFBEAF93}</Option> |
</Option> |
</PersonalityInfo> |
<Default.Personality> <Projects> |
<Projects Name="Activator.exe">Quelltext\Activator.bdsproj</Projects> |
<Projects Name="Coder.exe">Quelltext\Coder.bdsproj</Projects> |
<Projects Name="SecureMoveExt.dll">Quelltext\SecureMoveExt.bdsproj</Projects> |
<Projects Name="ShlErase.dll">Quelltext\ShlErase.bdsproj</Projects> |
<Projects Name="ShlExt.dll">Quelltext\ShlExt.bdsproj</Projects> |
<Projects Name="Targets">Activator.exe Coder.exe SecureMoveExt.dll ShlErase.dll ShlExt.dll</Projects> |
</Projects> |
<Dependencies/> |
</Default.Personality> |
</BorlandProject> |
/trunk/Coder.groupproj |
---|
0,0 → 1,74 |
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
<PropertyGroup> |
<ProjectGuid>{32976f92-0add-45c8-aa18-5ae5c4912a66}</ProjectGuid> |
</PropertyGroup> |
<ItemGroup /> |
<ItemGroup> |
<Projects Include="Quelltext\Activator.dproj" /> |
<Projects Include="Quelltext\Coder.dproj" /> |
<Projects Include="Quelltext\SecureMoveExt.dproj" /> |
<Projects Include="Quelltext\ShlErase.dproj" /> |
<Projects Include="Quelltext\ShlExt.dproj" /> |
</ItemGroup> |
<ProjectExtensions> |
<Borland.Personality>Default.Personality</Borland.Personality> |
<Borland.ProjectType /> |
<BorlandProject> |
<BorlandProject xmlns=""> <Default.Personality> </Default.Personality> </BorlandProject></BorlandProject> |
</ProjectExtensions> |
<Target Name="Activator"> |
<MSBuild Projects="Quelltext\Activator.dproj" Targets="" /> |
</Target> |
<Target Name="Activator:Clean"> |
<MSBuild Projects="Quelltext\Activator.dproj" Targets="Clean" /> |
</Target> |
<Target Name="Activator:Make"> |
<MSBuild Projects="Quelltext\Activator.dproj" Targets="Make" /> |
</Target> |
<Target Name="Coder"> |
<MSBuild Projects="Quelltext\Coder.dproj" Targets="" /> |
</Target> |
<Target Name="Coder:Clean"> |
<MSBuild Projects="Quelltext\Coder.dproj" Targets="Clean" /> |
</Target> |
<Target Name="Coder:Make"> |
<MSBuild Projects="Quelltext\Coder.dproj" Targets="Make" /> |
</Target> |
<Target Name="SecureMoveExt"> |
<MSBuild Projects="Quelltext\SecureMoveExt.dproj" Targets="" /> |
</Target> |
<Target Name="SecureMoveExt:Clean"> |
<MSBuild Projects="Quelltext\SecureMoveExt.dproj" Targets="Clean" /> |
</Target> |
<Target Name="SecureMoveExt:Make"> |
<MSBuild Projects="Quelltext\SecureMoveExt.dproj" Targets="Make" /> |
</Target> |
<Target Name="ShlErase"> |
<MSBuild Projects="Quelltext\ShlErase.dproj" Targets="" /> |
</Target> |
<Target Name="ShlErase:Clean"> |
<MSBuild Projects="Quelltext\ShlErase.dproj" Targets="Clean" /> |
</Target> |
<Target Name="ShlErase:Make"> |
<MSBuild Projects="Quelltext\ShlErase.dproj" Targets="Make" /> |
</Target> |
<Target Name="ShlExt"> |
<MSBuild Projects="Quelltext\ShlExt.dproj" Targets="" /> |
</Target> |
<Target Name="ShlExt:Clean"> |
<MSBuild Projects="Quelltext\ShlExt.dproj" Targets="Clean" /> |
</Target> |
<Target Name="ShlExt:Make"> |
<MSBuild Projects="Quelltext\ShlExt.dproj" Targets="Make" /> |
</Target> |
<Target Name="Build"> |
<CallTarget Targets="Activator;Coder;SecureMoveExt;ShlErase;ShlExt" /> |
</Target> |
<Target Name="Clean"> |
<CallTarget Targets="Activator:Clean;Coder:Clean;SecureMoveExt:Clean;ShlErase:Clean;ShlExt:Clean" /> |
</Target> |
<Target Name="Make"> |
<CallTarget Targets="Activator:Make;Coder:Make;SecureMoveExt:Make;ShlErase:Make;ShlExt:Make" /> |
</Target> |
<Import Condition="Exists('$(MSBuildBinPath)\Borland.Group.Targets')" Project="$(MSBuildBinPath)\Borland.Group.Targets" /> |
</Project> |
/trunk/Decoder5/Coder.dpr |
---|
0,0 → 1,28 |
program Coder; |
uses |
Vcl.Forms, |
DecoderMain in 'DecoderMain.pas' {FormMain}, |
DECBaseClass in '..\..\Source\DECBaseClass.pas', |
DECCipherBase in '..\..\Source\DECCipherBase.pas', |
DECCipherFormats in '..\..\Source\DECCipherFormats.pas', |
DECCipherInterface in '..\..\Source\DECCipherInterface.pas', |
DECCipherModes in '..\..\Source\DECCipherModes.pas', |
DECCiphers in '..\..\Source\DECCiphers.pas', |
DECDataCipher in '..\..\Source\DECDataCipher.pas', |
DECCRC in '..\..\Source\DECCRC.pas', |
DECUtil in '..\..\Source\DECUtil.pas', |
DECTypes in '..\..\Source\DECTypes.pas', |
DECUtilRawByteStringHelper in '..\..\Source\DECUtilRawByteStringHelper.pas', |
DECFormatBase in '..\..\Source\DECFormatBase.pas', |
DECData in '..\..\Source\DECData.pas', |
DecoderEncDec in 'DecoderEncDec.pas'; |
{$R *.res} |
begin |
Application.Initialize; |
Application.MainFormOnTaskbar := True; |
Application.CreateForm(TFormMain, FormMain); |
Application.Run; |
end. |
/trunk/Decoder5/Coder.dproj |
---|
0,0 → 1,1157 |
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
<PropertyGroup> |
<ProjectGuid>{B6DE5711-AD3F-44B0-8206-FB26B8B82A31}</ProjectGuid> |
<ProjectVersion>20.1</ProjectVersion> |
<FrameworkType>VCL</FrameworkType> |
<Base>True</Base> |
<Config Condition="'$(Config)'==''">Debug</Config> |
<Platform Condition="'$(Platform)'==''">Win32</Platform> |
<TargetedPlatforms>3</TargetedPlatforms> |
<AppType>Application</AppType> |
<MainSource>Coder.dpr</MainSource> |
</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="('$(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)'=='Release' 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)'!=''"> |
<DCC_DcuOutput>.\$(Platform)\$(Config)</DCC_DcuOutput> |
<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> |
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)</DCC_Namespace> |
<Icon_MainIcon>$(BDS)\bin\delphi_PROJECTICON.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> |
<SanitizedProjectName>Coder</SanitizedProjectName> |
</PropertyGroup> |
<PropertyGroup Condition="'$(Base_Win32)'!=''"> |
<DCC_UsePackage>DBXSqliteDriver;RESTComponents;fmxase;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;bindcompvclsmp;emsclientfiredac;tethering;svnui;DataSnapFireDAC;JvGlobus;FireDACADSDriver;JvPluginSystem;frx27;DBXMSSQLDriver;JvMM;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;JvBands;vcldb;bindcompfmx;svn;JvJans;DBXOracleDriver;JvNet;inetdb;JvAppFrm;VirtualTreesDR;FmxTeeUI;emsedge;JvDotNetCtrls;fmx;FireDACIBDriver;fmxdae;vcledge;JvWizards;FireDACDBXDriver;dbexpress;IndyCore;vclx;frxTee27;JvPageComps;dsnap;emsclient;DataSnapCommon;SVGIconImageListFMX;FireDACCommon;JvDB;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;JclDeveloperTools;vclie;bindengine;DBXMySQLDriver;CloudService;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;JvCmp;JvHMI;SVGIconPackage;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;frxDB27;JvCustom;vcl;IndyIPServer;DBXSybaseASEDriver;JvXPCtrls;IndySystem;FireDACDb2Driver;bindcompvclwinx;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;FireDAC;Jcl;JvCore;emshosting;JvCrypt;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;JvDlgs;JvRuntimeDesign;JvManagedThreads;Tee;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;emsserverresource;DbxClientDriver;JvTimeFramework;DBXSybaseASADriver;CustomIPTransport;vcldsnap;CodeSiteExpressPkg;JvSystem;JvStdCtrls;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;frxe27;SVGIconImageList;TeeUI;JvDocking;dbxcds;VclSmp;JvPascalInterpreter;adortl;FireDACODBCDriver;JclVcl;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;inetdbxpress;FireDACMongoDBDriver;JvControls;JvPrintPreview;JclContainers;DataSnapServerMidas;$(DCC_UsePackage)</DCC_UsePackage> |
<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=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys> |
<VerInfo_Locale>1033</VerInfo_Locale> |
<Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File> |
<DCC_ExeOutput>.</DCC_ExeOutput> |
<DCC_UnitSearchPath>VCL_DEC;$(DCC_UnitSearchPath)</DCC_UnitSearchPath> |
<DCC_DcuOutput>.</DCC_DcuOutput> |
<VerInfo_AutoIncVersion>true</VerInfo_AutoIncVersion> |
<AppDPIAwarenessMode>none</AppDPIAwarenessMode> |
</PropertyGroup> |
<PropertyGroup Condition="'$(Base_Win64)'!=''"> |
<DCC_UsePackage>DBXSqliteDriver;RESTComponents;fmxase;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;bindcompvclsmp;emsclientfiredac;tethering;DataSnapFireDAC;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;DBXOracleDriver;inetdb;VirtualTreesDR;FmxTeeUI;emsedge;fmx;FireDACIBDriver;fmxdae;vcledge;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;bindengine;DBXMySQLDriver;CloudService;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;inet;IndyIPCommon;bindcompdbx;vcl;IndyIPServer;DBXSybaseASEDriver;IndySystem;FireDACDb2Driver;bindcompvclwinx;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;Tee;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;emsserverresource;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;DBXInformixDriver;IndyIPClient;bindcompvcl;TeeUI;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;inetdbxpress;FireDACMongoDBDriver;DataSnapServerMidas;$(DCC_UsePackage)</DCC_UsePackage> |
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(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=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys> |
<VerInfo_Locale>1033</VerInfo_Locale> |
<Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File> |
<VerInfo_AutoIncVersion>true</VerInfo_AutoIncVersion> |
<AppDPIAwarenessMode>none</AppDPIAwarenessMode> |
</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)'!=''"> |
<DCC_RemoteDebug>false</DCC_RemoteDebug> |
<AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode> |
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo> |
<VerInfo_Locale>1033</VerInfo_Locale> |
<VerInfo_AutoIncVersion>true</VerInfo_AutoIncVersion> |
<VerInfo_Build>126</VerInfo_Build> |
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.126;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys> |
</PropertyGroup> |
<PropertyGroup Condition="'$(Cfg_1_Win64)'!=''"> |
<AppEnableRuntimeThemes>true</AppEnableRuntimeThemes> |
<AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode> |
</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> |
<PropertyGroup Condition="'$(Cfg_2_Win32)'!=''"> |
<AppEnableRuntimeThemes>true</AppEnableRuntimeThemes> |
<AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode> |
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo> |
<VerInfo_Locale>1033</VerInfo_Locale> |
</PropertyGroup> |
<PropertyGroup Condition="'$(Cfg_2_Win64)'!=''"> |
<AppEnableRuntimeThemes>true</AppEnableRuntimeThemes> |
<AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode> |
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo> |
<VerInfo_AutoIncVersion>true</VerInfo_AutoIncVersion> |
<VerInfo_Locale>1033</VerInfo_Locale> |
</PropertyGroup> |
<ItemGroup> |
<DelphiCompile Include="$(MainSource)"> |
<MainSource>MainSource</MainSource> |
</DelphiCompile> |
<DCCReference Include="DecoderMain.pas"> |
<Form>FormMain</Form> |
</DCCReference> |
<DCCReference Include="..\..\Source\DECBaseClass.pas"/> |
<DCCReference Include="..\..\Source\DECCipherBase.pas"/> |
<DCCReference Include="..\..\Source\DECCipherFormats.pas"/> |
<DCCReference Include="..\..\Source\DECCipherInterface.pas"/> |
<DCCReference Include="..\..\Source\DECCipherModes.pas"/> |
<DCCReference Include="..\..\Source\DECCiphers.pas"/> |
<DCCReference Include="..\..\Source\DECDataCipher.pas"/> |
<DCCReference Include="..\..\Source\DECCRC.pas"/> |
<DCCReference Include="..\..\Source\DECUtil.pas"/> |
<DCCReference Include="..\..\Source\DECTypes.pas"/> |
<DCCReference Include="..\..\Source\DECUtilRawByteStringHelper.pas"/> |
<DCCReference Include="..\..\Source\DECFormatBase.pas"/> |
<DCCReference Include="..\..\Source\DECData.pas"/> |
<DCCReference Include="DecoderEncDec.pas"/> |
<BuildConfiguration Include="Base"> |
<Key>Base</Key> |
</BuildConfiguration> |
<BuildConfiguration Include="Debug"> |
<Key>Cfg_1</Key> |
<CfgParent>Base</CfgParent> |
</BuildConfiguration> |
<BuildConfiguration Include="Release"> |
<Key>Cfg_2</Key> |
<CfgParent>Base</CfgParent> |
</BuildConfiguration> |
</ItemGroup> |
<ProjectExtensions> |
<Borland.Personality>Delphi.Personality.12</Borland.Personality> |
<Borland.ProjectType>Application</Borland.ProjectType> |
<BorlandProject> |
<Delphi.Personality> |
<Source> |
<Source Name="MainSource">Coder.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> |
</Delphi.Personality> |
<Deployment Version="4"> |
<DeployFile LocalName="Coder.exe" Configuration="Debug" Class="ProjectOutput"> |
<Platform Name="Win32"> |
<RemoteName>Coder.exe</RemoteName> |
<Overwrite>true</Overwrite> |
</Platform> |
</DeployFile> |
<DeployFile LocalName="Win32\Debug\ProgressDemoVCL.exe" Configuration="Debug" Class="ProjectOutput"/> |
<DeployClass Name="AdditionalDebugSymbols"> |
<Platform Name="iOSSimulator"> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="OSX32"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<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"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Win32"> |
<Operation>0</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="DependencyFramework"> |
<Platform Name="OSX32"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
<Extensions>.framework</Extensions> |
</Platform> |
<Platform Name="OSX64"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
<Extensions>.framework</Extensions> |
</Platform> |
<Platform Name="OSXARM64"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
<Extensions>.framework</Extensions> |
</Platform> |
<Platform Name="Win32"> |
<Operation>0</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="DependencyModule"> |
<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"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
<Extensions>.dylib</Extensions> |
</Platform> |
<Platform Name="OSX64"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
<Extensions>.dylib</Extensions> |
</Platform> |
<Platform Name="OSXARM64"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<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"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
<Extensions>.dylib</Extensions> |
</Platform> |
<Platform Name="OSX64"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
<Extensions>.dylib</Extensions> |
</Platform> |
<Platform Name="OSXARM64"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<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"> |
<RemoteDir>Contents\Resources\StartUp\</RemoteDir> |
<Operation>0</Operation> |
</Platform> |
<Platform Name="OSX64"> |
<RemoteDir>Contents\Resources\StartUp\</RemoteDir> |
<Operation>0</Operation> |
</Platform> |
<Platform Name="OSXARM64"> |
<RemoteDir>Contents\Resources\StartUp\</RemoteDir> |
<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"> |
<Platform Name="OSX64"> |
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="OSXARM64"> |
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="ProjectOSXEntitlements"> |
<Platform Name="OSX32"> |
<RemoteDir>..\</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="OSX64"> |
<RemoteDir>..\</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="OSXARM64"> |
<RemoteDir>..\</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="ProjectOSXInfoPList"> |
<Platform Name="OSX32"> |
<RemoteDir>Contents</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="OSX64"> |
<RemoteDir>Contents</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="OSXARM64"> |
<RemoteDir>Contents</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<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"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="OSX64"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="OSXARM64"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<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> |
</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"> |
<Platform Name="iOSDevice32"> |
<RemoteDir>..\</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSDevice64"> |
<RemoteDir>..\</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<RemoteDir>..\</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="ProjectiOSInfoPList"> |
<Platform Name="iOSDevice32"> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSDevice64"> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="ProjectiOSLaunchScreen"> |
<Platform Name="iOSDevice64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen</RemoteDir> |
<Operation>64</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen</RemoteDir> |
<Operation>64</Operation> |
</Platform> |
</DeployClass> |
<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="iOSSimulator" Name="$(PROJECTNAME).app"/> |
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/> |
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME).app"/> |
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME).app"/> |
<ProjectRoot Platform="OSXARM64" Name="$(PROJECTNAME).app"/> |
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/> |
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/> |
</Deployment> |
<Platforms> |
<Platform value="Win32">True</Platform> |
<Platform value="Win64">True</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')"/> |
<Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/> |
</Project> |
/trunk/Decoder5/Coder.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 |
/trunk/Decoder5/DecoderEncDec.pas |
---|
0,0 → 1,994 |
unit DecoderEncDec; |
interface |
uses |
Windows, Dialogs, SysUtils, Classes, DECFormatBase, DECTypes, |
System.UITypes, DECCiphers, DECCipherBase, DECHash, DECHashBase, |
DECHashAuthentication, DECUtil, DECCipherFormats, ZLib, |
EncdDecd, System.NetEncoding, DECCRC, DECBaseClass, Generics.Collections, |
DECRandom; |
type |
TDcFormatVersion = (fvUnknown, fvDc40, fvDc41Beta, fvDc41FinalCancelled, fvDc50Wip); |
TKdfVersion = (kvUnknown, kvKdf1, kvKdf2, kvKdf3, kvKdfx, kvPbkdf2); |
TDC4FileInfo = record |
Dc4FormatVersion: TDcFormatVersion; |
IsZLibCompressed: boolean; |
IsCompressedFolder: boolean; |
OrigFileName: string; |
KDF: TKdfVersion; |
KDF_Iterations: Integer; |
IVSize: integer; |
SeedSize: integer; |
HashClass: TDECHashClass; |
CipherClass: TDECCipherClass; |
CipherMode: TCipherMode; |
FillMode: TBlockFillMode; |
end; |
const |
DC4_SUBFORMAT_VERSION: array[Low(TDcFormatVersion)..High(TDcFormatVersion)] of string = ( |
'Hagen Reddmann Example File', |
'(De)Coder 4.0', |
'(De)Coder 4.1 Beta', |
'(De)Coder 4.1 Final (Cancelled)', |
'(De)Coder 5.0 WIP' |
); |
INTEGRITY_CHECK_INFO: array[Low(TDcFormatVersion)..High(TDcFormatVersion)] of string = ( |
'CalcMac', |
'Hash of source data', |
'Nested Hash of source data with password', |
'Nested Hash of source data with password', |
'Encrypt-then-HMAC' |
); |
KDF_VERSION_NAMES: array[Low(TKdfVersion)..High(TKdfVersion)] of string = ( |
'Unknown', 'KDF1', 'KDF2', 'KDF3', 'KDFx', 'PBKDF2' |
); |
CIPHER_MODE_NAMES: array[Low(TCipherMode)..High(TCipherMode)] of string = ( |
'CTSx = double CBC, with CFS8 padding of truncated final block', |
'CBCx = Cipher Block Chaining, with CFB8 padding of truncated final block', |
'CFB8 = 8bit Cipher Feedback mode', |
'CFBx = CFB on Blocksize of Cipher', |
'OFB8 = 8bit Output Feedback mode', |
'OFBx = OFB on Blocksize bytes', |
'CFS8 = 8Bit CFS, double CFB', |
'CFSx = CFS on Blocksize bytes', |
'ECBx = Electronic Code Book', |
'GCM = Galois Counter Mode' |
); |
CIPHER_FILLMODE_NAMES: array[Low(TBlockFillMode)..High(TBlockFillMode)] of string = ( |
'Bytes' |
); |
procedure DeCoder4X_EncodeFile_Ver4(const AFileName, AOutput: String; const APassword: RawByteString; OnProgressProc: TDECProgressEvent=nil); |
function DeCoder4X_DecodeFile(const AFileName, AOutput: String; const APassword: RawByteString; const OnlyReadFileInfo: boolean=false; OnProgressProc: TDECProgressEvent=nil): TDC4FileInfo; |
procedure DeCoder4X_PrintFileInfo(fi: TDC4FileInfo; sl: TStrings); |
implementation |
type |
// https://github.com/MHumm/DelphiEncryptionCompendium/issues/62 |
TDECHashExtendedAuthentication = class helper for TDECHashAuthentication |
class function HMACFile(const Key: TBytes; const FileName: string; |
const OnProgress:TDECProgressEvent = nil): TBytes; |
class function HMACStream(const Key: TBytes; const Stream: TStream; Size: Int64; |
const OnProgress:TDECProgressEvent): TBytes; |
end; |
{ TDECHashExtendedAuthentication } |
class function TDECHashExtendedAuthentication.HMACFile(const Key: TBytes; |
const FileName: string; const OnProgress: TDECProgressEvent): TBytes; |
var |
fs: TFileStream; |
begin |
fs := TFileStream.Create(FileName, fmOpenRead); |
try |
HMACStream(Key, fs, fs.Size, OnProgress); |
finally |
FreeAndNil(fs); |
end; |
end; |
class function TDECHashExtendedAuthentication.HMACStream(const Key: TBytes; |
const Stream: TStream; Size: Int64; |
const OnProgress: TDECProgressEvent): TBytes; |
const |
CONST_UINT_OF_0x36 = $3636363636363636; |
CONST_UINT_OF_0x5C = $5C5C5C5C5C5C5C5C; |
var |
HashInstance: TDECHashAuthentication; |
InnerKeyPad, OuterKeyPad: array of Byte; |
I, KeyLength, BlockSize, DigestLength: Integer; |
begin |
// Taken from TDECHashAuthentication.HMAC and changed HashInstance.Calc to HashInstance.CalcStream for the message |
HashInstance := TDECHashAuthenticationClass(self).Create; |
try |
BlockSize := HashInstance.BlockSize; // 64 for sha1, ... |
DigestLength := HashInstance.DigestSize; |
KeyLength := Length(Key); |
SetLength(InnerKeyPad, BlockSize); |
SetLength(OuterKeyPad, BlockSize); |
I := 0; |
if KeyLength > BlockSize then |
begin |
Result := HashInstance.CalcBytes(Key); |
KeyLength := DigestLength; |
end |
else |
Result := Key; |
while I <= KeyLength - SizeOf(NativeUInt) do |
begin |
PNativeUInt(@InnerKeyPad[I])^ := PNativeUInt(@Result[I])^ xor NativeUInt(CONST_UINT_OF_0x36); |
PNativeUInt(@OuterKeyPad[I])^ := PNativeUInt(@Result[I])^ xor NativeUInt(CONST_UINT_OF_0x5C); |
Inc(I, SizeOf(NativeUInt)); |
end; |
while I < KeyLength do |
begin |
InnerKeyPad[I] := Result[I] xor $36; |
OuterKeyPad[I] := Result[I] xor $5C; |
Inc(I); |
end; |
while I <= BlockSize - SizeOf(NativeUInt) do |
begin |
PNativeUInt(@InnerKeyPad[I])^ := NativeUInt(CONST_UINT_OF_0x36); |
PNativeUInt(@OuterKeyPad[I])^ := NativeUInt(CONST_UINT_OF_0x5C); |
Inc(I, SizeOf(NativeUInt)); |
end; |
while I < BlockSize do |
begin |
InnerKeyPad[I] := $36; |
OuterKeyPad[I] := $5C; |
Inc(I); |
end; |
HashInstance.Init; |
HashInstance.Calc(InnerKeyPad[0], BlockSize); |
if Size > 0 then |
TDECHashExtended(HashInstance).CalcStream(Stream, Size, OnProgress, false); |
HashInstance.Done; |
Result := HashInstance.DigestAsBytes; |
HashInstance.Init; |
HashInstance.Calc(OuterKeyPad[0], BlockSize); |
HashInstance.Calc(Result[0], DigestLength); |
HashInstance.Done; |
Result := HashInstance.DigestAsBytes; |
finally |
HashInstance.Free; |
end; |
end; |
procedure SecureDeleteFile(AFileName: string); |
begin |
// TODO: Implement |
DeleteFile(AFileName); |
end; |
function DEC51_Identity(IdentityBase: Int64; ClassName: string): Int64; |
var |
Signature: AnsiString; |
cn: string; |
begin |
cn := ClassName; |
if cn = 'THash_SHA0'{DEC6.0} then cn := 'THash_SHA'{DEC5.1}; |
if cn = 'THash_Whirlpool0'{DEC6.0} then cn := 'THash_Whirlpool'{DEC5.1}; |
if cn = 'TCipher_AES'{DEC6.0} then cn := 'TCipher_Rijndael'{DEC5.1}; |
Signature := AnsiString(StringOfChar(#$5A, 256 - Length(cn)) + AnsiUpperCase(cn)); |
Result := CRC32(IdentityBase, Signature[1], Length(Signature)); |
end; |
function DEC51_HashById(IdentityBase, Identity: Int64; NoException: boolean=false): TDECHashClass; |
var |
p: TPair<int64, TDECClass>; |
c: TDECClass; |
begin |
for p in TDECHash.ClassList do |
begin |
c := p.Value; |
if (c <> nil) and (Identity = DEC51_Identity(IdentityBase, c.ClassName)) then |
begin |
result := TDECHashClass(c); |
exit; |
end; |
end; |
if NoException then |
result := nil |
else |
raise Exception.CreateFmt('Hash ID %d with base %d not found', [Identity, IdentityBase]); |
end; |
function DEC51_CipherById(IdentityBase, Identity: Int64; NoException: boolean=false): TDECCipherClass; |
var |
p: TPair<int64, TDECClass>; |
c: TDECClass; |
begin |
for p in TDECCipher.ClassList do |
begin |
c := p.Value; |
if (c <> nil) and (Identity = DEC51_Identity(IdentityBase, c.ClassName)) then |
begin |
result := TDecCipherClass(c); |
exit; |
end; |
end; |
if NoException then |
result := nil |
else |
raise Exception.CreateFmt('Cipher ID %d with base %d not found', [Identity, IdentityBase]); |
end; |
const |
DC4_ID_BASES: array[Low(TDcFormatVersion)..High(TDcFormatVersion)] of Int64 = ( |
$84485225, // Hagen Reddmann Example (no .dc4 files) |
$59178954, // (De)Coder 4.0 (identities not used) |
$84671842, // (De)Coder 4.1 beta |
$19387612, // (De)Coder 4.1 final/cancelled |
$1259d82a // (De)Coder 5.0 WIP |
); |
// This is the OID { iso(1) identified-organization(3) dod(6) internet(1) private(4) enterprise(1) 37476 products(2) decoder(2) fileformat(1) dc4(4) } |
DC4_OID = '1.3.6.1.4.1.37476.2.2.1.4'; |
procedure DeCoder4X_Compress(InputFileName, OutputFileName: string); |
var |
CompressInputStream: TFileStream; |
CompressOutputStream: TFileStream; |
CompressionStream: TCompressionStream; |
begin |
CompressInputStream:=TFileStream.Create(InputFileName, fmOpenRead); |
try |
CompressOutputStream:=TFileStream.Create(OutputFileName, fmCreate); |
try |
CompressionStream:=TCompressionStream.Create(clMax, CompressOutputStream); |
try |
CompressionStream.CopyFrom(CompressInputStream, CompressInputStream.Size); |
finally |
FreeAndNil(CompressionStream); |
end; |
finally |
FreeAndNil(CompressOutputStream); |
end; |
finally |
FreeAndNil(CompressInputStream); |
end; |
end; |
procedure DeCoder4X_Decompress(InputFileName, OutputFileName: string); |
var |
Buf: array[0..4095] of Byte; |
Count: Integer; |
CompressInputStream: TFileStream; |
CompressOutputStream: TFileStream; |
DecompressionStream: TDecompressionStream; |
begin |
CompressInputStream:=TFileStream.Create(InputFileName, fmOpenRead); |
try |
CompressOutputStream:=TFileStream.Create(OutputFileName, fmCreate); |
try |
DecompressionStream := TDecompressionStream.Create(CompressInputStream); |
try |
while true do |
begin |
Count := DecompressionStream.Read(Buf[0], SizeOf(Buf)); |
if Count = 0 then |
break |
else |
CompressOutputStream.Write(Buf[0], Count); |
end; |
finally |
FreeAndNil(DecompressionStream); |
end; |
finally |
FreeAndNil(CompressOutputStream); |
end; |
finally |
FreeAndNil(CompressInputStream); |
end; |
end; |
function DeCoder4X_DecodeFile(const AFileName, AOutput: String; const APassword: RawByteString; const OnlyReadFileInfo: boolean=false; OnProgressProc: TDECProgressEvent=nil): TDC4FileInfo; |
var |
Source: TStream; |
procedure Read(var Value; Size: Integer); |
begin |
Source.ReadBuffer(Value, Size); |
end; |
function ReadByte: Byte; |
begin |
Read(Result, SizeOf(Result)); |
end; |
function ReadLong: LongWord; |
begin |
Read(Result, SizeOf(Result)); |
Result := Result shl 24 or Result shr 24 or Result shl 8 and $00FF0000 or Result shr 8 and $0000FF00; |
end; |
function ReadRaw(leng: integer): RawByteString; |
begin |
SetLength(Result, leng); |
Read(Result[1], Length(Result)); |
end; |
function Convert(const Bytes: TBytes): RawByteString; inline; |
begin |
SetString(Result, PAnsiChar(pointer(Bytes)), length(Bytes)); |
end; |
var |
ch: RawByteString; |
F: byte; |
V: TDcFormatVersion; |
Cipher: TDECCipher; |
Seed: RawByteString; |
tempstream: TFileStream; |
HashResult: TBytes; |
HashResult2: RawByteString; |
idBase: Int64; |
MagicSeq, FileTerminus: RawByteString; |
OrigName: string; |
ahash: TDECHash; |
Key: TBytes; |
FileNameUserPasswordEncrypted: boolean; |
FilenamePassword: RawByteString; |
KdfVersion: TKdfVersion; |
HMacKey: TBytes; |
IV: TBytes; |
Filler: Byte; |
CipherClass: TDECCipherClass; |
HashClass: TDECHashClass; |
bakSourcePosEncryptedData: Int64; |
IsCompressed: boolean; |
IsFolder: boolean; |
ATempFileName: string; |
KdfIterations: Long; |
OrigNameEncrypted: RawByteString; |
iBlockFillMode: Byte; |
begin |
Source := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyNone); |
tempstream := nil; |
cipher := nil; |
ahash := nil; |
IsCompressed := false; |
IsFolder := false; |
try |
try |
// Is it the Hagen Reddmann example file? |
CipherClass := DEC51_CipherById(DC4_ID_BASES[fvUnknown], ReadLong, true); |
if Assigned(CipherClass) then |
begin |
// 1. Cipher class |
Cipher := CipherClass.Create; |
// 2. Cipher Mode |
Cipher.Mode := TCipherMode(ReadByte); |
Cipher.FillMode := fmByte; |
// 3. Hash class |
HashClass := DEC51_HashById(DC4_ID_BASES[fvUnknown], ReadLong); |
AHash := HashClass.Create; |
// 4. Seed with length byte prefix |
Seed := ReadRaw(ReadByte); |
// 5. Data with length byte prefix |
Key := TDECHashExtended(ahash).KDfx(APassword, Length(APassword), Seed, Length(Seed), Cipher.Context.KeySize); |
Cipher.Init(Key, nil, $FF); |
try |
TDECFormattedCipher(Cipher).DecodeStream(Source, tempstream, ReadLong, OnProgressProc); |
finally |
Cipher.Done; |
end; |
// 6. CalcMac with length byte prefix |
HashResult2 := ReadRaw(ReadByte); |
if HashResult2 <> Cipher.CalcMAC then |
raise Exception.Create('Invalid decryption'); |
// These vars are set for the result stats |
V := fvUnknown; |
IsCompressed := false; |
IsFolder := false; |
OrigName := ''; |
kdfVersion := kvKdfx; |
KdfIterations := 0; |
SetLength(IV, 0); |
end |
else |
begin |
Source.Position := 0; |
// 1. Flags |
// Bit 0: [Ver1+] Is ZIP compressed folder (1) or a regular file (0)? |
// Bit 1: [Ver2+] Additionally ZLib compressed (1) or not ZLib compressed (0)? |
// Bit 2: Reserved |
// Bit 3: Reserved |
// Bit 4: Reserved |
// Bit 5: Reserved |
// Bit 6: Reserved |
// Bit 7: Reserved |
F := ReadByte; |
IsFolder := (F and 1) <> 0; |
IsCompressed := (F and 2) <> 0; |
if IsCompressed then |
begin |
ATempFileName := ChangeFileExt(AFileName, '.dc5_tmp'); |
if not OnlyReadFileInfo then |
tempstream := TFileStream.Create(ATempFileName, fmOpenReadWrite or fmCreate); |
end |
else |
begin |
if not OnlyReadFileInfo then |
tempstream := TFileStream.Create(AOutput, fmOpenReadWrite or fmCreate); |
end; |
if not OnlyReadFileInfo then |
tempstream.Size := 0; |
// 2. Version |
// 01 = (De)Coder 4.0 |
// 02 = (De)Coder 4.1 Beta |
// 03 = (De)Coder 4.1 Final Cancelled (never released) |
// 04 = (De)Coder 5.0 WorkInProgress |
V := TDcFormatVersion(ReadByte); // if too big, it will automatically be set to 0 |
if V = fvUnknown then raise Exception.Create('DC Unsupported version'); |
// We need this later |
if V = fvDc40 then |
begin |
MagicSeq := ''; |
FileTerminus := ''; |
end |
else if V = fvDc41Beta then |
begin |
MagicSeq := ''; |
FileTerminus := 'RENURVJNSU5VUw=='; // (BASE64: "DCTERMINUS") |
end |
else if V = fvDc41FinalCancelled then |
begin |
MagicSeq := ''; |
FileTerminus := RawByteString(#$63#$F3#$DF#$89#$B7#$27#$20#$EA); |
end |
else |
begin |
MagicSeq := RawByteString(DC4_OID); |
FileTerminus := ''; |
end; |
// 2.1 Magic Sequence (only version 4) |
if MagicSeq <> '' then |
begin |
if ReadRaw(Length(MagicSeq)) <> MagicSeq then |
raise Exception.Create('Invalid magic sequence'); |
end; |
// 3. Filename |
// Ver1: Clear text filename, terminated with "?" |
// Ver2: Base64 encoded filename, terminated with "?" |
// Ver3: Encrypted filename |
// Ver4: Clear text filename, with length byte in front of it |
OrigName := ''; |
FileNameUserPasswordEncrypted := false; |
if (V = fvDc40) or (V = fvDc41Beta) then |
begin |
ch := ReadRaw(1); |
while ch <> '?' do |
begin |
OrigName := OrigName + string(ch); |
ch := ReadRaw(1); |
end; |
if V = fvDc41Beta then |
begin |
OrigName := string(Convert(DecodeBase64(AnsiString(OrigName)))); |
end; |
end |
else if V = fvDc41FinalCancelled then |
begin |
FileNameUserPasswordEncrypted := ReadByte = $01; // Filename encrypted with user-password? (00=No, 01=Yes) |
// Filename encrypted with DEC 5.1c |
// Encryption-Password = Hash->KDfx(User-Password, Seed) |
// if not encrypted with user-password, otherwise: |
// Encryption-Password = Hash->KDfx(5Eh D1h 6Bh 12h 7Dh B4h C4h 3Ch, Seed) |
OrigNameEncrypted := ReadRaw(ReadLong); // will be decrypted below (after we initialized hash/cipher) |
end |
else if V = fvDc50Wip then |
begin |
// Possible values: |
// - Original name in its entirety (example "foobar.txt") |
// - Just its extension (example "*.txt") |
// - Redacted (empty string "") |
OrigName := UTF8ToString(ReadRaw(ReadByte)); |
end |
else |
Assert(False); |
// 4. IdBase (only version 2+) |
if V = fvDc40 then |
idBase := DC4_ID_BASES[V] |
else |
idBase := ReadLong; |
// 5. Cipher identity (only version 2+) |
if V = fvDc40 then |
CipherClass := TCipher_AES |
else |
CipherClass := DEC51_CipherById(idBase, ReadLong); |
if (V <> fvDc50Wip) and (CipherClass = TCipher_SCOP) then Cipherclass := TCipher_SCOP_DEC52; // unclear if it was faulty in DEC 5.2 or DEC 5.1c |
if (V <> fvDc50Wip) and (CipherClass = TCipher_XTEA) then Cipherclass := TCipher_XTEA_DEC52; // XTEA was not existing in DEC 5.1c, so it must be a DEC 5.2 problem only |
if (V <> fvDc50Wip) and (CipherClass = TCipher_Shark) then Cipherclass := TCipher_Shark_DEC52; // It didn't work in DEC 5.1c |
Cipher := CipherClass.Create; |
// 6. Cipher mode (only version 2+) |
if V = fvDc40 then |
Cipher.Mode := TCipherMode.cmCTSx |
else |
Cipher.Mode := TCipherMode(ReadByte); |
// 7. Hash identity (only version 2+) |
if V = fvDc40 then |
HashClass := THash_SHA512 |
else |
HashClass := DEC51_HashById(idBase, ReadLong); |
AHash := HashClass.Create; |
// 7.5 IV (only version 4+) |
if V = fvDc50Wip then |
IV := BytesOf(ReadRaw(ReadByte)); |
// 7.6 Cipher block filling mode (only version 4+) |
if V = fvDc50Wip then |
begin |
iBlockFillMode := ReadByte; |
if integer(iBlockFillMode) > Ord(High(TBlockFillMode)) then |
raise Exception.Create('Invalid block filling mode'); |
Cipher.FillMode := TBlockFillMode(iBlockFillMode); |
end |
else |
begin |
Cipher.FillMode := TBlockFillMode.fmByte; |
end; |
// 7.7 Last-Block-Filler (only version 4+) |
if V = fvDc50Wip then |
Filler := ReadByte |
else |
Filler := $FF; |
// 8. Seed |
if V = fvDc40 then |
Seed := ReadRaw(16) |
else |
Seed := ReadRaw(ReadByte); |
// 8.5 KDF version (only version 4+) |
// 1=KDF1, 2=KDF2, 3=KDF3, 4=KDFx, 5=PBKDF2 |
// For PBKDF2, a DWORD with the iterations follows |
if V = fvDc50Wip then |
KdfVersion := TKdfVersion(ReadByte) |
else |
KdfVersion := kvKdfx; |
if KDFVersion = kvUnknown then {this will also be set if the value is too big} |
raise Exception.Create('Invalid KDF version'); |
// 8.6 KDF Iterations (ONLY PRESENT for PBKDF2) |
if KDFVersion = kvPbkdf2 then |
KdfIterations := ReadLong |
else |
KdfIterations := 0; |
// 9. Encrypted data |
if not OnlyReadFileInfo then |
begin |
(* TODO: |
Not implemented for version 3 (actually, I don't understand this description anymore): |
The "special-checksum" of a file can be used as the user password. |
The formula is: |
User-Password = Hash(File-Contents) |
Combined formula: |
Encryption-Password = Hash->KDfx(Hash(File-Contents), Seed) |
What I don't understand: How should the program know if the user password or the "hash" password is used?? |
*) |
if KDFVersion = kvKdfx then |
Key := TDECHashExtended(ahash).KDFx(BytesOf(APassword), BytesOf(Seed), Cipher.Context.KeySize) |
else if KDFVersion = kvKdf1 then |
Key := TDECHashExtended(ahash).KDF1(BytesOf(APassword), BytesOf(Seed), Cipher.Context.KeySize) |
else if KDFVersion = kvKdf2 then |
Key := TDECHashExtended(ahash).KDF2(BytesOf(APassword), BytesOf(Seed), Cipher.Context.KeySize) |
else if KDFVersion = kvKdf3 then |
Key := TDECHashExtended(ahash).KDF3(BytesOf(APassword), BytesOf(Seed), Cipher.Context.KeySize) |
else if KDFVersion = kvPbkdf2 then |
Key := TDECHashExtended(ahash).PBKDF2(BytesOf(APassword), BytesOf(Seed), KdfIterations, Cipher.Context.KeySize) |
else |
Assert(False); |
HMacKey := Key; |
end; |
// Verify HMAC before decrypting (the HMAC located below) |
if not OnlyReadFileInfo and (V = fvDc50Wip) then |
begin |
bakSourcePosEncryptedData := Source.Position; |
HashResult2 := Convert(TDECHashAuthentication(ahash).HMACStream(HMacKey, Source, source.size-source.Position-ahash.DigestSize-Length(FileTerminus), OnProgressProc)); |
Source.Position := Source.Size - ahash.DigestSize - Length(FileTerminus); |
if ReadRaw(ahash.DigestSize) <> HashResult2 then |
raise Exception.Create('HMAC mismatch'); |
Source.Position := bakSourcePosEncryptedData; |
end; |
if not OnlyReadFileInfo then |
begin |
Cipher.Init(Key, IV, Filler); |
try |
TDECFormattedCipher(Cipher).DecodeStream(Source, tempstream, source.size-source.Position-ahash.DigestSize-Length(FileTerminus), OnProgressProc); |
finally |
Cipher.Done; |
end; |
end; |
// Decrypt filename (version 3 only) |
if V = fvDc41FinalCancelled then |
begin |
if not FileNameUserPasswordEncrypted then |
begin |
FilenamePassword := RawByteString(#$5E#$D1#$6B#$12#$7D#$B4#$C4#$3C); |
if KDFVersion = kvKdfx then |
Key := TDECHashExtended(ahash).KDFx(BytesOf(FilenamePassword), BytesOf(Seed), Cipher.Context.KeySize) |
else if KDFVersion = kvKdf1 then |
Key := TDECHashExtended(ahash).KDF1(BytesOf(FilenamePassword), BytesOf(Seed), Cipher.Context.KeySize) |
else if KDFVersion = kvKdf2 then |
Key := TDECHashExtended(ahash).KDF2(BytesOf(FilenamePassword), BytesOf(Seed), Cipher.Context.KeySize) |
else if KDFVersion = kvKdf3 then |
Key := TDECHashExtended(ahash).KDF3(BytesOf(FilenamePassword), BytesOf(Seed), Cipher.Context.KeySize) |
else if KDFVersion = kvPbkdf2 then |
Key := TDECHashExtended(ahash).PBKDF2(BytesOf(FilenamePassword), BytesOf(Seed), KdfIterations, Cipher.Context.KeySize) |
else |
Assert(False); |
end; |
Cipher.Init(Key, IV, Filler); |
try |
OrigNameEncrypted := Convert(TDECFormattedCipher(Cipher).DecodeBytes(BytesOf(OrigNameEncrypted))); |
if Length(OrigNameEncrypted) mod 2 <> 0 then OrigNameEncrypted := OrigNameEncrypted + #0; // should not happen, otherwise it is no valid UTF-16! |
OrigName := WideString(PWideString(Pointer(OrigNameEncrypted))); |
finally |
Cipher.Done; // TODO: I don't understand, if Done() processes the last byte/block, it won't affect our string since we already got the result from DecodeRawByteString(). Asked here https://github.com/MHumm/DelphiEncryptionCompendium/issues/63 |
end; |
end; |
// 10. Checksum (version 1-3 hash on source, version 4+ hmac on ciphertext) |
// (For version 4, the HMAC was checked above, before encrypting) |
if not OnlyReadFileInfo and (V <> fvDc50Wip) then |
begin |
tempstream.position := 0; |
if V = fvDc40 then |
begin |
TDECHashExtended(ahash).CalcStream(tempstream, tempstream.size, HashResult, OnProgressProc); |
HashResult2 := Convert(HashResult); |
end |
else if V = fvDc41Beta then |
begin |
TDECHashExtended(ahash).CalcStream(tempstream, tempstream.size, HashResult, OnProgressProc); |
HashResult2 := TDECHashExtended(ahash).CalcString(Convert(HashResult)+Seed+APassword, TFormat_Copy); |
end |
else if V = fvDc41FinalCancelled then |
begin |
TDECHashExtended(ahash).CalcStream(tempstream, tempstream.size, HashResult, OnProgressProc); |
HashResult2 := TDECHashExtended(ahash).CalcString( |
Convert(HashResult) + Seed + |
TDECHashExtended(ahash).CalcString( |
Seed+TDECHashExtended(ahash).CalcString(Seed+APassword, TFormat_Copy) |
, TFormat_Copy) |
, TFormat_Copy); |
end |
else |
Assert(False); |
if ReadRaw(ahash.DigestSize) <> HashResult2 then |
raise Exception.Create('Hash mismatch'); |
end; |
// 11. Terminus (only version 2 and 3) |
if OnlyReadFileInfo then Source.Position := Source.Size - Length(FileTerminus); |
if (FileTerminus <> '') and (ReadRaw(Length(FileTerminus)) <> FileTerminus) then |
raise Exception.Create('File terminus wrong'); |
if not OnlyReadFileInfo and IsCompressed then |
begin |
FreeAndNil(tempstream); |
DeCoder4X_Decompress(ATempFileName, AOutput); |
end; |
if not OnlyReadFileInfo and IsFolder then |
begin |
// TODO: Extract ZIP (ver1-3) or 7zip (ver4) to folder |
ShowMessage('Note: Decrypting of folders is not possible. The archive was decrypted, but you must unpack it with an external tool'); |
end; |
end; |
ZeroMemory(@result, Sizeof(result)); |
result.Dc4FormatVersion := V; |
result.IsZLibCompressed := IsCompressed; |
result.IsCompressedFolder := IsFolder; |
result.OrigFileName := OrigName; |
result.KDF := KdfVersion; |
result.KDF_Iterations := KdfIterations; |
result.IVSize := Length(IV); |
result.SeedSize := Length(Seed); |
result.HashClass := HashClass; |
result.CipherClass := CipherClass; |
result.CipherMode := Cipher.Mode; |
result.FillMode := Cipher.FillMode; |
except |
if Assigned(tempstream) then ProtectStream(tempstream); |
raise; |
end; |
finally |
if Assigned(Source) then FreeAndNil(Source); |
if Assigned(tempstream) then FreeAndNil(tempstream); |
if Assigned(Cipher) then FreeAndNil(Cipher); |
if Assigned(ahash) then FreeAndNil(ahash); |
if IsCompressed and (ATempFileName<>'') then |
begin |
SecureDeleteFile(ATempFileName); |
end; |
end; |
end; |
function IsCompressedFileType(AFileName: string): boolean; |
begin |
result := |
SameText(ExtractFileExt(AFileName), '.zip') or |
SameText(ExtractFileExt(AFileName), '.7z') or |
SameText(ExtractFileExt(AFileName), '.rar') or |
SameText(ExtractFileExt(AFileName), '.gz') or |
SameText(ExtractFileExt(AFileName), '.xz') or |
SameText(ExtractFileExt(AFileName), '.mp3') or |
SameText(ExtractFileExt(AFileName), '.mp4') or |
SameText(ExtractFileExt(AFileName), '.png') or |
SameText(ExtractFileExt(AFileName), '.gif') or |
SameText(ExtractFileExt(AFileName), '.jpg') or |
SameText(ExtractFileExt(AFileName), '.jpeg'); |
end; |
procedure DeCoder4X_EncodeFile_Ver4(const AFileName, AOutput: String; const APassword: RawByteString; OnProgressProc: TDECProgressEvent=nil); |
var |
tempstream: TStream; |
procedure Write(var Value; Size: Integer); |
begin |
tempstream.WriteBuffer(Value, Size); |
end; |
procedure WriteByte(b: Byte); |
begin |
Write(b, SizeOf(b)); |
end; |
procedure WriteLong(lw: LongWord); |
begin |
lw := lw shl 24 or lw shr 24 or lw shl 8 and $00FF0000 or lw shr 8 and $0000FF00; |
Write(lw, SizeOf(lw)); |
end; |
procedure WriteRaw(rb: RawByteString); |
begin |
Write(rb[1], Length(rb)); |
end; |
function Convert(const Bytes: TBytes): RawByteString; inline; |
begin |
SetString(Result, PAnsiChar(pointer(Bytes)), length(Bytes)); |
end; |
var |
F: byte; |
Cipher: TDECCipher; |
Seed: RawByteString; |
Source: TFileStream; |
HashResult2: RawByteString; |
idBase: Int64; |
OrigName: RawByteString; |
ahash: TDECHash; |
Key: TBytes; |
KdfVersion: TKdfVersion; |
HMacKey: TBytes; |
IV: TBytes; |
Filler: Byte; |
CipherClass: TDECCipherClass; |
HashClass: TDECHashClass; |
bakTempStreamPosEncryptedData: Int64; |
tmp64: Int64; |
IsCompressed: boolean; |
IsFolder: boolean; |
ATempFileName: string; |
KdfIterations: long; |
begin |
tempstream := nil; |
Source := nil; |
cipher := nil; |
ahash := nil; |
IsCompressed := false; |
IsFolder := false; |
try |
IsFolder := DirectoryExists(AFileName); |
if IsFolder then |
begin |
// TODO: Implement Zipping |
// For ver1-3: ZIP (attention: 4 GiB limitation!) |
// For ver4: 7zip |
raise Exception.Create('Encryption of folders is not supported. Please pack the file contents using an external tool.'); |
end; |
IsCompressed := not IsCompressedFileType(AFileName); |
if IsCompressed then |
begin |
ATempFileName := ChangeFileExt(AFileName, '.dc5_tmp'); |
DeCoder4X_Compress(AFileName, ATempFileName); |
Source := TFileStream.Create(ATempFileName, fmOpenRead or fmShareDenyNone); |
end |
else |
begin |
Source := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyNone); |
end; |
tempstream := TFileStream.Create(AOutput, fmOpenReadWrite or fmCreate); |
tempstream.Size := 0; |
// 1. Flags |
// Bit 0: [Ver1+] Is ZIP compressed folder (1) or a regular file (0)? |
// Bit 1: [Ver2+] Additionally ZLib compressed (1) or not ZLib compressed (0)? |
// Bit 2: Reserved |
// Bit 3: Reserved |
// Bit 4: Reserved |
// Bit 5: Reserved |
// Bit 6: Reserved |
// Bit 7: Reserved |
F := 0; |
if IsFolder then F := F + 1; |
if IsCompressed then F := F + 2; |
WriteByte(F); |
// 2. Version |
// 04 = (De)Coder 5.0 WorkInProgress |
WriteByte(Ord(fvDc50Wip)); |
// 2.1 Magic Sequence (only version 4) |
WriteRaw(DC4_OID); |
// 3. Filename |
// Ver4: Clear text filename, with length byte in front of it |
// Possible values: |
// - Original name in its entirety (example "foobar.txt") |
// - Just its extension (example "*.txt") |
// - Redacted (empty string "") |
OrigName := UTF8Encode(ExtractFileName(AFileName)); |
WriteByte(Length(OrigName)); |
WriteRaw(OrigName); |
// 4. IdBase (only version 2+) |
idBase := DC4_ID_BASES[fvDc50Wip]; |
WriteLong(idBase); |
// 5. Cipher identity (only version 2+) |
CipherClass := TCipher_AES; |
WriteLong(DEC51_Identity(idBase, CipherClass.ClassName)); |
Cipher := CipherClass.Create; |
// 6. Cipher mode (only version 2+) |
Cipher.Mode := TCipherMode.cmCTSx; |
WriteByte(Ord(Cipher.Mode)); |
// 7. Hash identity (only version 2+) |
HashClass := THash_SHA3_512; |
WriteLong(DEC51_Identity(idBase, HashClass.ClassName)); |
AHash := HashClass.Create; |
// 7.5 IV (only version 4+) |
WriteByte(16); |
IV := RandomBytes(16); |
WriteRaw(Convert(IV)); |
// 7.6 Cipher block filling mode (only version 4+) |
Cipher.FillMode := TBlockFillMode.fmByte; |
WriteByte(Ord(Cipher.FillMode)); |
// 7.7 Last-Block-Filler (only version 4+) |
Filler := $FF; |
WriteByte(Filler); |
// 8. Seed |
WriteByte(32); |
Seed := Convert(RandomBytes(32)); |
WriteRaw(Seed); |
// 8.5 KDF version (only version 4+) |
// 1=KDF1, 2=KDF2, 3=KDF3, 4=KDFx, 5=PBKDF2 |
KdfVersion := kvKdfx; |
WriteByte(Ord(KdfVersion)); |
KdfIterations := 0; // only for KdfVersion=kvPbkdf2 |
// 9. Encrypted data |
if KDFVersion = kvKdfx then |
Key := TDECHashExtended(ahash).KDFx(BytesOf(APassword), BytesOf(Seed), Cipher.Context.KeySize) |
else if KDFVersion = kvKdf1 then |
Key := TDECHashExtended(ahash).KDF1(BytesOf(APassword), BytesOf(Seed), Cipher.Context.KeySize) |
else if KDFVersion = kvKdf2 then |
Key := TDECHashExtended(ahash).KDF2(BytesOf(APassword), BytesOf(Seed), Cipher.Context.KeySize) |
else if KDFVersion = kvKdf3 then |
Key := TDECHashExtended(ahash).KDF3(BytesOf(APassword), BytesOf(Seed), Cipher.Context.KeySize) |
else if KDFVersion = kvPbkdf2 then |
Key := TDECHashExtended(ahash).PBKDF2(BytesOf(APassword), BytesOf(Seed), KdfIterations, Cipher.Context.KeySize) |
else |
Assert(False); |
HMacKey := Key; |
Cipher.Init(Key, IV, Filler); |
try |
Source.Position := 0; |
bakTempStreamPosEncryptedData := tempstream.Position; |
TDECFormattedCipher(Cipher).EncodeStream(Source, tempstream, source.size, OnProgressProc); |
finally |
Cipher.Done; |
end; |
// 10. Checksum (version 1-3 hash on source, version 4+ hmac on ciphertext) |
tmp64 := tempstream.Position; |
tempstream.Position := bakTempStreamPosEncryptedData; |
HashResult2 := Convert(TDECHashAuthentication(ahash).HMACStream(HMacKey, tempstream, tempstream.size-tempstream.Position, OnProgressProc)); |
tempstream.Position := tmp64; |
WriteRaw(HashResult2); |
finally |
if Assigned(Source) then FreeAndNil(Source); |
if Assigned(tempstream) then FreeAndNil(tempstream); |
if Assigned(Cipher) then FreeAndNil(Cipher); |
if Assigned(ahash) then FreeAndNil(ahash); |
if IsCompressed and (ATempFileName<>'') then |
begin |
SecureDeleteFile(ATempFileName); |
end; |
end; |
end; |
function YesNo(b: boolean): string; |
begin |
if b then exit('Yes') else exit('No'); |
end; |
procedure DeCoder4X_PrintFileInfo(fi: TDC4FileInfo; sl: TStrings); |
begin |
sl.Add('File Format: (De)Coder 4.x/5.x Encrypted File'); |
sl.Add('Sub-Format: ' + DC4_SUBFORMAT_VERSION[fi.Dc4FormatVersion]); |
sl.Add('Is compressed folder: ' + YesNo(fi.IsCompressedFolder)); |
sl.Add('Data additionally ZLib-compressed: ' + YesNo(fi.IsZLibCompressed)); |
sl.Add('Original filename: ' + fi.OrigFileName); |
sl.Add('Key Derivation Algorithm: ' + KDF_VERSION_NAMES[fi.KDF]); |
if fi.KDF = kvPbkdf2 then |
sl.Add('PBKDF Iterations: ' + IntToStr(fi.KDF_Iterations)); |
sl.Add('Hashing Algorithm: ' + StringReplace(fi.HashClass.ClassName, 'THash_', '', [])); |
sl.Add('Hash Digest Size: ' + IntToStr(fi.HashClass.DigestSize)); |
sl.Add('Hash Block Size: ' + IntToStr(fi.HashClass.BlockSize)); |
sl.Add('Hash Seed Size: ' + IntToStr(fi.SeedSize)); |
sl.Add('Encryption Algorithm: ' + StringReplace(fi.CipherClass.ClassName, 'TCipher_', '', [])); |
sl.Add('Cipher Key Size: ' + IntToStr(fi.CipherClass.Context.KeySize)); |
sl.Add('Cipher Block Size: ' + IntToStr(fi.CipherClass.Context.BlockSize)); |
sl.Add('Cipher Buffer Size: ' + IntToStr(fi.CipherClass.Context.BufferSize)); |
sl.Add('Cipher IV Size: ' + IntToStr(fi.IVSize)); |
sl.Add('Cipher Mode: ' + CIPHER_MODE_NAMES[fi.CipherMode]); |
sl.Add('Cipher Block Filling Mode: ' + CIPHER_FILLMODE_NAMES[fi.FillMode]); |
sl.Add('Message Authentication: ' + INTEGRITY_CHECK_INFO[fi.Dc4FormatVersion]); |
end; |
initialization |
RandomSeed; |
end. |
/trunk/Decoder5/DecoderMain.dfm |
---|
0,0 → 1,51 |
object FormMain: TFormMain |
Left = 0 |
Top = 0 |
Caption = 'ProgressTest' |
ClientHeight = 467 |
ClientWidth = 635 |
Color = clBtnFace |
Constraints.MinHeight = 226 |
Constraints.MinWidth = 350 |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clWindowText |
Font.Height = -11 |
Font.Name = 'Tahoma' |
Font.Style = [] |
DesignSize = ( |
635 |
467) |
TextHeight = 13 |
object Button1: TButton |
Left = 8 |
Top = 96 |
Width = 129 |
Height = 49 |
Caption = 'Decrypt' |
TabOrder = 0 |
OnClick = Button1Click |
end |
object ProgressBar1: TProgressBar |
Left = 8 |
Top = 64 |
Width = 619 |
Height = 17 |
Anchors = [akLeft, akTop, akRight] |
TabOrder = 1 |
end |
object Memo1: TMemo |
Left = 8 |
Top = 184 |
Width = 619 |
Height = 275 |
Font.Charset = ANSI_CHARSET |
Font.Color = clWindowText |
Font.Height = -11 |
Font.Name = 'Courier New' |
Font.Style = [] |
Lines.Strings = ( |
'Memo1') |
ParentFont = False |
TabOrder = 2 |
end |
end |
/trunk/Decoder5/DecoderMain.pas |
---|
0,0 → 1,112 |
unit DecoderMain; |
interface |
uses |
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, |
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.StdCtrls; |
type |
TFormMain = class(TForm) |
Button1: TButton; |
ProgressBar1: TProgressBar; |
Memo1: TMemo; |
procedure Button1Click(Sender: TObject); |
end; |
var |
FormMain: TFormMain; |
implementation |
uses |
DecoderEncDec, DECTypes; |
{$R *.dfm} |
procedure OnProgressProc(Size, Pos: Int64; State: TDECProgressState); |
begin |
FormMain.ProgressBar1.Min := 0; |
FormMain.ProgressBar1.Max := Size; |
if (State = Finished) then |
FormMain.ProgressBar1.Position := FormMain.ProgressBar1.Max |
else |
FormMain.ProgressBar1.Position := Pos; |
end; |
procedure TFormMain.Button1Click(Sender: TObject); |
var |
fi: TDC4FileInfo; |
begin |
DeleteFile('schloss_decoded.bmp'); |
DeCoder4X_DecodeFile('schloss.dc4', 'schloss_decoded.bmp', 'test', false, OnProgressProc); |
ShowMessage('ok'); |
DeCoder4X_EncodeFile_Ver4('schloss_decoded.bmp', 'schloss.dc5', 'test', OnProgressProc); |
DeCoder4X_DecodeFile('schloss.dc5', 'schloss_decoded_dc5.bmp', 'test', false, OnProgressProc); |
ShowMessage('ok'); |
fi := DeCoder4X_DecodeFile('schloss.dc4', '', '', true); |
ShowMessage('ok'); |
fi := DeCoder4X_DecodeFile('schloss.dc5', '', '', true); |
ShowMessage('ok'); |
Memo1.Lines.Clear; |
DeCoder4X_PrintFileInfo(fi, Memo1.Lines); |
end; |
(* |
procedure TFormMain.Button2Click(Sender: TObject); |
var |
p: TPair<int64, TDECClass>; |
c: TDECClass; |
cn: string; |
const |
IdentityBase = $1259D82A; // DC 5.0 |
begin |
Memo1.Clear; |
for p in TDECHash.ClassList do |
begin |
c := p.Value; |
cn := c.ClassName; |
Memo1.Lines.Add( |
'0x'+IntToHex(DEC51_Identity(IdentityBase, cn), 8) + #9 + |
cn + |
' (DigestSize: '+IntToStr(TDECHashClass(c).DigestSize) + |
', BlockSize: '+IntToStr(TDECHashClass(c).BlockSize) + ')' |
); |
end; |
end; |
procedure TFormMain.Button3Click(Sender: TObject); |
var |
p: TPair<int64, TDECClass>; |
c: TDECClass; |
cn: string; |
const |
IdentityBase = $1259D82A; // DC 5.0 |
begin |
Memo1.Clear; |
for p in TDECCipher.ClassList do |
begin |
c := p.Value; |
cn := c.ClassName; |
Memo1.Lines.Add( |
'0x'+IntToHex(DEC51_Identity(IdentityBase, cn), 8) + #9 + |
cn + |
' (KeySize: '+IntToStr(TDECCipherClass(c).Context.KeySize) + |
', BlockSize: '+IntToStr(TDECCipherClass(c).Context.BlockSize) + |
', BufferSize: '+IntToStr(TDECCipherClass(c).Context.BufferSize) + ')' |
); |
end; |
end; |
*) |
end. |
/trunk/Decoder5/VCL_DEC/BuildAll.cmd |
---|
0,0 → 1,157 |
@echo off |
cls |
setlocal enableextensions |
setlocal enabledelayedexpansion |
echo. |
echo Compiles for all Delphis in %ProgramFiles(x86)%\Embarcadero |
echo TODO : switch to paths read out of registry |
echo HKCU\Software\Embarcadero\BDS\*.0 : RootDir |
echo. |
echo Compiles as well for Lazarus/FPC in C:\lazarus |
echo. |
echo creates one directory per DelphiVersion+ProjectConfig with the DCUs |
echo ..\Compiled\DCU_IDE$(ProductVersion)_$(Platform)_$(Config) |
echo. |
title CLEAR |
echo. |
echo ##### CLEAR ##### |
echo. |
echo delete "..\Compiled" |
echo. |
del "%~dpn0.log" |
rd /s /q "%~dp0..\Compiled" |
cd /d "%ProgramFiles(x86)%\Embarcadero" |
for /r %%X in (rsvars*.bat) do call :run_compiler "%%X" |
echo. |
title %comspec% |
type "%~dpn0.log" |
echo. |
find /c "FAIL " "%~dpn0.log" >nul |
if not errorlevel 1 pause |
exit /b |
:run_compiler |
title COMPILE |
echo. |
echo ##### %~dp1 ##### |
echo. |
setlocal |
call "%~1" |
set IDEVER=unknown |
for /f "delims=" %%E in ("%BDS%") do set IDEVER=%%~nxE |
echo. >> "%~dpn0.log" |
echo ### Delphi %IDEVER% ### >> "%~dpn0.log" |
echo. >> "%~dpn0.log" |
::::: Lazarus-DCUs ::::: |
title COMPILE Lazarus x86_64 win64 : Source\DEC60Lazarus.lpk |
echo ### Lazarus x86_64 win64 # Source\DEC60Lazarus.lpk |
C:\lazarus\lazbuild.exe --build-all --cpu=x86_64 --build-mode=Default "%~dp0\DEC60Lazarus.lpk" |
if errorlevel 1 ( |
echo FAIL Source\DEC60Lazarus.lpk : x86_64 win64 >> "%~dpn0.log" |
rundll32 user32.dll,MessageBeep |
timeout 11 |
) else ( |
echo OK Source\DEC60Lazarus.lpk : x86_64 win64 >> "%~dpn0.log" |
) |
echo. |
title COMPILE Lazarus i386 win32 : Source\DEC60Lazarus.lpk |
echo ### Lazarus i386 win32 # Source\DEC60Lazarus.lpk |
C:\lazarus\lazbuild.exe --build-all --cpu=i386 --build-mode=Default "%~dp0\DEC60Lazarus.lpk" |
if errorlevel 1 ( |
echo FAIL Source\DEC60Lazarus.lpk : i386 win32 >> "%~dpn0.log" |
rundll32 user32.dll,MessageBeep |
timeout 11 |
) else ( |
echo OK Source\DEC60Lazarus.lpk : i386 win32 >> "%~dpn0.log" |
) |
echo. |
::::: Delphi-DCUs ::::: |
for %%P in (Win32,Win64,Linux64,Android,Android64,iOSDevice64,iOSSimulator,OSX32,OSX64) do ( |
for %%C in (Debug,Release) do ( |
call :do_compile "Source\DEC60.dproj" %%P %%C |
) |
) |
::::: TestApps ::::: |
echo. >> "%~dpn0.log" |
for %%P in (Win32) do ( |
for %%C in (Debug,Console) do ( |
call :do_compile "Unit Tests\DECDUnitTestSuite.dproj" %%P %%C |
) |
for %%C in (Debug,GUI,MobileGUI,TestInsight) do ( |
call :do_compile "Unit Tests\DECDUnitXTestSuite.dproj" %%P %%C |
) |
) |
::::: DemoApps ::::: |
echo. >> "%~dpn0.log" |
call :do_compile "Demos\Cipher_Console\Cipher_Console.dproj" |
call :do_compile "Demos\Cipher_FMX\Cipher_FMX.dproj" |
call :do_compile "Demos\Format_Console\Format_Console.dproj" |
call :do_compile "Demos\Hash_Console\Hash_Console.dproj" |
call :do_compile "Demos\Hash_FMX\Hash_FMX.dproj" |
call :do_compile "Demos\Progress_VCL\Progress_VCL.dproj" |
call :do_compile "Demos\Random_Console\Random_Console.dproj" |
call :do_compile "Demos\HashBenchmark_FMX\HashBenchmark.dproj" |
echo. >> "%~dpn0.log" |
title RUN Tests |
echo ##### RUN Tests ##### |
echo. |
REM for %%C in (Debug,Console,GUI) do ( |
REM for %%P in (Win32) do ( |
REM call :do_execute DECDUnitTestSuite.exe %%P %%C |
REM call :do_execute DECDUnitXTestSuite.exe %%P %%C |
REM ) |
REM ) |
call :do_execute DECDUnitTestSuite.exe Win32 Console |
call :do_execute DECDUnitTestSuite.exe Win32 Debug |
call :do_execute DECDUnitXTestSuite.exe Win32 Debug |
call :do_execute DECDUnitXTestSuite.exe Win32 GUI |
endlocal |
exit /b |
:do_compile |
title COMPILE %IDEVER% %2 %3 : %~1 |
echo ### %IDEVER% %2 %3 # %~1 |
set params= |
if not "%2" == "" set params=/p:Platform=%2 /p:Config=%3 |
REM msbuild "%~dp0..\%~1" /t:Rebuild %params% :: $(ProductVersion) is missing in msbuild, but is present in InlineCompiler of the IDE |
msbuild "%~dp0..\%~1" /t:Rebuild %params% /p:ProductVersion=%IDEVER% |
if errorlevel 1 ( |
echo FAIL %~1 : %2 %3 >> "%~dpn0.log" |
rundll32 user32.dll,MessageBeep |
timeout 11 |
) else ( |
echo OK %~1 : %2 %3 >> "%~dpn0.log" |
) |
:: remove dir if empty |
if not "%2" == "" ( |
rd /q "%~dp0..\Compiled\BIN_IDE%IDEVER%_%2_%3" >nul |
rd /q "%~dp0..\Compiled\DCP_IDE%IDEVER%_%2_%3" >nul |
rd /q "%~dp0..\Compiled\DCU_IDE%IDEVER%_%2_%3" >nul |
) |
echo. |
exit /b |
:do_execute |
title EXECUTE %IDEVER% %2 %3 : %~1 |
echo ### %IDEVER% %2 %3 # %~1 |
"%~dp0..\Compiled\BIN_IDE%IDEVER%_%2_%3\%~1" |
set "ERR=%ERRORLEVEL% " |
echo RUN:%ERR:~0,6% %~1 : %2 %3 >> "%~dpn0.log" |
echo EXITCODE:%ERR% |
echo. |
exit /b |
/trunk/Decoder5/VCL_DEC/DEC60.dpr |
---|
0,0 → 1,58 |
{***************************************************************************** |
The DEC team (see file NOTICE.txt) licenses this file |
to you under the Apache License, Version 2.0 (the |
"License"); you may not use this file except in compliance |
with the License. A copy of this licence is found in the root directory |
of this project in the file LICENCE.txt or alternatively 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. |
*****************************************************************************} |
// Simple project group for easier DEC development |
program DEC60; |
{$APPTYPE CONSOLE} |
{$R *.res} |
uses |
System.SysUtils, |
DECBaseClass in 'DECBaseClass.pas', |
DECCipherBase in 'DECCipherBase.pas', |
DECCipherFormats in 'DECCipherFormats.pas', |
DECCipherModes in 'DECCipherModes.pas', |
DECCipherInterface in 'DECCipherInterface.pas', |
DECCiphers in 'DECCiphers.pas', |
DECCRC in 'DECCRC.pas', |
DECData in 'DECData.pas', |
DECDataCipher in 'DECDataCipher.pas', |
DECDataHash in 'DECDataHash.pas', |
DECFormat in 'DECFormat.pas', |
DECFormatBase in 'DECFormatBase.pas', |
DECHash in 'DECHash.pas', |
DECHashBase in 'DECHashBase.pas', |
DECHashInterface in 'DECHashInterface.pas', |
DECRandom in 'DECRandom.pas', |
DECTypes in 'DECTypes.pas', |
DECUtil in 'DECUtil.pas', |
DECUtilRawByteStringHelper in 'DECUtilRawByteStringHelper.pas', |
DECHashAuthentication in 'DECHashAuthentication.pas', |
DECHashBitBase in 'DECHashBitBase.pas', |
DECCipherModesGCM in 'DECCipherModesGCM.pas', |
DECZIPHelper in 'DECZIPHelper.pas'; |
begin |
try |
{ TODO -oUser -cConsole Main : Insert code here } |
except |
on E: Exception do |
WriteLn(E.ClassName, ': ', E.Message); |
end; |
end. |
/trunk/Decoder5/VCL_DEC/DEC60.dproj |
---|
0,0 → 1,1076 |
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
<PropertyGroup> |
<ProjectGuid>{34FB3EC0-D6C0-4F92-9FEE-3E0E87C91FC4}</ProjectGuid> |
<ProjectVersion>19.5</ProjectVersion> |
<FrameworkType>None</FrameworkType> |
<MainSource>DEC60.dpr</MainSource> |
<Base>True</Base> |
<Config Condition="'$(Config)'==''">Debug</Config> |
<Platform Condition="'$(Platform)'==''">Win32</Platform> |
<TargetedPlatforms>32787</TargetedPlatforms> |
<AppType>Console</AppType> |
</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)'=='Android64' and '$(Base)'=='true') or '$(Base_Android64)'!=''"> |
<Base_Android64>true</Base_Android64> |
<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="('$(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)'=='Android64' and '$(Cfg_1)'=='true') or '$(Cfg_1_Android64)'!=''"> |
<Cfg_1_Android64>true</Cfg_1_Android64> |
<CfgParent>Cfg_1</CfgParent> |
<Cfg_1>true</Cfg_1> |
<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)'!=''"> |
<SanitizedProjectName>DEC60</SanitizedProjectName> |
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)</DCC_Namespace> |
<DCC_DcuOutput>.\..\Compiled\DCU_IDE$(ProductVersion)_$(Platform)_$(Config)</DCC_DcuOutput> |
<DCC_ExeOutput>.\..\Compiled\BIN_IDE$(ProductVersion)_$(Platform)_$(Config)</DCC_ExeOutput> |
<DCC_HppOutput>.\..\Compiled\DCP_IDE$(ProductVersion)_$(Platform)_$(Config)</DCC_HppOutput> |
<DCC_ObjOutput>.\..\Compiled\DCU_IDE$(ProductVersion)_$(Platform)_$(Config)</DCC_ObjOutput> |
<DCC_BpiOutput>.\..\Compiled\DCP_IDE$(ProductVersion)_$(Platform)_$(Config)</DCC_BpiOutput> |
<DCC_UnitSearchPath>.\..\Compiled\DCU_IDE$(ProductVersion)_$(Platform)_$(Config);$(DCC_UnitSearchPath)</DCC_UnitSearchPath> |
<DCC_BplOutput>.\..\Compiled\BIN_IDE$(ProductVersion)_$(Platform)_$(Config)</DCC_BplOutput> |
<DCC_DcpOutput>.\..\Compiled\DCP_IDE$(ProductVersion)_$(Platform)_$(Config)</DCC_DcpOutput> |
</PropertyGroup> |
<PropertyGroup Condition="'$(Base_Android)'!=''"> |
<Android_SplashImage640>$(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png</Android_SplashImage640> |
<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> |
<Android_LauncherIcon72>$(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png</Android_LauncherIcon72> |
<Android_LauncherIcon96>$(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png</Android_LauncherIcon96> |
<Android_SplashImage470>$(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png</Android_SplashImage470> |
<Android_LauncherIcon144>$(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png</Android_LauncherIcon144> |
<DCC_UsePackage>DBXSqliteDriver;RESTComponents;DBXInterBaseDriver;emsclientfiredac;tethering;DataSnapFireDAC;bindcompfmx;FireDACIBDriver;fmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;DataSnapClient;LockBoxDR;inet;IndyIPCommon;bindcompdbx;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;LockBox3DR;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage)</DCC_UsePackage> |
<Android_SplashImage426>$(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png</Android_SplashImage426> |
<Android_SplashImage960>$(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png</Android_SplashImage960> |
<Android_LauncherIcon36>$(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png</Android_LauncherIcon36> |
<Android_LauncherIcon48>$(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png</Android_LauncherIcon48> |
<Android_NotificationIcon24>$(BDS)\bin\Artwork\Android\FM_NotificationIcon_24x24.png</Android_NotificationIcon24> |
<Android_NotificationIcon36>$(BDS)\bin\Artwork\Android\FM_NotificationIcon_36x36.png</Android_NotificationIcon36> |
<Android_NotificationIcon48>$(BDS)\bin\Artwork\Android\FM_NotificationIcon_48x48.png</Android_NotificationIcon48> |
<Android_NotificationIcon72>$(BDS)\bin\Artwork\Android\FM_NotificationIcon_72x72.png</Android_NotificationIcon72> |
<Android_NotificationIcon96>$(BDS)\bin\Artwork\Android\FM_NotificationIcon_96x96.png</Android_NotificationIcon96> |
<VerInfo_Keys>package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=</VerInfo_Keys> |
<BT_BuildType>Debug</BT_BuildType> |
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo> |
<Android_LauncherIcon192>$(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png</Android_LauncherIcon192> |
</PropertyGroup> |
<PropertyGroup Condition="'$(Base_Android64)'!=''"> |
<VerInfo_Keys>package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=</VerInfo_Keys> |
<BT_BuildType>Debug</BT_BuildType> |
<Base_Android>true</Base_Android> |
<CfgParent>Base</CfgParent> |
<Base>true</Base> |
<Android_SplashImage640>$(BDS)\bin\Artwork\Android\FM_SplashImage_640x480.png</Android_SplashImage640> |
<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> |
<Android_LauncherIcon72>$(BDS)\bin\Artwork\Android\FM_LauncherIcon_72x72.png</Android_LauncherIcon72> |
<Android_LauncherIcon96>$(BDS)\bin\Artwork\Android\FM_LauncherIcon_96x96.png</Android_LauncherIcon96> |
<Android_SplashImage470>$(BDS)\bin\Artwork\Android\FM_SplashImage_470x320.png</Android_SplashImage470> |
<Android_LauncherIcon144>$(BDS)\bin\Artwork\Android\FM_LauncherIcon_144x144.png</Android_LauncherIcon144> |
<DCC_UsePackage>DBXSqliteDriver;RESTComponents;DBXInterBaseDriver;emsclientfiredac;tethering;DataSnapFireDAC;bindcompfmx;FireDACIBDriver;fmx;FireDACDBXDriver;dbexpress;IndyCore;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;soapserver;bindengine;CloudService;FireDACCommonDriver;DataSnapClient;LockBoxDR;inet;IndyIPCommon;bindcompdbx;IndyIPServer;IndySystem;fmxFireDAC;FireDAC;FireDACSqliteDriver;soaprtl;DbxCommonDriver;xmlrtl;soapmidas;DataSnapNativeClient;FireDACDSDriver;rtl;DbxClientDriver;CustomIPTransport;bindcomp;LockBox3DR;IndyIPClient;dbxcds;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;$(DCC_UsePackage);$(DCC_UsePackage)</DCC_UsePackage> |
<Android_SplashImage426>$(BDS)\bin\Artwork\Android\FM_SplashImage_426x320.png</Android_SplashImage426> |
<Android_SplashImage960>$(BDS)\bin\Artwork\Android\FM_SplashImage_960x720.png</Android_SplashImage960> |
<Android_LauncherIcon36>$(BDS)\bin\Artwork\Android\FM_LauncherIcon_36x36.png</Android_LauncherIcon36> |
<Android_LauncherIcon48>$(BDS)\bin\Artwork\Android\FM_LauncherIcon_48x48.png</Android_LauncherIcon48> |
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo> |
<Android_LauncherIcon192>$(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png</Android_LauncherIcon192> |
</PropertyGroup> |
<PropertyGroup Condition="'$(Base_Win32)'!=''"> |
<DCC_ConsoleTarget>true</DCC_ConsoleTarget> |
<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> |
<DCC_UsePackage>DBXSqliteDriver;RESTComponents;fmxase;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;emsclientfiredac;tethering;svnui;DataSnapFireDAC;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;svn;DBXOracleDriver;inetdb;VirtualTreesDR;emsedge;FireDACIBDriver;fmx;fmxdae;FireDACDBXDriver;dbexpress;IndyCore;vclx;dsnap;emsclient;DataSnapCommon;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;bindengine;DBXMySQLDriver;CloudService;FireDACOracleDriver;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonODBC;FireDACCommonDriver;DataSnapClient;LockBoxDR;inet;IndyIPCommon;bindcompdbx;vcl;IndyIPServer;DBXSybaseASEDriver;IndySystem;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;FireDAC;emshosting;FireDACSqliteDriver;FireDACPgDriver;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;soaprtl;DbxCommonDriver;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;FireDACDSDriver;rtl;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;DCP_XE6;DBXInformixDriver;LockBox3DR;IndyIPClient;bindcompvcl;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;dsnapxml;DataSnapProviderClient;dbrtl;IndyProtocols;inetdbxpress;FireDACMongoDBDriver;DataSnapServerMidas;$(DCC_UsePackage)</DCC_UsePackage> |
<VerInfo_Keys>CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(ModuleName);FileDescription=$(ModuleName);ProductName=$(ModuleName)</VerInfo_Keys> |
</PropertyGroup> |
<PropertyGroup Condition="'$(Base_Win64)'!=''"> |
<DCC_Namespace>Winapi;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)'!=''"> |
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define> |
<DCC_Optimize>false</DCC_Optimize> |
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames> |
<DCC_DebugInfoInExe>true</DCC_DebugInfoInExe> |
<DCC_RemoteDebug>true</DCC_RemoteDebug> |
<DCC_MapFileARM>1</DCC_MapFileARM> |
<DCC_MapFile>3</DCC_MapFile> |
</PropertyGroup> |
<PropertyGroup Condition="'$(Cfg_1_Android64)'!=''"> |
<VerInfo_Build>1</VerInfo_Build> |
<Android_NotificationAccentColor>#000000</Android_NotificationAccentColor> |
</PropertyGroup> |
<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''"> |
<DCC_RemoteDebug>false</DCC_RemoteDebug> |
<VerInfo_Locale>1033</VerInfo_Locale> |
<VerInfo_Keys>CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)</VerInfo_Keys> |
<Manifest_File>(Ohne)</Manifest_File> |
<DCC_AdditionalSwitches>-JL</DCC_AdditionalSwitches> |
</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="DECBaseClass.pas"/> |
<DCCReference Include="DECCipherBase.pas"/> |
<DCCReference Include="DECCipherFormats.pas"/> |
<DCCReference Include="DECCipherModes.pas"/> |
<DCCReference Include="DECCipherInterface.pas"/> |
<DCCReference Include="DECCiphers.pas"/> |
<DCCReference Include="DECCRC.pas"/> |
<DCCReference Include="DECData.pas"/> |
<DCCReference Include="DECDataCipher.pas"/> |
<DCCReference Include="DECDataHash.pas"/> |
<DCCReference Include="DECFormat.pas"/> |
<DCCReference Include="DECFormatBase.pas"/> |
<DCCReference Include="DECHash.pas"/> |
<DCCReference Include="DECHashBase.pas"/> |
<DCCReference Include="DECHashInterface.pas"/> |
<DCCReference Include="DECRandom.pas"/> |
<DCCReference Include="DECTypes.pas"/> |
<DCCReference Include="DECUtil.pas"/> |
<DCCReference Include="DECUtilRawByteStringHelper.pas"/> |
<DCCReference Include="DECHashAuthentication.pas"/> |
<DCCReference Include="DECHashBitBase.pas"/> |
<DCCReference Include="DECCipherModesGCM.pas"/> |
<None Include="DECHash.asm86.inc"/> |
<None Include="DECOptions.inc"/> |
<None Include="BuildAll.cmd"/> |
<None Include="DECHash.sha3_mmx.inc"/> |
<None Include="DECHash.sha3_x64.inc"/> |
<None Include="DEC60.todo"/> |
<BuildConfiguration Include="Base"> |
<Key>Base</Key> |
</BuildConfiguration> |
<BuildConfiguration Include="Debug"> |
<Key>Cfg_1</Key> |
<CfgParent>Base</CfgParent> |
</BuildConfiguration> |
<BuildConfiguration Include="Release"> |
<Key>Cfg_2</Key> |
<CfgParent>Base</CfgParent> |
</BuildConfiguration> |
</ItemGroup> |
<ProjectExtensions> |
<Borland.Personality>Delphi.Personality.12</Borland.Personality> |
<Borland.ProjectType>Application</Borland.ProjectType> |
<BorlandProject> |
<Delphi.Personality> |
<Source> |
<Source Name="MainSource">DEC60.dpr</Source> |
</Source> |
<Excluded_Packages> |
<Excluded_Packages Name="$(BDSBIN)\bcboffice2k280.bpl">Embarcadero C++Builder-Package für Office 2000-Server</Excluded_Packages> |
<Excluded_Packages Name="$(BDSBIN)\bcbofficexp280.bpl">Embarcadero C++Builder-Package für Office XP-Server</Excluded_Packages> |
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k280.bpl">Microsoft Office 2000 Beispiele für gekapselte Komponenten für Automatisierungsserver</Excluded_Packages> |
<Excluded_Packages Name="$(BDSBIN)\dclofficexp280.bpl">Microsoft Office XP Beispiele für gekapselte Komponenten für Automation Server</Excluded_Packages> |
<Excluded_Packages Name="C:\Program Files (x86)\FastReports\LibD28\dclfrx28.bpl">FastReport VCL Components</Excluded_Packages> |
<Excluded_Packages Name="C:\Program Files (x86)\FastReports\LibD28\dclfrxDB28.bpl">FastReport VCL DB Components</Excluded_Packages> |
<Excluded_Packages Name="C:\Program Files (x86)\FastReports\LibD28\dclfrxe28.bpl">FastReport VCL Exports</Excluded_Packages> |
<Excluded_Packages Name="C:\Program Files (x86)\FastReports\LibD28\dclfrxtee28.bpl">FastReport VCL Tee Components</Excluded_Packages> |
</Excluded_Packages> |
</Delphi.Personality> |
<Deployment Version="4"> |
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libPCRE.dylib" Class="DependencyModule"/> |
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libcgunwind.1.0.dylib" Class="DependencyModule"> |
<Platform Name="iOSSimulator"> |
<Overwrite>true</Overwrite> |
</Platform> |
</DeployFile> |
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libpcre.dylib" Class="DependencyModule"> |
<Platform Name="iOSSimulator"> |
<Overwrite>true</Overwrite> |
</Platform> |
</DeployFile> |
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgsqlite3.dylib" Class="DependencyModule"/> |
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgunwind.1.0.dylib" Class="DependencyModule"> |
<Platform Name="OSX32"> |
<Overwrite>true</Overwrite> |
</Platform> |
</DeployFile> |
<DeployFile LocalName="$(BDS)\Redist\osx64\libcgsqlite3.dylib" Class="DependencyModule"/> |
<DeployFile LocalName="..\Compiled\BIN_IDE22.0_Win32_Debug\DEC60.exe" Configuration="Debug" Class="ProjectOutput"/> |
<DeployFile LocalName="BuildAll.cmd" Configuration="Debug" Class="ProjectFile"/> |
<DeployFile LocalName="DEC60.todo" Configuration="Debug" Class="ProjectFile"/> |
<DeployFile LocalName="DECHash.asm86.inc" Configuration="Debug" Class="ProjectFile"/> |
<DeployFile LocalName="DECHash.sha3_mmx.inc" Configuration="Debug" Class="ProjectFile"/> |
<DeployFile LocalName="DECHash.sha3_x64.inc" Configuration="Debug" Class="ProjectFile"/> |
<DeployFile LocalName="DECOptions.inc" Configuration="Debug" Class="ProjectFile"/> |
<DeployClass Name="AdditionalDebugSymbols"> |
<Platform Name="iOSSimulator"> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="OSX32"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<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="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="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_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="DebugSymbols"> |
<Platform Name="iOSSimulator"> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="OSX32"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="Win32"> |
<Operation>0</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="DependencyFramework"> |
<Platform Name="OSX32"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
<Extensions>.framework</Extensions> |
</Platform> |
<Platform Name="OSX64"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
<Extensions>.framework</Extensions> |
</Platform> |
<Platform Name="OSXARM64"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
<Extensions>.framework</Extensions> |
</Platform> |
<Platform Name="Win32"> |
<Operation>0</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="DependencyModule"> |
<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"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
<Extensions>.dylib</Extensions> |
</Platform> |
<Platform Name="OSX64"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
<Extensions>.dylib</Extensions> |
</Platform> |
<Platform Name="OSXARM64"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<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"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
<Extensions>.dylib</Extensions> |
</Platform> |
<Platform Name="OSX64"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
<Extensions>.dylib</Extensions> |
</Platform> |
<Platform Name="OSXARM64"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<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"> |
<RemoteDir>Contents\Resources\StartUp\</RemoteDir> |
<Operation>0</Operation> |
</Platform> |
<Platform Name="OSX64"> |
<RemoteDir>Contents\Resources\StartUp\</RemoteDir> |
<Operation>0</Operation> |
</Platform> |
<Platform Name="OSXARM64"> |
<RemoteDir>Contents\Resources\StartUp\</RemoteDir> |
<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"> |
<Platform Name="OSX64"> |
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="OSXARM64"> |
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="ProjectOSXEntitlements"> |
<Platform Name="OSX32"> |
<RemoteDir>..\</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="OSX64"> |
<RemoteDir>..\</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="OSXARM64"> |
<RemoteDir>..\</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="ProjectOSXInfoPList"> |
<Platform Name="OSX32"> |
<RemoteDir>Contents</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="OSX64"> |
<RemoteDir>Contents</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="OSXARM64"> |
<RemoteDir>Contents</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<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"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="OSX64"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="OSXARM64"> |
<RemoteDir>Contents\MacOS</RemoteDir> |
<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> |
</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"> |
<Platform Name="iOSDevice32"> |
<RemoteDir>..\</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSDevice64"> |
<RemoteDir>..\</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<RemoteDir>..\</RemoteDir> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="ProjectiOSInfoPList"> |
<Platform Name="iOSDevice32"> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSDevice64"> |
<Operation>1</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<Operation>1</Operation> |
</Platform> |
</DeployClass> |
<DeployClass Name="ProjectiOSLaunchScreen"> |
<Platform Name="iOSDevice64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen</RemoteDir> |
<Operation>64</Operation> |
</Platform> |
<Platform Name="iOSSimARM64"> |
<RemoteDir>..\$(PROJECTNAME).launchscreen</RemoteDir> |
<Operation>64</Operation> |
</Platform> |
</DeployClass> |
<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="iOSSimulator" Name="$(PROJECTNAME).app"/> |
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/> |
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME).app"/> |
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME).app"/> |
<ProjectRoot Platform="OSXARM64" Name="$(PROJECTNAME).app"/> |
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/> |
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/> |
</Deployment> |
<Platforms> |
<Platform value="Android">True</Platform> |
<Platform value="Android64">True</Platform> |
<Platform value="Win32">True</Platform> |
<Platform value="Win64">True</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')"/> |
<Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/> |
</Project> |
/trunk/Decoder5/VCL_DEC/DEC60.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 |
/trunk/Decoder5/VCL_DEC/DEC60.todo |
---|
0,0 → 1,0 |
/trunk/Decoder5/VCL_DEC/DEC60Complete.groupproj |
---|
0,0 → 1,204 |
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
<PropertyGroup> |
<ProjectGuid>{46A7B5B1-D413-4DB1-A118-2403457B463A}</ProjectGuid> |
</PropertyGroup> |
<ItemGroup> |
<Projects Include="DEC60.dproj"> |
<Dependencies/> |
</Projects> |
<Projects Include="..\Unit Tests\DECDUnitTestSuite.dproj"> |
<Dependencies/> |
</Projects> |
<Projects Include="..\Unit Tests\DECDUnitXTestSuite.dproj"> |
<Dependencies/> |
</Projects> |
<Projects Include="..\Demos\Cipher_Console\Cipher_Console.dproj"> |
<Dependencies/> |
</Projects> |
<Projects Include="..\Demos\Cipher_FMX\Cipher_FMX.dproj"> |
<Dependencies/> |
</Projects> |
<Projects Include="..\Demos\Format_Console\Format_Console.dproj"> |
<Dependencies/> |
</Projects> |
<Projects Include="..\Demos\Hash_Console\Hash_Console.dproj"> |
<Dependencies/> |
</Projects> |
<Projects Include="..\Demos\Hash_FMX\Hash_FMX.dproj"> |
<Dependencies/> |
</Projects> |
<Projects Include="..\Demos\Random_Console\Random_Console.dproj"> |
<Dependencies/> |
</Projects> |
<Projects Include="..\Demos\Progress_VCL\ProgressDemoVCL.dproj"> |
<Dependencies/> |
</Projects> |
<Projects Include="..\Demos\HashBenchmark_FMX\HashBenchmark.dproj"> |
<Dependencies/> |
</Projects> |
<Projects Include="..\Unit Tests\HashTestDataGenerator\GenerateData.dproj"> |
<Dependencies/> |
</Projects> |
<Projects Include="..\Demos\Cipher_Console_KDF\Cipher_Console_KDF.dproj"> |
<Dependencies/> |
</Projects> |
<Projects Include="..\Demos\Password_Console\Password_Console.dproj"> |
<Dependencies/> |
</Projects> |
<Projects Include="..\Demos\Random_VCL_Comparison\RandomComparison_VCL.dproj"> |
<Dependencies/> |
</Projects> |
</ItemGroup> |
<ProjectExtensions> |
<Borland.Personality>Default.Personality.12</Borland.Personality> |
<Borland.ProjectType/> |
<BorlandProject> |
<Default.Personality/> |
</BorlandProject> |
</ProjectExtensions> |
<Target Name="DEC60"> |
<MSBuild Projects="DEC60.dproj"/> |
</Target> |
<Target Name="DEC60:Clean"> |
<MSBuild Projects="DEC60.dproj" Targets="Clean"/> |
</Target> |
<Target Name="DEC60:Make"> |
<MSBuild Projects="DEC60.dproj" Targets="Make"/> |
</Target> |
<Target Name="DECDUnitTestSuite"> |
<MSBuild Projects="..\Unit Tests\DECDUnitTestSuite.dproj"/> |
</Target> |
<Target Name="DECDUnitTestSuite:Clean"> |
<MSBuild Projects="..\Unit Tests\DECDUnitTestSuite.dproj" Targets="Clean"/> |
</Target> |
<Target Name="DECDUnitTestSuite:Make"> |
<MSBuild Projects="..\Unit Tests\DECDUnitTestSuite.dproj" Targets="Make"/> |
</Target> |
<Target Name="DECDUnitXTestSuite"> |
<MSBuild Projects="..\Unit Tests\DECDUnitXTestSuite.dproj"/> |
</Target> |
<Target Name="DECDUnitXTestSuite:Clean"> |
<MSBuild Projects="..\Unit Tests\DECDUnitXTestSuite.dproj" Targets="Clean"/> |
</Target> |
<Target Name="DECDUnitXTestSuite:Make"> |
<MSBuild Projects="..\Unit Tests\DECDUnitXTestSuite.dproj" Targets="Make"/> |
</Target> |
<Target Name="Cipher_Console"> |
<MSBuild Projects="..\Demos\Cipher_Console\Cipher_Console.dproj"/> |
</Target> |
<Target Name="Cipher_Console:Clean"> |
<MSBuild Projects="..\Demos\Cipher_Console\Cipher_Console.dproj" Targets="Clean"/> |
</Target> |
<Target Name="Cipher_Console:Make"> |
<MSBuild Projects="..\Demos\Cipher_Console\Cipher_Console.dproj" Targets="Make"/> |
</Target> |
<Target Name="Cipher_FMX"> |
<MSBuild Projects="..\Demos\Cipher_FMX\Cipher_FMX.dproj"/> |
</Target> |
<Target Name="Cipher_FMX:Clean"> |
<MSBuild Projects="..\Demos\Cipher_FMX\Cipher_FMX.dproj" Targets="Clean"/> |
</Target> |
<Target Name="Cipher_FMX:Make"> |
<MSBuild Projects="..\Demos\Cipher_FMX\Cipher_FMX.dproj" Targets="Make"/> |
</Target> |
<Target Name="Format_Console"> |
<MSBuild Projects="..\Demos\Format_Console\Format_Console.dproj"/> |
</Target> |
<Target Name="Format_Console:Clean"> |
<MSBuild Projects="..\Demos\Format_Console\Format_Console.dproj" Targets="Clean"/> |
</Target> |
<Target Name="Format_Console:Make"> |
<MSBuild Projects="..\Demos\Format_Console\Format_Console.dproj" Targets="Make"/> |
</Target> |
<Target Name="Hash_Console"> |
<MSBuild Projects="..\Demos\Hash_Console\Hash_Console.dproj"/> |
</Target> |
<Target Name="Hash_Console:Clean"> |
<MSBuild Projects="..\Demos\Hash_Console\Hash_Console.dproj" Targets="Clean"/> |
</Target> |
<Target Name="Hash_Console:Make"> |
<MSBuild Projects="..\Demos\Hash_Console\Hash_Console.dproj" Targets="Make"/> |
</Target> |
<Target Name="Hash_FMX"> |
<MSBuild Projects="..\Demos\Hash_FMX\Hash_FMX.dproj"/> |
</Target> |
<Target Name="Hash_FMX:Clean"> |
<MSBuild Projects="..\Demos\Hash_FMX\Hash_FMX.dproj" Targets="Clean"/> |
</Target> |
<Target Name="Hash_FMX:Make"> |
<MSBuild Projects="..\Demos\Hash_FMX\Hash_FMX.dproj" Targets="Make"/> |
</Target> |
<Target Name="Random_Console"> |
<MSBuild Projects="..\Demos\Random_Console\Random_Console.dproj"/> |
</Target> |
<Target Name="Random_Console:Clean"> |
<MSBuild Projects="..\Demos\Random_Console\Random_Console.dproj" Targets="Clean"/> |
</Target> |
<Target Name="Random_Console:Make"> |
<MSBuild Projects="..\Demos\Random_Console\Random_Console.dproj" Targets="Make"/> |
</Target> |
<Target Name="ProgressDemoVCL"> |
<MSBuild Projects="..\Demos\Progress_VCL\ProgressDemoVCL.dproj"/> |
</Target> |
<Target Name="ProgressDemoVCL:Clean"> |
<MSBuild Projects="..\Demos\Progress_VCL\ProgressDemoVCL.dproj" Targets="Clean"/> |
</Target> |
<Target Name="ProgressDemoVCL:Make"> |
<MSBuild Projects="..\Demos\Progress_VCL\ProgressDemoVCL.dproj" Targets="Make"/> |
</Target> |
<Target Name="HashBenchmark"> |
<MSBuild Projects="..\Demos\HashBenchmark_FMX\HashBenchmark.dproj"/> |
</Target> |
<Target Name="HashBenchmark:Clean"> |
<MSBuild Projects="..\Demos\HashBenchmark_FMX\HashBenchmark.dproj" Targets="Clean"/> |
</Target> |
<Target Name="HashBenchmark:Make"> |
<MSBuild Projects="..\Demos\HashBenchmark_FMX\HashBenchmark.dproj" Targets="Make"/> |
</Target> |
<Target Name="GenerateData"> |
<MSBuild Projects="..\Unit Tests\HashTestDataGenerator\GenerateData.dproj"/> |
</Target> |
<Target Name="GenerateData:Clean"> |
<MSBuild Projects="..\Unit Tests\HashTestDataGenerator\GenerateData.dproj" Targets="Clean"/> |
</Target> |
<Target Name="GenerateData:Make"> |
<MSBuild Projects="..\Unit Tests\HashTestDataGenerator\GenerateData.dproj" Targets="Make"/> |
</Target> |
<Target Name="Cipher_Console_KDF"> |
<MSBuild Projects="..\Demos\Cipher_Console_KDF\Cipher_Console_KDF.dproj"/> |
</Target> |
<Target Name="Cipher_Console_KDF:Clean"> |
<MSBuild Projects="..\Demos\Cipher_Console_KDF\Cipher_Console_KDF.dproj" Targets="Clean"/> |
</Target> |
<Target Name="Cipher_Console_KDF:Make"> |
<MSBuild Projects="..\Demos\Cipher_Console_KDF\Cipher_Console_KDF.dproj" Targets="Make"/> |
</Target> |
<Target Name="Password_Console"> |
<MSBuild Projects="..\Demos\Password_Console\Password_Console.dproj"/> |
</Target> |
<Target Name="Password_Console:Clean"> |
<MSBuild Projects="..\Demos\Password_Console\Password_Console.dproj" Targets="Clean"/> |
</Target> |
<Target Name="Password_Console:Make"> |
<MSBuild Projects="..\Demos\Password_Console\Password_Console.dproj" Targets="Make"/> |
</Target> |
<Target Name="RandomComparison_VCL"> |
<MSBuild Projects="..\Demos\Random_VCL_Comparison\RandomComparison_VCL.dproj"/> |
</Target> |
<Target Name="RandomComparison_VCL:Clean"> |
<MSBuild Projects="..\Demos\Random_VCL_Comparison\RandomComparison_VCL.dproj" Targets="Clean"/> |
</Target> |
<Target Name="RandomComparison_VCL:Make"> |
<MSBuild Projects="..\Demos\Random_VCL_Comparison\RandomComparison_VCL.dproj" Targets="Make"/> |
</Target> |
<Target Name="Build"> |
<CallTarget Targets="DEC60;DECDUnitTestSuite;DECDUnitXTestSuite;Cipher_Console;Cipher_FMX;Format_Console;Hash_Console;Hash_FMX;Random_Console;ProgressDemoVCL;HashBenchmark;GenerateData;Cipher_Console_KDF;Password_Console;RandomComparison_VCL"/> |
</Target> |
<Target Name="Clean"> |
<CallTarget Targets="DEC60:Clean;DECDUnitTestSuite:Clean;DECDUnitXTestSuite:Clean;Cipher_Console:Clean;Cipher_FMX:Clean;Format_Console:Clean;Hash_Console:Clean;Hash_FMX:Clean;Random_Console:Clean;ProgressDemoVCL:Clean;HashBenchmark:Clean;GenerateData:Clean;Cipher_Console_KDF:Clean;Password_Console:Clean;RandomComparison_VCL:Clean"/> |
</Target> |
<Target Name="Make"> |
<CallTarget Targets="DEC60:Make;DECDUnitTestSuite:Make;DECDUnitXTestSuite:Make;Cipher_Console:Make;Cipher_FMX:Make;Format_Console:Make;Hash_Console:Make;Hash_FMX:Make;Random_Console:Make;ProgressDemoVCL:Make;HashBenchmark:Make;GenerateData:Make;Cipher_Console_KDF:Make;Password_Console:Make;RandomComparison_VCL:Make"/> |
</Target> |
<Import Project="$(BDS)\Bin\CodeGear.Group.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Group.Targets')"/> |
</Project> |
/trunk/Decoder5/VCL_DEC/DEC60Complete_prjgroup.tvsconfig |
---|
0,0 → 1,2 |
<?xml version="1.0"?> |
<TgConfig Version="3" SubLevelDisabled="False" /> |
/trunk/Decoder5/VCL_DEC/DEC60Lazarus.lpk |
---|
0,0 → 1,120 |
<?xml version="1.0" encoding="UTF-8"?> |
<CONFIG> |
<Package Version="4"> |
<PathDelim Value="\"/> |
<Name Value="DEC60Lazarus"/> |
<Author Value="geheimniswelten"/> |
<AutoUpdate Value="Manually"/> |
<CompilerOptions> |
<Version Value="11"/> |
<PathDelim Value="\"/> |
<SearchPaths> |
<UnitOutputDirectory Value="$(PkgDir)\..\Compiled\DCU_Lazarus_$(TargetCPU)_$(TargetOS)_$(BuildMode)\"/> |
</SearchPaths> |
<Parsing> |
<SyntaxOptions> |
<SyntaxMode Value="DelphiUnicode"/> |
</SyntaxOptions> |
</Parsing> |
</CompilerOptions> |
<Description Value="Delphi Encryption Compendium (DEC)"/> |
<License Value="AFL 2.0"/> |
<Version Major="6"/> |
<Files Count="21"> |
<Item1> |
<Filename Value="DECBaseClass.pas"/> |
<UnitName Value="DECBaseClass"/> |
</Item1> |
<Item2> |
<Filename Value="DECCipherBase.pas"/> |
<UnitName Value="DECCipherBase"/> |
</Item2> |
<Item3> |
<Filename Value="DECCipherFormats.pas"/> |
<UnitName Value="DECCipherFormats"/> |
</Item3> |
<Item4> |
<Filename Value="DECCipherInterface.pas"/> |
<UnitName Value="DECCipherInterface"/> |
</Item4> |
<Item5> |
<Filename Value="DECCipherModes.pas"/> |
<UnitName Value="DECCipherModes"/> |
</Item5> |
<Item6> |
<Filename Value="DECCiphers.pas"/> |
<UnitName Value="DECCiphers"/> |
</Item6> |
<Item7> |
<Filename Value="DECCRC.pas"/> |
<UnitName Value="DECCRC"/> |
</Item7> |
<Item8> |
<Filename Value="DECData.pas"/> |
<UnitName Value="DECData"/> |
</Item8> |
<Item9> |
<Filename Value="DECDataCipher.pas"/> |
<UnitName Value="DECDataCipher"/> |
</Item9> |
<Item10> |
<Filename Value="DECDataHash.pas"/> |
<UnitName Value="DECDataHash"/> |
</Item10> |
<Item11> |
<Filename Value="DECFormat.pas"/> |
<UnitName Value="DECFormat"/> |
</Item11> |
<Item12> |
<Filename Value="DECFormatBase.pas"/> |
<UnitName Value="DECFormatBase"/> |
</Item12> |
<Item13> |
<Filename Value="DECHash.pas"/> |
<UnitName Value="DECHash"/> |
</Item13> |
<Item14> |
<Filename Value="DECHashBase.pas"/> |
<UnitName Value="DECHashBase"/> |
</Item14> |
<Item15> |
<Filename Value="DECHashInterface.pas"/> |
<UnitName Value="DECHashInterface"/> |
</Item15> |
<Item16> |
<Filename Value="DECRandom.pas"/> |
<UnitName Value="DECRandom"/> |
</Item16> |
<Item17> |
<Filename Value="DECTypes.pas"/> |
<UnitName Value="DECTypes"/> |
</Item17> |
<Item18> |
<Filename Value="DECUtil.pas"/> |
<UnitName Value="DECUtil"/> |
</Item18> |
<Item19> |
<Filename Value="DECUtilRawByteStringHelper.pas"/> |
<UnitName Value="DECUtilRawByteStringHelper"/> |
</Item19> |
<Item20> |
<Filename Value="DECHash.asm86.inc"/> |
<Type Value="Include"/> |
</Item20> |
<Item21> |
<Filename Value="DECOptions.inc"/> |
<Type Value="Include"/> |
</Item21> |
</Files> |
<RequiredPkgs Count="1"> |
<Item1> |
<PackageName Value="FCL"/> |
</Item1> |
</RequiredPkgs> |
<PublishOptions> |
<Version Value="2"/> |
<OpenInFileMan Value="True"/> |
<UseFileFilters Value="True"/> |
</PublishOptions> |
</Package> |
</CONFIG> |
/trunk/Decoder5/VCL_DEC/DEC60Lazarus.pas |
---|
0,0 → 1,18 |
{ This file was automatically created by Lazarus. Do not edit! |
This source is only used to compile and install the package. |
} |
unit DEC60Lazarus; |
{$warn 5023 off : no warning about unused units} |
interface |
uses |
DECBaseClass, DECCipherBase, DECCipherFormats, DECCipherInterface, |
DECCipherModes, DECCiphers, DECCRC, DECData, DECDataCipher, DECDataHash, |
DECFormat, DECFormatBase, DECHash, DECHashBase, DECHashInterface, DECRandom, |
DECTypes, DECUtil, DECUtilRawByteStringHelper; |
implementation |
end. |
/trunk/Decoder5/VCL_DEC/DEC60_project.tvsconfig |
---|
0,0 → 1,2 |
<?xml version="1.0"?> |
<TgConfig Version="3" SubLevelDisabled="False" /> |
/trunk/Decoder5/VCL_DEC/DECBaseClass.pas |
---|
0,0 → 1,387 |
{***************************************************************************** |
The DEC team (see file NOTICE.txt) licenses this file |
to you under the Apache License, Version 2.0 (the |
"License"); you may not use this file except in compliance |
with the License. A copy of this licence is found in the root directory |
of this project in the file LICENCE.txt or alternatively 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. |
*****************************************************************************} |
unit DECBaseClass; |
{$INCLUDE DECOptions.inc} |
interface |
uses |
{$IFDEF FPC} |
SysUtils, Classes, |
{$ELSE} |
System.SysUtils, System.Classes, |
{$ENDIF} |
Generics.Collections; |
type |
/// <summary> |
/// Class type for the base class from which all other DEC classes inherit |
/// in order to be able to create lists of classes, pick an entry of such a |
/// list and construct an object out of it |
/// </summary> |
TDECClass = class of TDECObject; |
/// <summary> |
/// Type of a single entry in the class list. |
/// </summary> |
TClassListEntry = TPair<Int64, TDECClass>; |
/// <summary> |
/// Generic list of DEC classes with the identity as key |
/// </summary> |
TDECClassList = class(TDictionary<Int64, TDECClass>) |
strict private |
/// <summary> |
/// Checks if a given class type has the same short class name as given |
/// </summary> |
/// <param name="Name"> |
/// Short class name, e.g. HEXL |
/// </param> |
/// <param name="ClassType"> |
/// Class reference to check against |
/// </param> |
/// <returns> |
/// true if the class reference is for the given short name |
/// </returns> |
function DoFindNameShort(const Name: string; const ClassType: TDECClass): Boolean; |
/// <summary> |
/// Checks if a given class type has the same long class name as given |
/// </summary> |
/// <param name="Name"> |
/// Long class name, e.g. TFormat_HEXL |
/// </param> |
/// <param name="ClassType"> |
/// Class reference to check against |
/// </param> |
/// <returns> |
/// true if the class reference is for the given long name |
/// </returns> |
function DoFindNameLong(const Name: string; const ClassType: TClass): Boolean; |
public |
/// <summary> |
/// Tries to find a class type by its name |
/// </summary> |
/// <param name="Name"> |
/// Name to look for in the list |
/// </param> |
/// <returns> |
/// Returns the class type if found. if it could not be found a |
/// EDECClassNotRegisteredException will be thrown |
/// </returns> |
/// <exception cref="EDECClassNotRegisteredException"> |
/// Exception raised if the class specified by <c>Name</c> is not found |
/// </exception> |
function ClassByName(const Name: string): TDECClass; |
/// <summary> |
/// Tries to find a class type by its numeric identity DEC assigned to it. |
/// Useful for file headers, so they can easily encode numerically which |
/// cipher class was being used. |
/// </summary> |
/// <param name="Identity"> |
/// Identity to look for |
/// </param> |
/// <returns> |
/// Returns the class type of the class with the specified identity value |
/// or throws an EDECClassNotRegisteredException exception if no class |
/// with the given identity has been found |
/// </returns> |
/// <exception cref="EDECClassNotRegisteredException"> |
/// Exception raised if the class specified by <c>Identity</c> is not found |
/// </exception> |
function ClassByIdentity(Identity: Int64): TDECClass; |
/// <summary> |
/// Returns a list of all classes registered in this list |
/// </summary> |
/// <param name="List"> |
/// List where the registered classes shall be added to. The string is the |
/// long class name, the object the class reference. The list is being |
/// cleared first and when an uncreated list is given nothing is being done |
/// </param> |
procedure GetClassList(List: TStrings); |
end; |
/// <summary> |
/// Parent class of all cryptography and hash implementations |
/// </summary> |
TDECObject = class(TInterfacedObject) |
public |
/// <summary> |
/// Overrideable but otherwise empty constructor (calls his parent |
/// constructor or course) |
/// </summary> |
constructor Create; virtual; |
/// <summary> |
/// This function creates a unique Signature for each class using the |
/// following naming scheme: |
/// |
/// 'Z' repeated n times (to fill space of 256 chars) + DEC ClassName |
/// |
/// The CRC32 of the generated Signature is used as our unique Identity |
/// |
/// Important Note: |
/// DEC 5.2 introduced a bug which breaks backward compatibility with |
/// DEC 5.1 by using String instead of AnsiString. This leads to different |
/// Identities when using Unicode capable Delphi Versions (Delphi 2009+). |
/// |
/// To restore the *wrong* behavior of DEC 5.2 enable the DEC52_IDENTITY option |
/// in the configuration file DECOptions.inc. |
/// |
/// With this and all future versions we will keep backward compatibility. |
/// </summary> |
class function Identity: Int64; |
{$IFDEF X86ASM} |
/// <summary> |
/// Override FreeInstance to fill allocated Object with zeros, that is |
/// safer for any access to invalid Pointers of released Objects. |
/// </summary> |
procedure FreeInstance; override; |
{$ENDIF X86ASM} |
/// <summary> |
/// Registers this class type in the list of DEC classes (ClassList). |
/// Trying to register an already registered class will raise an exception. |
/// </summary> |
/// <param name="ClassList"> |
/// List to which the own class type shall be added. This allows subclasses |
/// to have their own lists |
/// </param> |
class procedure RegisterClass(ClassList : TDECClassList); |
/// <summary> |
/// Removes tthis class type from the list of registered DEC classes |
/// (ClassList). Trying to unregister a non registered class is a do nothing |
/// operation. |
/// </summary> |
/// <param name="ClassList"> |
/// List from which the own class type shall be removed. This allows |
/// subclasses to have their own lists |
/// </param> |
class procedure UnregisterClass(ClassList : TDECClassList); |
/// <summary> |
/// Returns short Classname of any DEC derrived class. This is the part |
/// of the class name after the _ so for THash_RipeMD160 it will be RipeMD160. |
/// </summary> |
/// <param name="ClassName"> |
/// Complete class name |
/// </param> |
/// <returns> |
/// Short class name |
/// </returns> |
class function GetShortClassNameFromName(const ClassName: string): string; |
/// <summary> |
/// Returns short Classname of any DEC derrived class type. This is the part |
/// of the class name after the _ so for THash_RipeMD160 it will be RipeMD160. |
/// </summary> |
/// <returns> |
/// Short class name or empty string if ClassType is nil. |
/// </returns> |
class function GetShortClassName: string; |
end; |
var |
/// <summary> |
/// default used for generating class identities |
/// </summary> |
IdentityBase: Int64 = $25844852; |
/// <summary> |
/// Size in bytes used for buffering data read from or written to a stream |
/// </summary> |
StreamBufferSize: Integer = 8192; |
{$IFDEF NEXTGEN} |
EmptyStr: string = ''; |
/// <summary> |
/// Pointer to an empty string. For non Nextgen platforms declared in SysUtils |
/// for backwards compatibility only. Here declared for NextGen only and |
/// should get replaced |
/// </summary> |
NullStr: PString = @EmptyStr; |
{$ENDIF} |
implementation |
uses |
DECTypes, DECCRC; |
resourcestring |
sClassNotRegistered = 'Class %s is not registered'; |
sWrongIdentity = 'Another class "%s" with the same identity as "%s" has already been registered'; |
constructor TDECObject.Create; |
begin |
inherited Create; |
end; |
class function TDECObject.Identity: Int64; |
var |
Signature: {$IFDEF DEC52_IDENTITY}string{$ELSE !DEC52_IDENTITY}RawByteString{$ENDIF !DEC52_IDENTITY}; |
begin |
{$IFDEF DEC52_IDENTITY} |
Signature := StringOfChar(#$5A, 256 - Length(ClassName)) + UpperCase(ClassName); |
{$IFdef HAVE_STR_LIKE_ARRAY} |
Result := CRC32(IdentityBase, Signature[Low(Signature)], |
Length(Signature) * SizeOf(Signature[Low(Signature)])); |
{$ELSE} |
Result := CRC32(IdentityBase, Signature[Low(Signature)], |
Length(Signature) * SizeOf(Signature[1])); |
{$ENDIF} |
{$ELSE !DEC52_IDENTITY} |
Signature := RawByteString(StringOfChar(#$5A, 256 - Length(ClassName)) + UpperCase(ClassName)); |
{$IFDEF HAVE_STR_LIKE_ARRAY} |
Result := CRC32(IdentityBase, Signature[Low(Signature)], |
Length(Signature) * SizeOf(Signature[Low(Signature)])); |
{$ELSE} |
Result := CRC32(IdentityBase, Signature[1], |
Length(Signature) * SizeOf(Signature[1])); |
{$ENDIF} |
{$ENDIF !DEC52_IDENTITY} |
end; |
class procedure TDECObject.RegisterClass(ClassList : TDECClassList); |
begin |
ClassList.Add(Identity, self); |
end; |
{$IFDEF X86ASM} |
procedure TDECObject.FreeInstance; |
// Override FreeInstance to fill allocated Object with zeros, that is |
// safer for any access to invalid Pointers of released Objects |
asm |
PUSH EBX |
PUSH EDI |
MOV EBX,EAX |
CALL TObject.CleanupInstance |
MOV EAX,[EBX] |
CALL TObject.InstanceSize |
MOV ECX,EAX |
MOV EDI,EBX |
XOR EAX,EAX |
REP STOSB |
MOV EAX,EBX |
CALL System.@FreeMem |
POP EDI |
POP EBX |
end; |
{$ENDIF X86ASM} |
class procedure TDECObject.UnregisterClass(ClassList : TDECClassList); |
begin |
ClassList.Remove(Identity); |
end; |
class function TDECObject.GetShortClassName: string; |
begin |
Result := GetShortClassNameFromName(self.ClassName); |
end; |
class function TDECObject.GetShortClassNameFromName(const ClassName: string): string; |
var |
i: Integer; |
begin |
Result := ClassName; |
i := Pos('_', Result); |
if i > 0 then |
Delete(Result, 1, i); |
end; |
{ TDECClassList } |
function TDECClassList.DoFindNameShort(const Name: string; const ClassType: TDECClass): Boolean; |
begin |
Result := CompareText(ClassType.GetShortClassName, Name) = 0; |
end; |
function TDECClassList.DoFindNameLong(const Name: string; const ClassType: TClass): Boolean; |
var |
s: string; |
begin |
s := Name; |
Result := CompareText(ClassType.ClassName, Name) = 0; |
end; |
function TDECClassList.ClassByIdentity(Identity: Int64): TDECClass; |
begin |
try |
Result := Items[Identity]; |
except |
On EListError do |
raise EDECClassNotRegisteredException.CreateResFmt(@sClassNotRegistered, |
[IntToHEX(Identity, 8)]); |
end; |
end; |
function TDECClassList.ClassByName(const Name: string): TDECClass; |
var |
FindNameShort : Boolean; |
Pair : TPair<Int64, TDECCLass>; |
begin |
Result := nil; |
if Length(Name) > 0 then |
begin |
FindNameShort := TDECClass.GetShortClassNameFromName(Name) = Name; |
for Pair in self do |
begin |
if FindNameShort then |
begin |
if DoFindNameShort(Name, Pair.Value) then |
begin |
result := Pair.Value; |
break; |
end; |
end |
else |
if DoFindNameLong(Name, Pair.Value) then |
begin |
result := Pair.Value; |
break; |
end; |
end; |
end; |
if Result = nil then |
raise EDECClassNotRegisteredException.CreateResFmt(@sClassNotRegistered, [Name]); |
end; |
procedure TDECClassList.GetClassList(List: TStrings); |
var |
Pair : TPair<Int64, TDECCLass>; |
begin |
if List <> nil then |
try |
List.BeginUpdate; |
List.Clear; |
for Pair in self do |
List.AddObject(Pair.Value.ClassName, TObject(Pair.Value)); |
finally |
List.EndUpdate; |
end; |
end; |
initialization |
finalization |
end. |
/trunk/Decoder5/VCL_DEC/DECCRC.pas |
---|
0,0 → 1,908 |
{***************************************************************************** |
The DEC team (see file NOTICE.txt) licenses this file |
to you under the Apache License, Version 2.0 (the |
"License"); you may not use this file except in compliance |
with the License. A copy of this licence is found in the root directory |
of this project in the file LICENCE.txt or alternatively 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. |
*****************************************************************************} |
{ |
Implementation of threadsafe CRC checksum functions. |
The following standard CRCs are supported: |
CRC-8, CRC-10, CRC-12 (Mobil Telephone), |
CRC-16, CRC-16-CCITT, CRC-16-ZModem, |
CRC-24 (PGP's MIME64 Armor CRC), |
CRC-32, CRC-32-CCITT and CRC-32-ZModem. |
How to use: |
var |
CRC16: UInt16; |
begin |
CRC16 := CRCCalc(CRC_16, Data, SizeOf(Data)); // all in one |
end; |
or |
var |
CRC: TCRCDef; |
CRC32: UInt32; |
begin |
CRCInit(CRC, CRC_32); // setup CRC data structure |
CRCCode(CRC, Data, SizeOf(Data)); // calcs CRC for "Data" |
CRCCode(CRC, PChar(string)^, Length(string) * SizeOf(string[1])); // calcs CRC for String |
CRC32 := CRCDone(CRC); // returns correct combined CRC for Data and String |
// after CRCDone we can start a new calculation |
end; |
} |
unit DECCRC; |
{$INCLUDE DECOptions.inc} |
interface |
type |
/// <summary> |
/// CRC Definition Structure |
/// </summary> |
PCRCDef = ^TCRCDef; |
/// <summary> |
/// Record with meta data about a single CRC algorithm/polynom |
/// Do *not* reorder or change this structure |
/// <para> |
/// SizeOf(TCRCDef) = 1056 = 0420h |
/// </para> |
/// </summary> |
TCRCDef = packed record |
/// <summary> |
/// Lookup Table, precomputed in CRCSetup |
/// </summary> |
Table : array[0..255] of UInt32; |
/// <summary> |
/// Intermediate CRC |
/// </summary> |
CRC : UInt32; |
/// <summary> |
/// Is this Polynomial an inverse function? |
/// </summary> |
Inverse : LongBool; |
/// <summary> |
/// Shift Value for CRCCode (for more speed) |
/// </summary> |
Shift : UInt32; |
/// <summary> |
/// Start Value of CRC cComputation |
/// </summary> |
InitVector : UInt32; |
/// <summary> |
/// Final XOR Vector of computed CRC |
/// </summary> |
FinalVector : UInt32; |
/// <summary> |
/// Precomputed AND Mask of computed CRC |
/// </summary> |
Mask : UInt32; |
/// <summary> |
/// Bitsize of CRC |
/// </summary> |
Bits : UInt32; |
/// <summary> |
/// Used Polynomial |
/// </summary> |
Polynomial : UInt32; |
end; |
/// <summary> |
/// predefined standard CRC Types |
/// </summary> |
TCRCType = ( |
CRC_8, |
CRC_10, |
CRC_12, |
CRC_16, |
CRC_16CCITT, |
CRC_16XModem, |
CRC_24, |
CRC_32, |
CRC_32CCITT, |
CRC_32ZModem, |
CRC_8ATMHEC, |
CRC_8SMBus, |
CRC_15CAN, |
CRC_16ZMODEM |
); |
type |
/// <summary> |
/// Callback method used by some CRC calculation routines to fetch the data |
/// to be processed |
/// </summary> |
/// <param name="Buffer"> |
/// Buffer containing the data to be processed |
/// </param> |
/// <param name="Count"> |
/// Number of bytes of the buffer to be processed |
/// </param> |
/// <returns> |
/// |
/// </returns> |
TReadMethod = function(var Buffer; Count: Int64): Int64 of object; |
// initialize CRC Definition with a custom Algorithm |
/// <summary> |
/// Fills the individual fields of a CRC meta data structure |
/// </summary> |
/// <param name="CRCDef"> |
/// Structure whose fields shall be filled |
/// </param> |
/// <param name="Polynomial"> |
/// CRC polynome, defining the algorithm |
/// </param> |
/// <param name="Bits"> |
/// Size of the CRC value to be computed in bits. Needs to be at least 8 |
/// </param> |
/// <param name="InitVector"> |
/// Initial value for the vector going into each calculation cycle |
/// </param> |
/// <param name="FinalVector"> |
/// Final XOR Vector of computed CRC |
/// </param> |
/// <param name="Inverse"> |
/// true if this Polynomial is an inverse function |
/// </param> |
/// <returns> |
/// true on success, false when a number smaller 8 is being passed as Bits parameter |
/// </returns> |
function CRCSetup(var CRCDef: TCRCDef; |
Polynomial, Bits, InitVector, FinalVector: UInt32; |
Inverse: LongBool): Boolean; |
/// <summary> |
/// Retrieves the necessary meta data and precomputed tables for a given CRC |
/// algorithm. |
/// </summary> |
/// <param name="CRCDef"> |
/// Record in which the to be retrieved meta data will be returned |
/// </param> |
/// <param name="CRCType"> |
/// Specifies the exact CRC type which shall be initialized |
/// </param> |
/// <returns> |
/// true on success |
/// </returns> |
function CRCInit(var CRCDef: TCRCDef; CRCType: TCRCType): Boolean; |
/// <summary> |
/// Calculate the CRC of the contents of the passed in buffer. |
/// </summary> |
/// <param name="CRCDef"> |
/// Structure with the necessary metadata for the CRC algorithm to be used. |
/// CRC processing state is being updated during calculation to enable this |
/// structure to be fed in another call to CRCCode if a CRC over multiple |
/// buffers has to be calculated. |
/// </param> |
/// <param name="Buffer"> |
/// Buffer with the data the CRC shall be calculated from |
/// </param> |
/// <param name="Size"> |
/// Number of bytes to calculate the CRC from, starting at the beginning of |
/// the buffer |
/// </param> |
/// <returns> |
/// Calculated CRC value, including any necessary correction (like CRCDone). |
/// CRCDef.CRC holds the actual computed CRC, additional calls of CRCCode |
/// compute the total CRC of split buffers |
/// </returns> |
function CRCCode(var CRCDef: TCRCDef; const Buffer; Size: UInt32): UInt32; overload; |
/// <summary> |
/// Calculate the CRC of the contents provided by a given callback |
/// </summary> |
/// <param name="CRCDef"> |
/// Structure with the necessary metadata for the CRC algorithm to be used. |
/// CRC processing state is being updated during calculation to enable this |
/// structure to be fed in another call to CRCCode if a CRC over multiple |
/// buffers has to be calculated. |
/// </param> |
/// <param name="ReadMethod"> |
/// Callback which is being called to get the data the CRC is processed over, |
/// e.g. TStream.Read |
/// </param> |
/// <param name="Size"> |
/// Number of bytes over which the CRC will be calculated. The callback will |
/// be called until that number of bytes have been processed. |
/// </param> |
/// <returns> |
/// Calculated CRC value, including any necessary correction (like CRCDone). |
/// CRCDef.CRC holds the actual computed CRC, additional calls of CRCCode |
/// compute the total CRC of split buffers |
/// </returns> |
function CRCCode(var CRCDef: TCRCDef; |
ReadMethod: TReadMethod; |
Size: UInt32 = $FFFFFFFF): UInt32; overload; |
{ TODO : |
DUnitTests für die Callback-Methoden Varianten von CRCCode und CRCCalc |
schreiben } |
// |
// CRCInit(CRC, CRC_32); // setup CRC data structure |
// CRCCode(CRC, Data, SizeOf(Data)); // calcs CRC for "Data" |
// CRCCode(CRC, PChar(string)^, Length(string) * SizeOf(string[1])); // calcs CRC for String |
// CRC32 := CRCDone(CRC); |
// returns corrected CRC as definied in CRCDef and resets CRCDef.CRC to InitVector |
/// <summary> |
/// Corrects the CRC via the final vector and resets the internal intermediate |
/// CRC value to the init vector so the next CRC calculation can start. |
/// </summary> |
/// <param name="CRCDef"> |
/// Structure with the current CRC state |
/// </param> |
/// <returns> |
/// Final CRC value |
/// </returns> |
function CRCDone(var CRCDef: TCRCDef): UInt32; |
/// <summary> |
/// Calculates a CRC over some Buffer with Size Bytes length. Processing is |
/// being done in one single step |
/// </summary> |
/// <param name="CRCType"> |
/// Specifies the CRC algorithm to be used |
/// </param> |
/// <param name="Buffer"> |
/// Buffer with the data to calculate the CRC from |
/// </param> |
/// <param name="Size"> |
/// Number of bytes over which the CRC will be calculated from the beginning |
/// of the buffer |
/// </param> |
function CRCCalc(CRCType: TCRCType; const Buffer; Size: UInt32): UInt32; overload; |
/// <summary> |
/// Calculates a CRC. Data is passed via callback, which is called repeatedly |
/// if necessary |
/// </summary> |
/// <param name="CRCType"> |
/// Specifies the CRC algorithm to be used |
/// </param> |
/// <param name="ReadMethod"> |
/// Callback which is being called to get the data the CRC is processed over |
/// e.g. TStream.Read |
/// </param> |
/// <param name="Size"> |
/// Number of bytes over which the CRC will be calculated. The callback will |
/// be called until that number of bytes have been processed. |
/// </param> |
/// <returns> |
/// Calculated CRC value. |
/// </returns> |
function CRCCalc(CRCType : TCRCType; |
ReadMethod : TReadMethod; |
Size : UInt32 = $FFFFFFFF): UInt32; overload; |
/// <summary> |
/// Calculates a CRC according a predefined CRC16-Standard over some Buffer |
/// with Size Bytes length. Processing is being done in one single step |
/// </summary> |
/// <remarks> |
/// call CRC := CRC16(0, Data, SizeOf(Data)); |
/// </remarks> |
/// <param name="CRC"> |
/// Specifies the CRC algorithm to be used |
/// </param> |
/// <param name="Buffer"> |
/// Buffer with the data to calculate the CRC from |
/// </param> |
/// <param name="Size"> |
/// Number of bytes over which the CRC will be calculated from the beginning |
/// of the buffer |
/// </param> |
/// <returns> |
/// Calculated CRC16 value |
/// </returns> |
function CRC16(CRC: UInt16; const Buffer; Size: UInt32): UInt16; |
/// <summary> |
/// Calculates a CRC according the CRC32-CCITT standard over some Buffer |
/// with Size Bytes length. Processing is being done in one single step |
/// </summary> |
/// <remarks> |
/// call CRC := CRC32(0, Data, SizeOf(Data)); |
/// </remarks> |
/// <param name="CRC"> |
/// Specifies the CRC algorithm to be used |
/// </param> |
/// <param name="Buffer"> |
/// Buffer with the data to calculate the CRC from |
/// </param> |
/// <param name="Size"> |
/// Number of bytes over which the CRC will be calculated from the beginning |
/// of the buffer |
/// </param> |
/// <returns> |
/// Calculated CRC32 value |
/// </returns> |
function CRC32(CRC: UInt32; const Buffer; Size: UInt32): UInt32; |
implementation |
{$IFOPT Q+}{$DEFINE RESTORE_OVERFLOWCHECKS}{$Q-}{$ENDIF} |
{$IFOPT R+}{$DEFINE RESTORE_RANGECHECKS}{$R-}{$ENDIF} |
type |
PCRCTab = ^TCRCTab; |
/// <summary> |
/// Array type for the meta data definitions of the individual CRC algorithms |
/// </summary> |
TCRCTab = array[TCRCType] of packed record |
Poly, Bits, Init, FInit: UInt32; |
Inverse: LongBool; |
end; |
const |
/// <summary> |
/// Table containing meta data of various well known CRC algorithms/polynoms |
/// </summary> |
CRCTab : TCRCTab = ( |
(Poly: $000000D1; Bits: 08; Init: $00000000; FInit: $00000000; Inverse: True), // CRC_8 GSM/ERR |
(Poly: $00000233; Bits: 10; Init: $00000000; FInit: $00000000; Inverse: True), // CRC_10 ATM/OAM Cell |
(Poly: $0000080F; Bits: 12; Init: $00000000; FInit: $00000000; Inverse: True), // CRC_12 |
(Poly: $00008005; Bits: 16; Init: $00000000; FInit: $00000000; Inverse: True), // CRC_16 ARC;IBM;MODBUS RTU |
// Init value of 1D0F instead of FFFF because the code doesn't fill with zeros, |
// which would otherwise be required for the CCITT variant |
(Poly: $00001021; Bits: 16; Init: $00001D0F; FInit: $00000000; Inverse: False), // CRC_16 CCITT ITU |
(Poly: $00008408; Bits: 16; Init: $00000000; FInit: $00000000; Inverse: True), // CRC_16 XModem |
(Poly: $00864CFB; Bits: 24; Init: $00B704CE; FInit: $00000000; Inverse: False), // CRC_24 |
(Poly: $9DB11213; Bits: 32; Init: $FFFFFFFF; FInit: $FFFFFFFF; Inverse: True), // CRC_32 |
(Poly: $04C11DB7; Bits: 32; Init: $FFFFFFFF; FInit: $FFFFFFFF; Inverse: True), // CRC_32CCITT |
(Poly: $04C11DB7; Bits: 32; Init: $FFFFFFFF; FInit: $00000000; Inverse: True), // CRC_32ZModem |
(Poly: $00000007; Bits: 08; Init: $00000000; FInit: $00000000; Inverse: True), // CRC_8ATMHEC |
(Poly: $00000007; Bits: 08; Init: $00000000; FInit: $00000000; Inverse: False), // CRC_8SMBus |
(Poly: $00004599; Bits: 15; Init: $00000000; FInit: $00000000; Inverse: True), // CRC_15CAN |
(Poly: $00001021; Bits: 16; Init: $00000000; FInit: $00000000; Inverse: False) // CRC_16ZMODEM |
); |
// some other CRC's, not all yet verfied |
// DD $00001021, 16, $0000FFFF, $00000000, 0 // CRC_16 CCITT British Aerospace |
// DD $00004003, 16, $00000000, $00000000, -1 // CRC_16 reversed |
// DD $00001005, 16, $00000000, $00000000, -1 // CRC_16 X25 |
// https://fenix.tecnico.ulisboa.pt/downloadFile/3779571246541/BasicCrd.pdf enthält |
// eine beschreibung dieser BasicCard Smartcard incl. C-CRC Quellcode, aber die |
// Polynome konnte ich so noch nicht überprüfen |
// DD $00000053, 16, $00000000, $00000000, -1 // BasicCard 16Bit CRC (sparse poly for Crypto MCU) |
// DD $000000C5, 32, $00000000, $00000000, -1 // BasicCard 32Bit CRC |
function CRCSetup(var CRCDef: TCRCDef; Polynomial, Bits, InitVector, |
FinalVector: UInt32; Inverse: LongBool): Boolean; |
// initialize CRCDef according to the parameters, calculate the lookup table |
{$IFDEF X86ASM} |
asm |
CMP ECX,8 |
JB @@8 |
PUSH EBX |
PUSH EDI |
PUSH ESI |
MOV [EAX].TCRCDef.Polynomial,EDX |
MOV [EAX].TCRCDef.Bits,ECX |
MOV EBX,InitVector |
MOV EDI,FinalVector |
MOV ESI,Inverse |
MOV [EAX].TCRCDef.CRC,EBX |
MOV [EAX].TCRCDef.InitVector,EBX |
MOV [EAX].TCRCDef.FinalVector,EDI |
MOV [EAX].TCRCDef.Inverse,ESI |
XOR EDI,EDI |
LEA EBX,[ECX - 8] |
SUB ECX,32 |
DEC EDI |
NEG ECX |
SHR EDI,CL |
MOV [EAX].TCRCDef.Shift,EBX |
MOV [EAX].TCRCDef.Mask,EDI |
TEST ESI,ESI |
JZ @@5 |
XOR EBX,EBX |
MOV ECX,[EAX].TCRCDef.Bits |
@@1: SHR EDX,1 |
ADC EBX,EBX |
DEC ECX |
JNZ @@1 |
NOP |
MOV ECX,255 |
NOP |
@@20: MOV EDX,ECX |
SHR EDX,1 |
JNC @@21 |
XOR EDX,EBX |
@@21: SHR EDX,1 |
JNC @@22 |
XOR EDX,EBX |
@@22: SHR EDX,1 |
JNC @@23 |
XOR EDX,EBX |
@@23: SHR EDX,1 |
JNC @@24 |
XOR EDX,EBX |
@@24: SHR EDX,1 |
JNC @@25 |
XOR EDX,EBX |
@@25: SHR EDX,1 |
JNC @@26 |
XOR EDX,EBX |
@@26: SHR EDX,1 |
JNC @@27 |
XOR EDX,EBX |
@@27: SHR EDX,1 |
JNC @@28 |
XOR EDX,EBX |
@@28: MOV [EAX + ECX * 4],EDX |
DEC ECX |
JNL @@20 |
JMP @@7 |
@@5: AND EDX,EDI |
ROL EDX,CL |
MOV EBX,255 |
// can be coded branchfree |
@@60: MOV ESI,EBX |
SHL ESI,25 |
JNC @@61 |
XOR ESI,EDX |
@@61: ADD ESI,ESI |
JNC @@62 |
XOR ESI,EDX |
@@62: ADD ESI,ESI |
JNC @@63 |
XOR ESI,EDX |
@@63: ADD ESI,ESI |
JNC @@64 |
XOR ESI,EDX |
@@64: ADD ESI,ESI |
JNC @@65 |
XOR ESI,EDX |
@@65: ADD ESI,ESI |
JNC @@66 |
XOR ESI,EDX |
@@66: ADD ESI,ESI |
JNC @@67 |
XOR ESI,EDX |
@@67: ADD ESI,ESI |
JNC @@68 |
XOR ESI,EDX |
@@68: ROR ESI,CL |
MOV [EAX + EBX * 4],ESI |
DEC EBX |
JNL @@60 |
@@7: POP ESI |
POP EDI |
POP EBX |
@@8: CMC |
SBB EAX,EAX |
NEG EAX |
end; |
{$ELSE !X86ASM} |
var |
Value, XorValue, OldValue: UInt32; |
Index: Integer; |
B: Boolean; |
One: Byte; |
begin |
if Bits >= 8 then |
begin |
CRCDef.Polynomial := Polynomial; |
CRCDef.Bits := Bits; |
CRCDef.CRC := InitVector; |
CRCDef.InitVector := InitVector; |
CRCDef.FinalVector := FinalVector; |
CRCDef.Inverse := Inverse; |
CRCDef.Shift := Bits - 8; |
Bits := -(Bits - 32); |
CRCDef.Mask := -1 shr Byte(Bits); |
if Inverse then |
begin |
Bits := CRCDef.Bits; |
XorValue := 0; |
repeat |
Inc(XorValue, XorValue + Ord(Polynomial and $1)); |
Polynomial := Polynomial shr 1; |
Dec(Bits); |
until Bits = 0; |
One := $1; |
for Index := 255 downto 0 do |
begin |
Value := Index; |
B := Boolean(Value and One); Value := Value shr 1; |
if B then Value := Value xor XorValue; |
B := Boolean(Value and One); Value := Value shr 1; |
if B then Value := Value xor XorValue; |
B := Boolean(Value and One); Value := Value shr 1; |
if B then Value := Value xor XorValue; |
B := Boolean(Value and One); Value := Value shr 1; |
if B then Value := Value xor XorValue; |
B := Boolean(Value and One); Value := Value shr 1; |
if B then Value := Value xor XorValue; |
B := Boolean(Value and One); Value := Value shr 1; |
if B then Value := Value xor XorValue; |
B := Boolean(Value and One); Value := Value shr 1; |
if B then Value := Value xor XorValue; |
B := Boolean(Value and One); Value := Value shr 1; |
if B then Value := Value xor XorValue; |
CRCDef.Table[Index] := Value; |
end; |
end |
else |
begin |
XorValue := Polynomial and CRCDef.Mask; |
XorValue := (XorValue shl Byte(Bits)) or (XorValue shr (32 - Byte(Bits))); |
for Index := 255 downto 0 do |
begin |
B := Boolean(Index and $000000080); Value := Index shl 25; |
if B then Value := Value xor XorValue; |
OldValue := Value; Inc(Value, Value); |
if Value < OldValue then Value := Value xor XorValue; |
OldValue := Value; Inc(Value, Value); |
if Value < OldValue then Value := Value xor XorValue; |
OldValue := Value; Inc(Value, Value); |
if Value < OldValue then Value := Value xor XorValue; |
OldValue := Value; Inc(Value, Value); |
if Value < OldValue then Value := Value xor XorValue; |
OldValue := Value; Inc(Value, Value); |
if Value < OldValue then Value := Value xor XorValue; |
OldValue := Value; Inc(Value, Value); |
if Value < OldValue then Value := Value xor XorValue; |
OldValue := Value; Inc(Value, Value); |
if Value < OldValue then Value := Value xor XorValue; |
Value := (Value shr Byte(Bits)) or (Value shl (32 - Byte(Bits))); |
CRCDef.Table[Index] := Value; |
end; |
end; |
Result := True; |
end |
else |
Result := False; |
end; |
{$ENDIF !X86ASM} |
function CRCInit(var CRCDef: TCRCDef; CRCType: TCRCType): Boolean; |
begin |
Result := CRCSetup(CRCDef, |
PCRCTab(@CRCTab)[CRCType].Poly, |
PCRCTab(@CRCTab)[CRCType].Bits, |
PCRCTab(@CRCTab)[CRCType].Init, |
PCRCTab(@CRCTab)[CRCType].FInit, |
PCRCTab(@CRCTab)[CRCType].Inverse); |
end; |
function CRCCode(var CRCDef: TCRCDef; const Buffer; Size: UInt32): UInt32; |
// do the CRC computation |
{$IFDEF X86ASM} |
asm |
JECXZ @@5 |
TEST EDX,EDX |
JZ @@5 |
PUSH ESI |
PUSH EBX |
MOV ESI,EAX |
CMP [EAX].TCRCDef.Inverse,0 |
MOV EAX,[ESI].TCRCDef.CRC |
JZ @@2 |
XOR EBX,EBX |
@@1: MOV BL,[EDX] |
XOR BL,AL |
SHR EAX,8 |
INC EDX |
XOR EAX,[ESI + EBX * 4] |
DEC ECX |
JNZ @@1 |
JMP @@4 |
@@2: PUSH EDI |
MOV EBX,EAX |
MOV EDI,ECX |
MOV ECX,[ESI].TCRCDef.Shift |
MOV EBX,EAX |
@@3: SHR EBX,CL |
SHL EAX,8 |
XOR BL,[EDX] |
INC EDX |
MOVZX EBX,BL |
XOR EAX,[ESI + EBX * 4] |
DEC EDI |
MOV EBX,EAX |
JNZ @@3 |
POP EDI |
@@4: MOV [ESI].TCRCDef.CRC,EAX |
XOR EAX,[ESI].TCRCDef.FinalVector |
AND EAX,[ESI].TCRCDef.Mask |
POP EBX |
POP ESI |
RET |
@@5: MOV EAX,[EAX].TCRCDef.CRC |
end; |
{$ELSE !X86ASM} |
var |
P: PByte; |
Value: Byte; |
begin |
Result := CRCDef.CRC; |
P := @Buffer; |
if (Size <> 0) and (P <> nil) then |
begin |
if CRCDef.Inverse then |
begin |
repeat |
Value := P^ xor Byte(Result); |
Result := (Result shr 8) xor CRCDef.Table[Value]; |
Inc(P); |
Dec(Size); |
until Size = 0; |
end |
else |
begin |
Value := Byte(CRCDef.Shift); // move to local variable => cpu register |
repeat |
Result := (Result shl 8) xor CRCDef.Table[Byte(Result shr Value) xor P^]; |
Inc(P); |
Dec(Size); |
until Size = 0; |
end; |
CRCDef.CRC := Result; |
Result := (Result xor CRCDef.FinalVector) and CRCDef.Mask; |
end; |
end; |
{$ENDIF !X86ASM} |
function CRCCode(var CRCDef: TCRCDef; ReadMethod: TReadMethod; Size: UInt32 = $FFFFFFFF): UInt32; |
var |
Buffer: array[0..1023] of Char; |
Count: Int64; |
begin |
repeat |
if Size > SizeOf(Buffer) then |
Count := SizeOf(Buffer) |
else |
Count := Size; |
Count := ReadMethod(Buffer, Count); |
Result := CRCCode(CRCDef, Buffer, Count); |
Dec(Size, Count); |
until (Size = 0) or (Count = 0); |
end; |
function CRCDone(var CRCDef: TCRCDef): UInt32; |
// finalize CRCDef after a computation |
{$IFDEF X86ASM} |
asm |
MOV EDX,[EAX].TCRCDef.CRC |
MOV ECX,[EAX].TCRCDef.InitVector |
XOR EDX,[EAX].TCRCDef.FinalVector |
MOV [EAX].TCRCDef.CRC,ECX |
AND EDX,[EAX].TCRCDef.Mask |
MOV EAX,EDX |
end; |
{$ELSE !X86ASM} |
begin |
Result := CRCDef.CRC; |
CRCDef.CRC := CRCDef.InitVector; |
Result := (Result xor CRCDef.FinalVector) and CRCDef.Mask; |
end; |
{$ENDIF !X86ASM} |
function CRCCalc(CRCType: TCRCType; const Buffer; Size: UInt32): UInt32; |
// inplace calculation |
var |
CRC: TCRCDef; |
begin |
CRCInit(CRC, CRCType); |
Result := CRCCode(CRC, Buffer, Size); |
end; |
function CRCCalc(CRCType: TCRCType; ReadMethod: TReadMethod; Size: UInt32): UInt32; |
var |
CRC: TCRCDef; |
begin |
CRCInit(CRC, CRCType); |
Result := CRCCode(CRC, ReadMethod, Size); |
end; |
// predefined CRC16/CRC32CCITT, avoid slower lookuptable computation by use of precomputation |
var |
FCRC16: PCRCDef = nil; |
FCRC32: PCRCDef = nil; |
function CRC16Init: Pointer; |
begin |
// Replace GetMem by GetMemory due to C++ Builder compatibility |
// GetMem(FCRC16, SizeOf(TCRCDef)); |
FCRC16 := GetMemory(SizeOf(TCRCDef)); |
CRCInit(FCRC16^, CRC_16); |
Result := FCRC16; |
end; |
function CRC16(CRC: UInt16; const Buffer; Size: UInt32): UInt16; |
{$IFDEF X86ASM} |
asm |
JECXZ @@2 |
PUSH EDI |
PUSH ESI |
MOV EDI,ECX |
{$IFDEF PIC} |
MOV ESI,[EBX].FCRC16 |
{$ELSE !PIC} |
MOV ESI,FCRC16 |
{$ENDIF !PIC} |
XOR ECX,ECX |
TEST ESI,ESI |
JZ @@3 |
@@1: MOV CL,[EDX] |
XOR CL,AL |
SHR EAX,8 |
INC EDX |
XOR EAX,[ESI + ECX * 4] |
DEC EDI |
JNZ @@1 |
POP ESI |
POP EDI |
@@2: RET |
@@3: PUSH EAX |
PUSH EDX |
CALL CRC16Init |
MOV ESI,EAX |
XOR ECX,ECX |
POP EDX |
POP EAX |
JMP @@1 |
end; |
{$ELSE !X86ASM} |
var |
LCRC16: PCRCDef; |
P: PByte; |
CRC32: UInt32; |
Value: Byte; |
begin |
if Size <> 0 then |
begin |
LCRC16 := FCRC16; |
if LCRC16 = nil then |
LCRC16 := CRC16Init; |
CRC32 := CRC; |
P := @Buffer; |
repeat |
Value := P^ xor Byte(CRC32); |
CRC32 := (CRC32 shr 8) xor LCRC16.Table[Value]; |
Inc(P); |
Dec(Size); |
until Size = 0; |
Result := UInt16(CRC32); |
end |
else |
Result := CRC; |
end; |
{$ENDIF !X86ASM} |
function CRC32Init: Pointer; |
begin |
// Replaced for C++ Builder compatibility |
// GetMem(FCRC32, SizeOf(TCRCDef)); |
FCRC32 := GetMemory(SizeOf(TCRCDef)); |
CRCInit(FCRC32^, CRC_32CCITT); |
Result := FCRC32; |
end; |
function CRC32(CRC: UInt32; const Buffer; Size: UInt32): UInt32; |
{$IFDEF X86ASM} |
asm |
JECXZ @@2 |
PUSH EDI |
PUSH ESI |
NOT EAX // inverse Input CRC |
MOV EDI,ECX |
{$IFDEF PIC} |
MOV ESI,[EBX].FCRC32 |
{$ELSE !PIC} |
MOV ESI,FCRC32 |
{$ENDIF !PIC} |
XOR ECX,ECX |
TEST ESI,ESI |
JZ @@3 |
@@1: MOV CL,[EDX] |
XOR CL,AL |
SHR EAX,8 |
INC EDX |
XOR EAX,[ESI + ECX * 4] |
DEC EDI |
JNZ @@1 |
NOT EAX // inverse Output CRC |
POP ESI |
POP EDI |
@@2: RET |
@@3: PUSH EAX |
PUSH EDX |
CALL CRC32Init |
MOV ESI,EAX |
XOR ECX,ECX |
POP EDX |
POP EAX |
JMP @@1 |
end; |
{$ELSE !X86ASM} |
var |
LCRC32: PCRCDef; |
P: PByte; |
CRC32: UInt32; |
Value: Byte; |
begin |
if Size <> 0 then |
begin |
LCRC32 := FCRC32; |
if LCRC32 = nil then |
LCRC32 := CRC32Init; |
CRC32 := not CRC; // inverse Input CRC |
P := @Buffer; |
repeat |
Value := P^ xor Byte(CRC32); |
CRC32 := (CRC32 shr 8) xor LCRC32.Table[Value]; |
Inc(P); |
Dec(Size); |
until Size = 0; |
Result := not CRC32; // inverse Output CRC |
end |
else |
Result := CRC; |
end; |
{$ENDIF !X86ASM} |
procedure CRCInitThreadSafe; |
begin |
CRC16Init; |
CRC32Init; |
end; |
{$IFDEF RESTORE_RANGECHECKS}{$R+}{$ENDIF} |
{$IFDEF RESTORE_OVERFLOWCHECKS}{$Q+}{$ENDIF} |
initialization |
CRCInitThreadSafe; |
finalization |
if FCRC16 <> nil then |
FreeMem(FCRC16); |
if FCRC32 <> nil then |
FreeMem(FCRC32); |
end. |
/trunk/Decoder5/VCL_DEC/DECCipherBase.pas |
---|
0,0 → 1,1222 |
{***************************************************************************** |
The DEC team (see file NOTICE.txt) licenses this file |
to you under the Apache License, Version 2.0 (the |
"License"); you may not use this file except in compliance |
with the License. A copy of this licence is found in the root directory |
of this project in the file LICENCE.txt or alternatively 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. |
*****************************************************************************} |
unit DECCipherBase; |
{$INCLUDE DECOptions.inc} |
interface |
uses |
{$IFDEF FPC} |
SysUtils, Classes, |
{$ELSE} |
System.SysUtils, System.Classes, Generics.Collections, |
{$ENDIF} |
DECBaseClass, DECFormatBase, DECTypes; |
type |
/// <summary> |
/// Possible kindes of cipher algorithms independent of any block |
/// concatenation mode etc. |
/// <para> |
/// ctNull = special "do nothing cipher" |
/// </para> |
/// <para> |
/// ctStream = cipher operating on a stream of bytes instead of blocks |
/// </para> |
/// <para> |
/// ctBlock = cipher operating on blocks of bytes with a fixed size |
/// </para> |
/// <para> |
/// ctSymmetric = cipher where the same key encrypts and decrypts |
/// </para> |
/// <para> |
/// ctAsymetric = cipher where encryption and decryption requires |
/// different keys |
/// </para> |
/// </summary> |
TCipherTypes = (ctNull, ctStream, ctBlock, ctSymmetric, ctAsymmetric); |
/// <summary> |
/// Actual kind of cipher algorithm |
/// </summary> |
TCipherType = set of TCipherTypes; |
/// <summary> |
/// Padding used to fill the last incomplete block of a block encryption |
/// algorithm. To be expanded in a future version |
/// </summary> |
TBlockFillMode = (fmByte); |
/// <summary> |
/// Record containing meta data about a certain cipher |
/// </summary> |
TCipherContext = packed record |
/// <summary> |
/// maximal key size in bytes |
/// </summary> |
KeySize : Integer; |
/// <summary> |
/// mininmal block size in bytes, e.g. 1 = Streamcipher |
/// </summary> |
BlockSize : Integer; |
/// <summary> |
/// internal buffersize in bytes |
/// </summary> |
BufferSize : Integer; |
/// <summary> |
/// Size in bytes of the FAdditionalBuffer used by some of the cipher algorithms |
/// </summary> |
AdditionalBufferSize : Integer; |
/// <summary> |
/// When true the memory a certain internal pointer (FAdditionalBuffer) |
/// points to needs to be backuped during key initialization if no init |
/// vector is specified and restored at the end of that init method. |
/// Same in Done method as well. |
/// </summary> |
NeedsAdditionalBufferBackup : Boolean; |
/// <summary> |
/// Minimum number of rounds allowed for any block cipher having a rounds |
/// property. In all other cases it will be set to 1. |
/// </summary> |
MinRounds : UInt16; |
/// <summary> |
/// Maximum number of rounds allowed for any block cipher having a rounds |
/// property. In all other cases it will be set to 1. |
/// </summary> |
MaxRounds : UInt16; |
/// <summary> |
/// Specifies the kind of cipher |
/// </summary> |
CipherType : TCipherType; |
end; |
/// <summary> |
/// TCipher.State represents the internal state of processing |
/// <para> |
/// csNew : cipher isn't initialized, .Init() must be called before en/decode |
/// </para> |
/// <para> |
/// csNew : cipher isn't initialized, .Init() must be called before en/decode |
/// </para> |
/// <para> |
/// csInitialized : cipher is initialized by .Init(), i.e. Keysetup was processed |
/// </para> |
/// <para> |
/// csEncode : Encoding was started, and more chunks can be encoded, but not decoded |
/// </para> |
/// <para> |
/// csDecode : Decoding was started, and more chunks can be decoded, but not encoded |
/// </para> |
/// <para> |
/// csPadded : trough En/Decoding the messagechunks are padded, no more chunks can |
/// be processed, the cipher is blocked |
/// </para> |
/// <para> |
/// csDone : Processing is finished and Cipher.Done was called. Now new En/Decoding |
/// can be started without calling .Init() before. csDone is basically |
/// identical to csInitialized, except Cipher.Buffer holds the encrypted |
/// last state of Cipher.Feedback, thus Cipher.Buffer can be used as C-MAC. |
/// </para> |
/// </summary> |
TCipherState = (csNew, csInitialized, csEncode, csDecode, csPadded, csDone); |
/// <summary> |
/// Set of cipher states, representing the internal state of processing |
/// </summary> |
TCipherStates = set of TCipherState; |
/// <summary> |
/// This defines how the individual blocks of the data to be processed are |
/// linked with each other. |
/// |
/// Modes cmCBCx, cmCTSx, cmCTSxx, cmCFBx, cmOFBx, cmCFSx, cmECBx are working |
/// on Blocks of Cipher.BufferSize bytes, when using a Blockcipher that's equal |
/// to Cipher.BlockSize. |
/// |
/// Modes cmCFB8, cmOFB8, cmCFS8 work on 8 bit Feedback Shift Registers. |
/// |
/// Modes cmCTSx, cmCFSx, cmCFS8 are proprietary modes developed by Hagen |
/// Reddmann. These modes work like cmCBCx, cmCFBx, cmCFB8 but with double |
/// XOR'ing of the inputstream into the feedback register. |
/// |
/// Mode cmECBx needs message padding to be a multiple of Cipher.BlockSize and |
/// should be used only in 1-byte Streamciphers. |
/// |
/// Modes cmCFB8, cmCFBx, cmOFB8, cmOFBx, cmCFS8 and cmCFSx need no padding. |
/// |
/// Modes cmCTSx, cmCBCx need no external padding, because internally the last |
/// truncated block is padded by cmCFS8 or cmCFB8. After padding these Modes |
/// cannot be used to process any more data. If needed to process chunks of |
/// data then each chunk must be algined to Cipher.BufferSize bytes. |
/// |
/// Mode cmCTS3 is a proprietary mode developed by Frederik Winkelsdorf. It |
/// replaces the CFS8 padding of the truncated final block with a CFSx padding. |
/// Useful when converting projects that previously used the old DEC v3.0. It |
/// has the same restrictions for external padding and chunk processing as |
/// cmCTSx has. |
/// </summary> |
TCipherMode = ( |
cmCTSx, // double CBC, with CFS8 padding of truncated final block |
cmCBCx, // Cipher Block Chaining, with CFB8 padding of truncated final block |
cmCFB8, // 8bit Cipher Feedback mode |
cmCFBx, // CFB on Blocksize of Cipher |
cmOFB8, // 8bit Output Feedback mode |
cmOFBx, // OFB on Blocksize bytes |
cmCFS8, // 8Bit CFS, double CFB |
cmCFSx, // CFS on Blocksize bytes |
cmECBx, // Electronic Code Book |
cmGCM // Galois Counter Mode |
{$IFDEF DEC3_CMCTS} |
,cmCTS3 // double CBC, with less secure padding of truncated final block |
// for DEC 3.0 compatibility only (see DECOptions.inc) |
{$ENDIF DEC3_CMCTS} |
); |
/// <summary> |
/// Each cipher algorithm has to implement a Encode and a Decode method which |
/// has the same signature as this type. The CipherFormats get these |
/// encode/decode methods passed to do their work. |
/// </summary> |
/// <param name="Source"> |
/// Contains the data to be encoded or decoded |
/// </param> |
/// <param name="Dest"> |
/// Contains the data after encoding or decoding |
/// </param> |
/// <param name="DataSize"> |
/// Number of bytes to encode or decode |
/// </param> |
TDECCipherCodeEvent = procedure(const Source; var Dest; DataSize: Integer) of object; |
/// <summary> |
/// Class type of the cipher base class, relevant for the class registration |
/// </summary> |
TDECCipherClass = class of TDECCipher; |
/// <summary> |
/// Base class for all implemented cipher algorithms |
/// </summary> |
/// <remarks> |
/// When adding new block ciphers do never directly inherit from this class! |
/// Inherit from TDECCipherFormats. |
/// </remarks> |
TDECCipher = class(TDECObject) |
strict private |
/// <summary> |
/// This is the complete memory block containing FInitializationVector, |
/// FFeedback, FBuffer and FAdditionalBuffer |
/// </summary> |
FData : PUInt8Array; |
/// <summary> |
/// This is the size of FData in byte |
/// </summary> |
FDataSize : Integer; |
strict protected |
/// <summary> |
/// Padding mode used to concatenate/connect blocks in a block cipher |
/// </summary> |
FMode : TCipherMode; |
/// <summary> |
/// Mode used for filling up an incomplete last block in a block cipher |
/// </summary> |
FFillMode : TBlockFillMode; |
/// <summary> |
/// Current processing state |
/// </summary> |
FState: TCipherState; |
/// <summary> |
/// Size of the internally used processing buffer in byte |
/// </summary> |
FBufferSize: Integer; |
/// <summary> |
/// At which position of the buffer are we currently operating? |
/// </summary> |
FBufferIndex: Integer; |
/// <summary> |
/// Some algorithms, mostly the cipher mode ones, need a temporary buffer |
/// to work with. Some other methods like Done or Valid cipher need to pass |
/// a buffer as parameter as that is ecpected by the called method. |
/// </summary> |
FBuffer: PUInt8Array; |
/// <summary> |
/// Initialization vector. When using cipher modes to derive a stream |
/// cipher from a block cipher algorithm some data from each encrypted block |
/// is fed into the encryption of the next block. For the first block there |
/// is no such encrypted data yet, so this initialization vector fills this |
/// "gap". |
/// </summary> |
FInitializationVector: PUInt8Array; |
/// <summary> |
/// Size of the initialization vector in byte. Required for algorithms |
/// like GCM. |
/// </summary> |
FInitVectorSize: Integer; |
/// <summary> |
/// Cipher modes are used to derive a stream cipher from block cipher |
/// algorithms. For this something from the last entrypted block (or for |
/// the first block from the vector) is used in the encryption of the next |
/// block. It may be XORed with the next block cipher text for isntance. |
/// That data "going into the next block encryption" is this feedback array |
/// </summary> |
FFeedback: PUInt8Array; |
/// <summary> |
/// Size of FAdditionalBuffer in Byte |
/// </summary> |
FAdditionalBufferSize: Integer; |
/// <summary> |
/// A buffer some of the cipher algorithms need to operate on. It is |
/// some part of FBuffer like FInitializationVector and FFeedback as well. |
/// </summary> |
FAdditionalBuffer: Pointer; |
/// <summary> |
/// If a user does not specify an init vector (IV) during key setup |
/// (IV length = 0) the init method generates an IV by encrypting the |
/// complete memory reserved for IV. Within this memory block is the memory |
/// FAdditionalBuffer points to as well, and for some algorithms this part |
/// of the memory may not be altered during initialization so it is |
/// backupped to this memory location and restored after the IV got encrypted. |
/// In DoDone it needs to be restored as well to prevent any unwanted |
/// leftovers which might pose a security issue. |
/// </summary> |
FAdditionalBufferBackup: Pointer; |
/// <summary> |
/// Checks whether the state machine is in one of the states specified as |
/// parameter. If not a EDECCipherException will be raised. |
/// </summary> |
/// <param name="States"> |
/// List of states the state machine should be at currently |
/// </param> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if the state machine is not in one of the states |
/// specified by the <c>States</c> parameter. |
/// </exception> |
procedure CheckState(States: TCipherStates); |
/// <summary> |
/// Initialize the key, based on the key passed in. This is called before |
/// OnAfterInitVectorInitialization is called. |
/// </summary> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
procedure DoInit(const Key; Size: Integer); virtual; abstract; |
/// <summary> |
/// Allows to run code after the initialization vector has been initialized |
/// inside the Init call, which is after DoInit has been called. |
/// </summary> |
/// <param name="OriginalInitVector"> |
/// Value of the init vector as originally passed to the Init call without |
/// any initialization steps done to/on it |
/// </param> |
procedure OnAfterInitVectorInitialization(const OriginalInitVector: TBytes); virtual; abstract; |
/// <summary> |
/// This abstract method needs to be overwritten by each concrete encryption |
/// algorithm as this is the routine used internally to encrypt a single |
/// block of data. |
/// </summary> |
/// <param name="Source"> |
/// Data to be encrypted |
/// </param> |
/// <param name="Dest"> |
/// In this memory the encrypted result will be written |
/// </param> |
/// <param name="Size"> |
/// Size of source in byte |
/// </param> |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); virtual; abstract; |
/// <summary> |
/// This abstract method needs to be overwritten by each concrete encryption |
/// algorithm as this is the routine used internally to decrypt a single |
/// block of data. |
/// </summary> |
/// <param name="Source"> |
/// Data to be decrypted |
/// </param> |
/// <param name="Dest"> |
/// In this memory the decrypted result will be written |
/// </param> |
/// <param name="Size"> |
/// Size of source in byte |
/// </param> |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); virtual; abstract; |
/// <summary> |
/// Securely fills the processing buffer with zeroes to make stealing data |
/// from memory harder. |
/// </summary> |
procedure SecureErase; virtual; |
/// <summary> |
/// Returns the currently set cipher block mode, means how blocks are |
/// linked to each other in order to avoid certain attacks. |
/// </summary> |
function GetMode: TCipherMode; |
/// <summary> |
/// Sets the cipher mode, means how each block is being linked with his |
/// predecessor to avoid certain attacks |
/// </summary> |
procedure SetMode(Value: TCipherMode); |
/// <summary> |
/// When setting a mode it might need to be initialized and that can |
/// usually only be done in a child class. |
/// </summary> |
procedure InitMode; virtual; abstract; |
public |
/// <summary> |
/// List of registered DEC classes. Key is the Identity of the class. |
/// </summary> |
class var ClassList : TDECClassList; |
/// <summary> |
/// Tries to find a class type by its name |
/// </summary> |
/// <param name="Name"> |
/// Name to look for in the list |
/// </param> |
/// <returns> |
/// Returns the class type if found. if it could not be found a |
/// EDECClassNotRegisteredException will be thrown |
/// </returns> |
/// <exception cref="EDECClassNotRegisteredException"> |
/// Exception raised if the class specified by <c>Name</c> is not found |
/// </exception> |
class function ClassByName(const Name: string): TDECCipherClass; |
/// <summary> |
/// Tries to find a class type by its numeric identity DEC assigned to it. |
/// Useful for file headers, so they can easily encode numerically which |
/// cipher class was being used. |
/// </summary> |
/// <param name="Identity"> |
/// Identity to look for |
/// </param> |
/// <returns> |
/// Returns the class type of the class with the specified identity value |
/// or throws an EDECClassNotRegisteredException exception if no class |
/// with the given identity has been found |
/// </returns> |
/// <exception cref="EDECClassNotRegisteredException"> |
/// Exception raised if the class specified by <c>Identity</c> is not found |
/// </exception> |
class function ClassByIdentity(Identity: Int64): TDECCipherClass; |
/// <summary> |
/// Provides meta data about the cipher algorithm used like key size. |
/// To be overidden in the concrete cipher classes. |
/// </summary> |
/// <remarks> |
/// C++ does not support virtual static functions thus the base cannot be |
/// marked 'abstract'. Calling this version of the method will lead to an |
/// EDECAbstractError |
/// </remarks> |
class function Context: TCipherContext; virtual; |
/// <summary> |
/// Initializes the instance. Relies in parts on information given by the |
/// Context class function. |
/// </summary> |
constructor Create; override; |
/// <summary> |
/// Frees internal structures and where necessary does so in a save way so |
/// that data in those structures cannot be "stolen". |
/// </summary> |
destructor Destroy; override; |
/// <summary> |
/// Provides information whether the selected block concatenation mode |
/// provides authentication functionality or not. |
/// </summary> |
/// <returns> |
/// true if the selected block mode is one providing authentication features |
/// as well |
/// </returns> |
function IsAuthenticated: Boolean; |
/// <summary> |
/// Initializes the cipher with the necessary encryption/decryption key |
/// </summary> |
/// <param name="Key"> |
/// Encryption/decryption key. Recommended/required key length is dependant |
/// on the concrete algorithm. |
/// </param> |
/// <param name="Size"> |
/// Size of the key in bytes |
/// </param> |
/// <param name="IVector"> |
/// Initialization vector. This contains the values the first block of |
/// data to be processed is linked with. This is being done the same way |
/// as the 2nd block of the data to be processed will be linked with the |
/// first block and so on and this is dependant on the cypher mode set via |
/// Mode property |
/// </param> |
/// <param name="IVectorSize"> |
/// Size of the initialization vector in bytes |
/// </param> |
/// <param name="IFiller"> |
/// optional parameter defining the value with which the last block will |
/// be filled up if the size of the data to be processed cannot be divided |
/// by block size without reminder. Means: if the last block is not |
/// completely filled with data. |
/// </param> |
procedure Init(const Key; Size: Integer; const IVector; IVectorSize: Integer; IFiller: Byte = $FF); overload; |
/// <summary> |
/// Initializes the cipher with the necessary encryption/decryption key |
/// </summary> |
/// <param name="Key"> |
/// Encryption/decryption key. Recommended/required key length is dependant |
/// on the concrete algorithm. |
/// </param> |
/// <param name="IVector"> |
/// Initialization vector. This contains the values the first block of |
/// data to be processed is linked with. This is being done the same way |
/// as the 2nd block of the data to be processed will be linked with the |
/// first block and so on and this is dependant on the cypher mode set via |
/// Mode property |
/// </param> |
/// <param name="IFiller"> |
/// optional parameter defining the value with which the last block will |
/// be filled up if the size of the data to be processed cannot be divided |
/// by block size without reminder. Means: if the last block is not |
/// completely filled with data. |
/// </param> |
procedure Init(const Key: TBytes; const IVector: TBytes; IFiller: Byte = $FF); overload; |
/// <summary> |
/// Initializes the cipher with the necessary encryption/decryption key |
/// </summary> |
/// <param name="Key"> |
/// Encryption/decryption key. Recommended/required key length is dependant |
/// on the concrete algorithm. |
/// </param> |
/// <param name="IVector"> |
/// Initialization vector. This contains the values the first block of |
/// data to be processed is linked with. This is being done the same way |
/// as the 2nd block of the data to be processed will be linked with the |
/// first block and so on and this is dependant on the cypher mode set via |
/// Mode property |
/// </param> |
/// <param name="IFiller"> |
/// optional parameter defining the value with which the last block will |
/// be filled up if the size of the data to be processed cannot be divided |
/// by block size without reminder. Means: if the last block is not |
/// completely filled with data. |
/// </param> |
procedure Init(const Key: RawByteString; const IVector: RawByteString = ''; IFiller: Byte = $FF); overload; |
{$IFDEF ANSISTRINGSUPPORTED} |
/// <summary> |
/// Initializes the cipher with the necessary encryption/decryption key. |
/// Only for use with the classic desktop compilers. |
/// </summary> |
/// <param name="Key"> |
/// Encryption/decryption key. Recommended/required key length is dependant |
/// on the concrete algorithm. |
/// </param> |
/// <param name="IVector"> |
/// Initialization vector. This contains the values the first block of |
/// data to be processed is linked with. This is being done the same way |
/// as the 2nd block of the data to be processed will be linked with the |
/// first block and so on and this is dependant on the cypher mode set via |
/// Mode property |
/// </param> |
/// <param name="IFiller"> |
/// optional parameter defining the value with which the last block will |
/// be filled up if the size of the data to be processed cannot be divided |
/// by block size without reminder. Means: if the last block is not |
/// completely filled with data. |
/// </param> |
procedure Init(const Key: AnsiString; const IVector: AnsiString = ''; IFiller: Byte = $FF); overload; |
{$ENDIF} |
{$IFNDEF NEXTGEN} |
/// <summary> |
/// Initializes the cipher with the necessary encryption/decryption key. |
/// Only for use with the classic desktop compilers. |
/// </summary> |
/// <param name="Key"> |
/// Encryption/decryption key. Recommended/required key length is dependant |
/// on the concrete algorithm. |
/// </param> |
/// <param name="IVector"> |
/// Initialization vector. This contains the values the first block of |
/// data to be processed is linked with. This is being done the same way |
/// as the 2nd block of the data to be processed will be linked with the |
/// first block and so on and this is dependant on the cypher mode set via |
/// Mode property |
/// </param> |
/// <param name="IFiller"> |
/// optional parameter defining the value with which the last block will |
/// be filled up if the size of the data to be processed cannot be divided |
/// by block size without reminder. Means: if the last block is not |
/// completely filled with data. |
/// </param> |
procedure Init(const Key: WideString; const IVector: WideString = ''; IFiller: Byte = $FF); overload; |
{$ENDIF} |
/// <summary> |
/// Properly finishes the cryptographic operation. It needs to be called |
/// at the end of encrypting or decrypting data, otherwise the last block |
/// or last byte of the data will not be properly processed. |
/// </summary> |
procedure Done; virtual; |
// Encoding / Decoding Routines |
// Do not add further methods of that kind here! If needed add them to |
// TDECFormattedCipher in DECCipherFormats or inherit from that one. |
/// <summary> |
/// Encrypts the contents of a RawByteString. This method is deprecated |
/// and should be replaced by a variant expecting TBytes as source in |
/// order to not support mistreating strings as binary buffers. |
/// </summary> |
/// <remarks> |
/// This is the direct successor of the EncodeBinary method from DEC 5.2. |
/// When block chaining mode ECBx is used |
/// (not recommended!), the size of the data passed via this parameter |
/// needs to be a multiple of the block size of the algorithm used, |
/// otherwise a EDECCipherException exception will be raised! |
/// </remarks> |
/// <param name="Source"> |
/// The data to be encrypted |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. Here a formatting method can be passed. The |
/// resulting encrypted data will be formatted with this function, if one |
/// has been passed. Examples are hex or base 64 formatting. |
/// </param> |
/// <returns> |
/// Encrypted data. Init must have been called previously. |
/// </returns> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if the length of the data passed as <c>Source</c> |
/// is not a multiple of the algorithm's block size. |
/// </exception> |
function EncodeRawByteString(const Source: RawByteString; |
Format: TDECFormatClass = nil): RawByteString; |
deprecated 'please use EncodeBytes functions or TCipherFormats.EncodeStringToString now'; |
/// <summary> |
/// Decrypts the contents of a RawByteString. This method is deprecated |
/// and should be replaced by a variant expecting TBytes as source in |
/// order to not support mistreating strings as binary buffers. |
/// </summary> |
/// <remarks> |
/// This is the direct successor of the DecodeBinary method from DEC 5.2 |
/// When block chaining mode ECBx is used |
/// (not recommended!), the size of the data passed via this parameter |
/// needs to be a multiple of the block size of the algorithm used, |
/// otherwise a EDECCipherException exception will be raised! |
/// </remarks> |
/// <param name="Source"> |
/// The data to be decrypted |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. Here a formatting method can be passed. The |
/// data to be decrypted will be formatted with this function, if one |
/// has been passed. Examples are hex or base 64 formatting. |
/// This is used for removing a formatting applied by the EncodeRawByteString |
/// method. |
/// </param> |
/// <returns> |
/// Decrypted data. Init must have been called previously. |
/// </returns> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if the length of the data passed as <c>Source</c> |
/// is not a multiple of the algorithm's block size. |
/// </exception> |
function DecodeRawByteString(const Source: RawByteString; |
Format: TDECFormatClass = nil): RawByteString; deprecated 'please use DecodeBytes functions now'; |
/// <summary> |
/// Encrypts the contents of a ByteArray. |
/// </summary> |
/// <param name="Source"> |
/// The data to be encrypted. When block chaining mode ECBx is used |
/// (not recommended!), the size of the data passed via this parameter |
/// needs to be a multiple of the block size of the algorithm used, |
/// otherwise a EDECCipherException exception will be raised! |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. Here a formatting method can be passed. The |
/// resulting encrypted data will be formatted with this function, if one |
/// has been passed. Examples are hex or base 64 formatting. |
/// </param> |
/// <returns> |
/// Encrypted data. Init must have been called previously. |
/// </returns> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if the length of the data passed as <c>Source</c> |
/// is not a multiple of the algorithm's block size. |
/// </exception> |
function EncodeBytes(const Source: TBytes; Format: TDECFormatClass = nil): TBytes; |
/// <summary> |
/// Decrypts the contents of a ByteArray. |
/// </summary> |
/// <param name="Source"> |
/// The data to be decrypted. When block chaining mode ECBx is used |
/// (not recommended!), the size of the data passed via this parameter |
/// needs to be a multiple of the block size of the algorithm used, |
/// otherwise a EDECCipherException exception will be raised! |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. Here a formatting method can be passed. The |
/// data to be decrypted will be formatted with this function, if one |
/// has been passed. Examples are hex or base 64 formatting. |
/// This is used for removing a formatting applied by the EncodeRawByteString |
/// method. |
/// </param> |
/// <returns> |
/// Decrypted data. Init must have been called previously. |
/// </returns> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if the length of the data passed as <c>Source</c> |
/// is not a multiple of the algorithm's block size. |
/// </exception> |
function DecodeBytes(const Source: TBytes; Format: TDECFormatClass): TBytes; |
// CalcMACBytes deferred since the current implementation would neither be |
// performant (that would require another TFormatBase.Encode variant from |
// pointer to TBytes and that would require a new method name as overloads |
// may not differ in return values only and it would require a lot of unit |
// tests to get implemented. Deferred in particular also due to not yet |
// really understanding the purpose of CalcMAC |
// function CalcMACByte(Format: TDECFormatClass = nil): TBytes; overload; |
// Deprecated directive commented out, as replacement CalcMACByte has not |
// been implemented yet, see remark above. Use case for CalcMAC is not clear |
// yet either. |
function CalcMAC(Format: TDECFormatClass = nil): RawByteString; overload; //deprecated 'please use the TBytes based overload'; |
// properties |
/// <summary> |
/// Provides the size of the initialization vector in bytes. |
/// </summary> |
property InitVectorSize: Integer |
read FBufferSize; |
/// <summary> |
/// Provides access to the contents of the initialization vector |
/// </summary> |
property InitVector: PUInt8Array |
read FInitializationVector; |
/// <summary> |
/// Cipher modes are used to derive a stream cipher from block cipher |
/// algorithms. For this something from the last entrypted block (or for |
/// the first block from the vector) is used in the encryption of the next |
/// block. It may be XORed with the next block cipher text for instance. |
/// That data "going into the next block encryption" is stored in this |
/// feedback array. The size usually depends on the block size of the |
/// cipher algorithm. |
/// </summary> |
property Feedback: PUInt8Array |
read FFeedback; |
/// <summary> |
/// Allows to query the current internal processing state |
/// </summary> |
property State: TCipherState |
read FState; |
/// <summary> |
/// Mode used for padding data to be encrypted/decrypted. See TCipherMode. |
/// </summary> |
property Mode: TCipherMode |
read GetMode |
write SetMode; |
/// <summary> |
/// Mode used for filling up an incomplete last block in a block cipher |
/// </summary> |
property FillMode: TBlockFillMode |
read FFillMode |
write FFillMode; |
end; |
/// <summary> |
/// Returns the passed cipher class type if it is not nil. Otherwise the |
/// class type class set per SetDefaultCipherClass is being returned. If using |
/// the DECCiphers unit that one registers TCipher_Null in the initialization |
/// </summary> |
/// <param name="CipherClass"> |
/// Class type of a cipher class like TCipher_Blowfish or nil, if no |
/// encryption/decryption is desired. |
/// </param> |
/// <returns> |
/// Passed class type or defined default cipher class type, depending on |
/// CipherClass parameter value. |
/// </returns> |
function ValidCipher(CipherClass: TDECCipherClass = nil): TDECCipherClass; |
/// <summary> |
/// Defines which cipher class to return by ValidCipher if passing nil to that |
/// </summary> |
/// <param name="CipherClass"> |
/// Class type of a cipher class to return by ValidCipher if passing nil to |
/// that one. This parameter should not be nil! |
/// </param> |
procedure SetDefaultCipherClass(CipherClass: TDECCipherClass); |
/// <summary> |
/// Provides information whether a certain block concatenation mode |
/// provides authentication functionality or not. |
/// </summary> |
/// <param name="BlockMode"> |
/// Block mode to check fo authentication features |
/// </param> |
/// <returns> |
/// true if the selected block mode is one providing authentication features |
/// as well |
/// </returns> |
function IsAuthenticatedBlockMode(BlockMode: TCipherMode): Boolean; |
implementation |
uses |
{$IFDEF FPC} |
TypInfo, |
{$ELSE} |
System.TypInfo, |
{$ENDIF} |
DECUtil; |
{$IFOPT Q+}{$DEFINE RESTORE_OVERFLOWCHECKS}{$Q-}{$ENDIF} |
{$IFOPT R+}{$DEFINE RESTORE_RANGECHECKS}{$R-}{$ENDIF} |
resourcestring |
sAlreadyPadded = 'Cipher has already been padded, cannot process message'; |
sInvalidState = 'Cipher is not in valid state for this action'; |
sNoKeyMaterialGiven = 'No Keymaterial given (Security Issue)'; |
sKeyMaterialTooLarge = 'Keymaterial is too large for use (Security Issue)'; |
sIVMaterialTooLarge = 'Initvector is too large for use (Security Issue)'; |
sInvalidMACMode = 'Invalid Cipher mode to compute MAC'; |
sCipherNoDefault = 'No default cipher has been registered'; |
var |
/// <summary> |
/// Cipher class returned by ValidCipher if nil is passed as parameter to it |
/// </summary> |
FDefaultCipherClass: TDECCipherClass = nil; |
function ValidCipher(CipherClass: TDECCipherClass): TDECCipherClass; |
begin |
if CipherClass <> nil then |
Result := CipherClass |
else |
Result := FDefaultCipherClass; |
if Result = nil then |
raise EDECCipherException.CreateRes(@sCipherNoDefault); |
end; |
procedure SetDefaultCipherClass(CipherClass: TDECCipherClass); |
begin |
Assert(Assigned(CipherClass), 'Do not set a nil default cipher class!'); |
FDefaultCipherClass := CipherClass; |
end; |
function IsAuthenticatedBlockMode(BlockMode: TCipherMode): Boolean; |
begin |
Result := BlockMode = cmGCM; |
end; |
{ TDECCipher } |
constructor TDECCipher.Create; |
var |
MustAdditionalBufferSave: Boolean; |
begin |
inherited Create; |
FBufferSize := Context.BufferSize; |
FAdditionalBufferSize := Context.AdditionalBufferSize; |
MustAdditionalBufferSave := Context.NeedsAdditionalBufferBackup; |
// Initialization vector, feedback, buffer, additional buffer |
FDataSize := FBufferSize * 3 + FAdditionalBufferSize; |
if MustAdditionalBufferSave then |
// if contents of the FAdditionalBuffer needs to be saved increase buffer size |
// by FAdditionalBufferSize so FAdditionalBuffer and then FAdditionalBufferBackup |
// fit in the buffer |
Inc(FDataSize, FAdditionalBufferSize); |
// ReallocMemory instead of ReallocMem due to C++ compatibility as per 10.1 help |
FData := ReallocMemory(FData, FDataSize); |
FInitializationVector := @FData[0]; |
FInitVectorSize := 0; |
FFeedback := @FInitializationVector[FBufferSize]; |
FBuffer := @FFeedback[FBufferSize]; |
FAdditionalBuffer := @FBuffer[FBufferSize]; |
if MustAdditionalBufferSave then |
// buffer contents: FData, then FFeedback, then FBuffer then FAdditionalBuffer |
FAdditionalBufferBackup := @PUInt8Array(FAdditionalBuffer)[FAdditionalBufferSize] |
else |
FAdditionalBufferBackup := nil; |
FFillMode := fmByte; |
FState := csNew; |
SecureErase; |
end; |
destructor TDECCipher.Destroy; |
begin |
SecureErase; |
// FreeMem instead of ReallocMemory which produced a memory leak. ReallocMemory |
// was used instead of ReallocMem due to C++ compatibility as per 10.1 help |
FreeMem(FData, FDataSize); |
FInitializationVector := nil; |
FFeedback := nil; |
FBuffer := nil; |
FAdditionalBuffer := nil; |
FAdditionalBufferBackup := nil; |
inherited Destroy; |
end; |
procedure TDECCipher.SetMode(Value: TCipherMode); |
begin |
if Value <> FMode then |
begin |
if not (FState in [csNew, csInitialized, csDone]) then |
Done; |
FMode := Value; |
InitMode; |
end; |
end; |
procedure TDECCipher.CheckState(States: TCipherStates); |
begin |
if not (FState in States) then |
begin |
if FState = csPadded then |
raise EDECCipherException.CreateRes(@sAlreadyPadded) |
else |
raise EDECCipherException.CreateRes(@sInvalidState); |
end; |
end; |
class function TDECCipher.ClassByIdentity(Identity: Int64): TDECCipherClass; |
begin |
result := TDECCipherClass(ClassList.ClassByIdentity(Identity)); |
end; |
class function TDECCipher.ClassByName(const Name: string): TDECCipherClass; |
begin |
result := TDECCipherClass(ClassList.ClassByName(Name)); |
end; |
class function TDECCipher.Context: TCipherContext; |
begin |
// C++ does not support virtual static functions thus the base cannot be |
// marked 'abstract'. This is our workaround: |
raise EDECAbstractError.Create(GetShortClassName); |
end; |
procedure TDECCipher.Init(const Key; Size: Integer; const IVector; IVectorSize: Integer; IFiller: Byte); |
var |
OriginalInitVector : TBytes; |
begin |
FState := csNew; |
FInitVectorSize := IVectorSize; |
SecureErase; |
if (Size > Context.KeySize) and (not (ctNull in Context.CipherType)) then |
raise EDECCipherException.CreateRes(@sKeyMaterialTooLarge); |
if (FInitVectorSize > FBufferSize) and (not (FMode = cmGCM)) then |
raise EDECCipherException.CreateRes(@sIVMaterialTooLarge); |
DoInit(Key, Size); |
if FAdditionalBufferBackup <> nil then |
// create backup of FBuffer |
Move(FAdditionalBuffer^, FAdditionalBufferBackup^, FAdditionalBufferSize); |
FillChar(FInitializationVector^, FBufferSize, IFiller); |
SetLength(OriginalInitVector, IVectorSize); |
if (IVectorSize > 0) then |
Move(IVector, OriginalInitVector[0], IVectorSize); |
// GCM needs same treatment as empty IV even if IV specified |
if (IVectorSize = 0) or (FMode = cmGCM) then |
begin |
DoEncode(FInitializationVector, FInitializationVector, FBufferSize); |
if FAdditionalBufferBackup <> nil then |
// Restore backup fo FBuffer |
Move(FAdditionalBufferBackup^, FAdditionalBuffer^, FAdditionalBufferSize); |
end |
else |
Move(IVector, FInitializationVector^, IVectorSize); |
OnAfterInitVectorInitialization(OriginalInitVector); |
Move(FInitializationVector^, FFeedback^, FBufferSize); |
FState := csInitialized; |
end; |
procedure TDECCipher.Init(const Key: TBytes; const IVector: TBytes; IFiller: Byte = $FF); |
begin |
// GCM allows empty key as the authentication still works |
if (Length(Key) = 0) and (not (ctNull in Context.CipherType)) and |
(not (FMode = cmGCM)) then |
raise EDECCipherException.CreateRes(@sNoKeyMaterialGiven); |
if IVector <> nil then |
Init(Key[0], Length(Key), IVector[0], Length(IVector), IFiller) |
else |
Init(Key[0], Length(Key), NullStr, 0, IFiller); |
end; |
procedure TDECCipher.Init(const Key : RawByteString; |
const IVector : RawByteString = ''; |
IFiller : Byte = $FF); |
begin |
// GCM allows empty key as the authentication still works |
if (Length(Key) = 0) and (not (ctNull in Context.CipherType)) and |
(not (FMode = cmGCM)) then |
raise EDECCipherException.CreateRes(@sNoKeyMaterialGiven); |
if Length(IVector) > 0 then |
{$IFDEF HAVE_STR_LIKE_ARRAY} |
Init(Key[Low(Key)], Length(Key) * SizeOf(Key[Low(Key)]), |
IVector[Low(IVector)], Length(IVector) * SizeOf(IVector[Low(IVector)]), IFiller) |
{$ELSE} |
Init(Key[1], Length(Key) * SizeOf(Key[1]), |
IVector[1], Length(IVector) * SizeOf(IVector[1]), IFiller) |
{$ENDIF} |
else |
{$IFDEF HAVE_STR_LIKE_ARRAY} |
Init(Key[Low(Key)], Length(Key) * SizeOf(Key[Low(Key)]), NullStr, 0, IFiller); |
{$ELSE} |
Init(Key[1], Length(Key) * SizeOf(Key[1]), NullStr, 0, IFiller); |
{$ENDIF} |
end; |
{$IFDEF ANSISTRINGSUPPORTED} |
procedure TDECCipher.Init(const Key, IVector: AnsiString; IFiller: Byte); |
begin |
if (Length(Key) = 0) and (not (ctNull in Context.CipherType)) then |
raise EDECCipherException.Create(sNoKeyMaterialGiven); |
if Length(IVector) > 0 then |
{$IF CompilerVersion >= 24.0} |
Init(Key[Low(Key)], Length(Key) * SizeOf(Key[Low(Key)]), |
IVector[Low(IVector)], Length(IVector) * SizeOf(Low(IVector)), IFiller) |
{$ELSE} |
Init(Key[1], Length(Key) * SizeOf(Key[Low(Key)]), |
IVector[IVector[1]], Length(IVector) * SizeOf(IVector[1]), IFiller) |
{$IFEND} |
else |
{$IF CompilerVersion >= 24.0} |
Init(Key[Low(Key)], Length(Key) * SizeOf(Key[Low(Key)]), NullStr, 0, IFiller); |
{$ELSE} |
Init(Key[1], Length(Key) * SizeOf(Key[1]), NullStr, 0, IFiller); |
{$IFEND} |
end; |
{$ENDIF} |
{$IFNDEF NEXTGEN} |
procedure TDECCipher.Init(const Key, IVector: WideString; IFiller: Byte); |
begin |
// GCM allows empty key as the authentication still works |
if (Length(Key) = 0) and (not (ctNull in Context.CipherType)) and |
(not (FMode = cmGCM)) then |
raise EDECCipherException.CreateRes(@sNoKeyMaterialGiven); |
if Length(IVector) > 0 then |
{$IFDEF HAVE_STR_LIKE_ARRAY} |
Init(Key[Low(Key)], Length(Key) * SizeOf(Key[Low(Key)]), |
IVector[Low(IVector)], Length(IVector) * SizeOf(IVector[Low(IVector)]), IFiller) |
{$ELSE} |
Init(Key[1], Length(Key) * SizeOf(Key[1]), |
IVector[1], Length(IVector) * SizeOf(IVector[1]), IFiller) |
{$ENDIF} |
else |
{$IFDEF HAVE_STR_LIKE_ARRAY} |
Init(Key[Low(Key)], Length(Key) * SizeOf(Key[Low(Key)]), NullStr, 0, IFiller); |
{$ELSE} |
Init(Key[1], Length(Key) * SizeOf(Key[1]), NullStr, 0, IFiller); |
{$ENDIF} |
end; |
{$ENDIF} |
function TDECCipher.IsAuthenticated: Boolean; |
begin |
Result := IsAuthenticatedBlockMode(FMode); |
end; |
procedure TDECCipher.Done; |
begin |
if FState <> csDone then |
begin |
FState := csDone; |
FBufferIndex := 0; |
DoEncode(FFeedback, FBuffer, FBufferSize); |
Move(FInitializationVector^, FFeedback^, FBufferSize); |
if FAdditionalBufferBackup <> nil then |
Move(FAdditionalBufferBackup^, FAdditionalBuffer^, FAdditionalBufferSize); |
end; |
end; |
procedure TDECCipher.SecureErase; |
begin |
ProtectBuffer(FData[0], FDataSize); |
end; |
function TDECCipher.EncodeRawByteString(const Source: RawByteString; Format: TDECFormatClass): RawByteString; |
var |
b : TBytes; |
begin |
SetLength(b, 0); |
if Length(Source) > 0 then |
begin |
{$IFDEF HAVE_STR_LIKE_ARRAY} |
SetLength(b, Length(Source) * SizeOf(Source[Low(Source)])); |
DoEncode(@Source[low(Source)], @b[0], Length(Source) * SizeOf(Source[low(Source)])); |
{$ELSE} |
SetLength(b, Length(Source) * SizeOf(Source[1])); |
DoEncode(@Source[1], @b[0], Length(Source) * SizeOf(Source[1])); |
{$ENDIF} |
Result := BytesToRawString(ValidFormat(Format).Encode(b)); |
end; |
end; |
function TDECCipher.GetMode: TCipherMode; |
begin |
Result := FMode; |
end; |
function TDECCipher.EncodeBytes(const Source: TBytes; Format: TDECFormatClass = nil): TBytes; |
begin |
SetLength(Result, 0); |
if Length(Source) > 0 then |
begin |
SetLength(Result, Length(Source) * SizeOf(Source[0])); |
DoEncode(@Source[0], @Result[0], Length(Source) * SizeOf(Source[0])); |
Result := ValidFormat(Format).Encode(Result); |
end; |
end; |
function TDECCipher.DecodeRawByteString(const Source: RawByteString; Format: TDECFormatClass): RawByteString; |
var |
b : TBytes; |
begin |
SetLength(Result, 0); |
if Length(Source) > 0 then |
begin |
// Delphi 10.1 Berlin and 10.2 Tokyo will issue a W1057 implicit string |
// conversion warning here because the RawByteString BytesOf function is by |
// mistake in a $IFNDEF NEXTGEN block. See QP report: |
// https://quality.embarcadero.com/browse/RSP-20574 |
// This has been fixed in 10.3.0 Rio |
b := ValidFormat(Format).Decode(BytesOf(Source)); |
{$IFDEF HAVE_STR_LIKE_ARRAY} |
DoDecode(@b[0], @Result[Low(Result)], Length(Result) * SizeOf(Result[Low(Result)])); |
{$ELSE} |
DoDecode(@b[0], @Result[1], Length(Result) * SizeOf(Result[1])); |
{$ENDIF} |
end; |
end; |
function TDECCipher.DecodeBytes(const Source: TBytes; Format: TDECFormatClass): TBytes; |
begin |
SetLength(Result, 0); |
if Length(Source) > 0 then |
begin |
Result := ValidFormat(Format).Decode(Source); |
DoDecode(@Result[0], @Result[0], Length(Result) * SizeOf(Result[0])); |
end; |
end; |
function TDECCipher.CalcMAC(Format: TDECFormatClass): RawByteString; |
begin |
Done; |
if FMode in [cmECBx] then |
raise EDECException.CreateRes(@sInvalidMACMode) |
else |
Result := ValidFormat(Format).Encode(FBuffer^, FBufferSize); |
{ TODO : How to rewrite? EncodeBytes cannot be called directly like that } |
end; |
//function TDECCipher.CalcMACByte(Format: TDECFormatClass): TBytes; |
//begin |
// Done; |
// if FMode in [cmECBx] then |
// raise EDECCipherException.Create(sInvalidMACMode) |
// else |
// begin |
// Result := System.SysUtils.BytesOf(ValidFormat(Format).Encode(FBuffer^, FBufferSize)); |
// end; |
//end; |
{$IFDEF RESTORE_RANGECHECKS}{$R+}{$ENDIF} |
{$IFDEF RESTORE_OVERFLOWCHECKS}{$Q+}{$ENDIF} |
{$IFDEF DELPHIORBCB} |
procedure ModuleUnload(Instance: NativeUInt); |
var // automaticaly deregistration/releasing |
i: Integer; |
Items: TArray<TPair<Int64, TDECCLass>>; |
begin |
// C++Builder calls this function for our own module, but we destroy the ClassList |
// in that case in the finalization section anyway. |
if (Instance <> HInstance) and |
(TDECCipher.ClassList <> nil) and (TDECCipher.ClassList.Count > 0) then |
begin |
Items := TDECCipher.ClassList.ToArray; |
for i := Length(Items) - 1 downto 0 do |
begin |
if FindClassHInstance(Items[i].Value) = HINST(HInstance) then |
TDECCipher.ClassList.Remove(Items[i].Key); |
end; |
end; |
end; |
{$ENDIF DELPHIORBCB} |
initialization |
// Code for packages and dynamic extension of the class registration list |
{$IFDEF DELPHIORBCB} |
AddModuleUnloadProc(ModuleUnload); |
{$ENDIF DELPHIORBCB} |
TDECCipher.ClassList := TDECClassList.Create; |
finalization |
// Ensure no further instances of classes registered in the registraiotn list |
// are possible through the list after this unit has been unloaded by unloding |
// the package this unit is in |
{$IFDEF DELPHIORBCB} |
RemoveModuleUnloadProc(ModuleUnload); |
{$ENDIF DELPHIORBCB} |
TDECCipher.ClassList.Free; |
end. |
/trunk/Decoder5/VCL_DEC/DECCipherFormats.pas |
---|
0,0 → 1,1162 |
{***************************************************************************** |
The DEC team (see file NOTICE.txt) licenses this file |
to you under the Apache License, Version 2.0 (the |
"License"); you may not use this file except in compliance |
with the License. A copy of this licence is found in the root directory |
of this project in the file LICENCE.txt or alternatively 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. |
*****************************************************************************} |
unit DECCipherFormats; |
{$INCLUDE DECOptions.inc} |
interface |
uses |
{$IFDEF FPC} |
SysUtils, Classes, |
{$ELSE} |
System.SysUtils, System.Classes, |
{$ENDIF} |
DECCipherBase, DECCipherModes, |
DECUtil, DECTypes, DECFormatBase, DECCipherInterface; |
type |
/// <summary> |
/// Class type of the cipher base class which adds the additional Calc |
/// variants for additional data types. |
/// </summary> |
TDECFormattedCipherClass = class of TDECFormattedCipher; |
/// <summary> |
/// Class in which the various encode/decode variants provided have been |
/// moved in order to keep the base cipher class small and clean. |
/// </summary> |
TDECFormattedCipher = class(TDECCipherModes, IDECCipher) |
private |
/// <summary> |
/// Encrypts or decrypts the data contained in a given stream |
/// </summary> |
/// <param name="Source"> |
/// Source stream containing the data to encrypt or to decrypt |
/// </param> |
/// <param name="Dest"> |
/// Destination stream, where the encrypted or decrypted data shall be put in |
/// </param> |
/// <param name="DataSize"> |
/// Number of bytes of Source to be encrypted or decrypted |
/// </param> |
/// <param name="CipherProc"> |
/// Callback which either encrypts or decrypts the stream, depending on |
/// which one is being passed |
/// </param> |
/// <param name="OnProgress"> |
/// optional callback for reporting progress of the operation |
/// </param> |
procedure DoEncodeDecodeStream(const Source, Dest: TStream; DataSize: Int64; |
const CipherProc: TDECCipherCodeEvent; |
const OnProgress: TDECProgressEvent); |
/// <summary> |
/// Encrypts or decrypts a file and stores the result in another file |
/// </summary> |
/// <param name="SourceFileName"> |
/// Path and name of the file to encrypt |
/// </param> |
/// <param name="DestFileName"> |
/// Path and name of the file the encrypted data shall be stored in |
/// </param> |
/// <param name="Proc"> |
/// This method does the actual encrypting or decrypting of the data. |
/// Usually the Encode or Decode method is being passed here which is |
/// declared in TDECCipherBase as virtual abstract method and |
/// implemented in the individual cipher class inheriting from this one |
/// </param> |
/// <param name="OnProgress"> |
/// Optional event which can be passed to get information about the |
/// progress of the encryption operation |
/// </param> |
procedure DoEncodeDecodeFile(const SourceFileName, DestFileName: string; |
const Proc: TDECCipherCodeEvent; |
const OnProgress: TDECProgressEvent); |
public |
/// <summary> |
/// Encrypts the contents of a given byte array |
/// </summary> |
/// <param name="Source"> |
/// Byte array with data to be encrypted. When block chaining mode ECBx |
/// is used (not recommended!), the size of the data passed via this |
/// parameter needs to be a multiple of the block size of the algorithm used, |
/// otherwise a EDECCipherException exception will be raised! |
/// </param> |
/// <returns> |
/// Byte array with encrypted data |
/// </returns> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if the length of the data passed as <c>Source</c> |
/// is not a multiple of the algorithm's block size. |
/// </exception> |
function EncodeBytes(const Source: TBytes): TBytes; |
/// <summary> |
/// Decrypts the contents of a given byte array |
/// </summary> |
/// <param name="Source"> |
/// Byte array with data to be decrypted. When block chaining mode ECBx |
/// is used (not recommended!), the size of the data passed via this |
/// parameter needs to be a multiple of the block size of the algorithm used, |
/// otherwise a EDECCipherException exception will be raised! |
/// </param> |
/// <returns> |
/// Byte array with decrypted data |
/// </returns> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if the length of the data passed as <c>Source</c> |
/// is not a multiple of the algorithm's block size. |
/// </exception> |
function DecodeBytes(const Source: TBytes): TBytes; |
/// <summary> |
/// Encrypts the data contained in a given stream |
/// </summary> |
/// <param name="Source"> |
/// Source stream containing the data to encrypt. When block chaining mode ECBx |
/// is used (not recommended!), the size of the data passed via this |
/// parameter needs to be a multiple of the block size of the algorithm used, |
/// otherwise a EDECCipherException exception will be raised! |
/// </param> |
/// <param name="Dest"> |
/// Destination stream, where the encrypted data shall be put in |
/// </param> |
/// <param name="DataSize"> |
/// Number of bytes of Source to be encrypted |
/// </param> |
/// <param name="OnProgress"> |
/// optional callback for reporting progress of the operation |
/// </param> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if the length of the data passed as <c>Source</c> |
/// is not a multiple of the algorithm's block size. |
/// </exception> |
procedure EncodeStream(const Source, Dest: TStream; DataSize: Int64; |
const OnProgress: TDECProgressEvent = nil); |
/// <summary> |
/// Decrypts the data contained in a given stream |
/// </summary> |
/// <param name="Source"> |
/// Source stream containing the data to decrypt. When block chaining mode ECBx |
/// is used (not recommended!), the size of the data passed via this |
/// parameter needs to be a multiple of the block size of the algorithm used, |
/// otherwise a EDECCipherException exception will be raised! |
/// </param> |
/// <param name="Dest"> |
/// Destination stream, where the decrypted data shall be put in |
/// </param> |
/// <param name="DataSize"> |
/// Number of bytes of Source to be decrypted |
/// </param> |
/// <param name="OnProgress"> |
/// optional callback for reporting progress of the operation |
/// </param> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if the length of the data passed as <c>Source</c> |
/// is not a multiple of the algorithm's block size. |
/// </exception> |
procedure DecodeStream(const Source, Dest: TStream; DataSize: Int64; |
const OnProgress: TDECProgressEvent = nil); |
/// <summary> |
/// Reads the contents of one file, encrypts it and stores it in another file |
/// </summary> |
/// <param name="SourceFileName"> |
/// Path and name of the file to encrypt. When block chaining mode ECBx |
/// is used (not recommended!), the size of the data passed via this |
/// parameter needs to be a multiple of the block size of the algorithm |
/// used, otherwise a EDECCipherException exception will be raised! |
/// </param> |
/// <param name="DestFileName"> |
/// Path and name of the file the encrypted data shall be stored in |
/// </param> |
/// <param name="OnProgress"> |
/// Optional event which can be passed to get information about the |
/// progress of the encryption operation |
/// </param> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if the length of the data passed as <c>Source</c> |
/// is not a multiple of the algorithm's block size. |
/// </exception> |
procedure EncodeFile(const SourceFileName, DestFileName: string; |
const OnProgress: TDECProgressEvent = nil); |
/// <summary> |
/// Reads the contents of one file, decrypts it and stores it in another file |
/// </summary> |
/// <param name="SourceFileName"> |
/// Path and name of the file to decrypt. When block chaining mode ECBx |
/// is used (not recommended!), the size of the data passed via this |
/// parameter needs to be a multiple of the block size of the algorithm |
/// used, otherwise a EDECCipherException exception will be raised! |
/// </param> |
/// <param name="DestFileName"> |
/// Path and name of the file the decrypted data shall be stored in |
/// </param> |
/// <param name="OnProgress"> |
/// Optional event which can be passed to get information about the |
/// progress of the decryption operation |
/// </param> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if the length of the data passed as <c>Source</c> |
/// is not a multiple of the algorithm's block size. |
/// </exception> |
procedure DecodeFile(const SourceFileName, DestFileName: string; |
const OnProgress: TDECProgressEvent = nil); |
/// <summary> |
/// Encrypts the contents of the passed unicode string |
/// </summary> |
/// <param name="Source"> |
/// String to encrypt. When block chaining mode ECBx |
/// is used (not recommended!), the size of the data passed via this |
/// parameter needs to be a multiple of the block size of the algorithm |
/// used, otherwise a EDECCipherException exception will be raised! |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Encoded will be the encrypted data, not the |
/// source data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Encrypted string as a byte array |
/// </returns> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if the length of the data passed as <c>Source</c> |
/// is not a multiple of the algorithm's block size. |
/// </exception> |
function EncodeStringToBytes(const Source: string; |
Format: TDECFormatClass = nil): TBytes; overload; |
/// <summary> |
/// Encrypts the contents of the passed RawByteString |
/// </summary> |
/// <param name="Source"> |
/// String to encrypt. When block chaining mode ECBx |
/// is used (not recommended!), the size of the data passed via this |
/// parameter needs to be a multiple of the block size of the algorithm |
/// used, otherwise a EDECCipherException exception will be raised! |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Encoded will be the encrypted data, not the |
/// source data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Encrypted string as a byte array |
/// </returns> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if the length of the data passed as <c>Source</c> |
/// is not a multiple of the algorithm's block size. |
/// </exception> |
function EncodeStringToBytes(const Source: RawByteString; |
Format: TDECFormatClass = nil): TBytes; overload; |
/// <summary> |
/// Encrypts the contents of the passed unicode string |
/// </summary> |
/// <param name="Source"> |
/// String to encrypt. When block chaining mode ECBx |
/// is used (not recommended!), the size of the data passed via this |
/// parameter needs to be a multiple of the block size of the algorithm |
/// used, otherwise a EDECCipherException exception will be raised! |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Encoded will be the encrypted data, not the |
/// source data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Encrypted string |
/// </returns> |
/// <remarks> |
/// The use of this method is only recommended if a formatting is passed |
/// which will result in an 7-bit ASCII compatible string as we cannot |
/// ensure that Unicode string processing will not alter/interpret some |
/// byte combinations in a destructive way, making the encrypted string |
/// un-decryptable. |
/// </remarks> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if the length of the data passed as <c>Source</c> |
/// is not a multiple of the algorithm's block size. |
/// </exception> |
function EncodeStringToString(const Source: string; |
Format: TDECFormatClass = nil): string; overload; |
/// <summary> |
/// Encrypts the contents of the passed unicode string |
/// </summary> |
/// <param name="Source"> |
/// String to encrypt. When block chaining mode ECBx |
/// is used (not recommended!), the size of the data passed via this |
/// parameter needs to be a multiple of the block size of the algorithm |
/// used, otherwise a EDECCipherException exception will be raised! |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Encoded will be the encrypted data, not the |
/// source data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Encrypted string |
/// </returns> |
/// <remarks> |
/// The use of this method is only recommended if a formatting is passed |
/// which will result in an 7-bit ASCII compatible string as we cannot |
/// ensure that string processing will not alter/interpret some |
/// byte combinations in a destructive way, making the encrypted string |
/// un-decryptable. |
/// </remarks> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if the length of the data passed as <c>Source</c> |
/// is not a multiple of the algorithm's block size. |
/// </exception> |
function EncodeStringToString(const Source: RawByteString; |
Format: TDECFormatClass = nil): RawByteString; overload; |
/// <summary> |
/// Decrypts the contents of the passed encrypted unicode string |
/// </summary> |
/// <param name="Source"> |
/// String to decrypt. When block chaining mode ECBx |
/// is used (not recommended!), the size of the data passed via this |
/// parameter needs to be a multiple of the block size of the algorithm |
/// used, otherwise a EDECCipherException exception will be raised! |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Decoded will be the still encrypted data, not the |
/// encrypted data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Decrypted string as a byte array |
/// </returns> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if the length of the data passed as <c>Source</c> |
/// is not a multiple of the algorithm's block size. |
/// </exception> |
function DecodeStringToBytes(const Source: string; |
Format: TDECFormatClass = nil): TBytes; overload; |
/// <summary> |
/// Decrypts the contents of the passed encrypted RawByteString |
/// </summary> |
/// <param name="Source"> |
/// String to decrypt. When block chaining mode ECBx |
/// is used (not recommended!), the size of the data passed via this |
/// parameter needs to be a multiple of the block size of the algorithm |
/// used, otherwise a EDECCipherException exception will be raised! |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Decoded will be the still encrypted data, not the |
/// encrypted data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Decrypted string as a byte array |
/// </returns> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if the length of the data passed as <c>Source</c> |
/// is not a multiple of the algorithm's block size. |
/// </exception> |
function DecodeStringToBytes(const Source: RawByteString; |
Format: TDECFormatClass = nil): TBytes; overload; |
/// <summary> |
/// Decrypts the contents of the passed Unicode string |
/// </summary> |
/// <param name="Source"> |
/// String to decrypt. When block chaining mode ECBx |
/// is used (not recommended!), the size of the data passed via this |
/// parameter needs to be a multiple of the block size of the algorithm |
/// used, otherwise a EDECCipherException exception will be raised! |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Decoded will be the encrypted data, not the |
/// decrypted data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Decrypted string |
/// </returns> |
/// <remarks> |
/// The use of this method is only recommended if a formatting is passed |
/// which uses an 7-bit ASCII compatible string as input so that it |
/// didn't get altered by Unicode string processing in some hafrmful way |
/// </remarks> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if the length of the data passed as <c>Source</c> |
/// is not a multiple of the algorithm's block size. |
/// </exception> |
function DecodeStringToString(const Source: string; |
Format: TDECFormatClass = nil): string; overload; |
/// <summary> |
/// Decrypts the contents of the passed RawByteString string |
/// </summary> |
/// <param name="Source"> |
/// String to decrypt. When block chaining mode ECBx |
/// is used (not recommended!), the size of the data passed via this |
/// parameter needs to be a multiple of the block size of the algorithm |
/// used, otherwise a EDECCipherException exception will be raised! |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Decoded will be the encrypted data, not the |
/// decrypted data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Decrypted string |
/// </returns> |
/// <remarks> |
/// The use of this method is only recommended if a formatting is passed |
/// which uses an 7-bit ASCII compatible string as input so that it |
/// didn't get altered by string processing in some hafrmful way |
/// </remarks> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if the length of the data passed as <c>Source</c> |
/// is not a multiple of the algorithm's block size. |
/// </exception> |
function DecodeStringToString(const Source: RawByteString; |
Format: TDECFormatClass = nil): RawByteString; overload; |
{$IFDEF ANSISTRINGSUPPORTED} |
/// <summary> |
/// Encrypts the contents of the passed Ansistring |
/// </summary> |
/// <param name="Source"> |
/// String to encrypt. When block chaining mode ECBx |
/// is used (not recommended!), the size of the data passed via this |
/// parameter needs to be a multiple of the block size of the algorithm |
/// used, otherwise a EDECCipherException exception will be raised! |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Encoded will be the encrypted data, not the |
/// source data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Encrypted string as a byte array |
/// </returns> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if the length of the data passed as <c>Source</c> |
/// is not a multiple of the algorithm's block size. |
/// </exception> |
function EncodeStringToBytes(const Source: AnsiString; |
Format: TDECFormatClass = nil): TBytes; overload; |
/// <summary> |
/// Encrypts the contents of the passed Ansistring |
/// </summary> |
/// <param name="Source"> |
/// String to encrypt. When block chaining mode ECBx |
/// is used (not recommended!), the size of the data passed via this |
/// parameter needs to be a multiple of the block size of the algorithm |
/// used, otherwise a EDECCipherException exception will be raised! |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Encoded will be the encrypted data, not the |
/// source data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Encrypted string as an AnsiString |
/// </returns> |
/// <remarks> |
/// The use of this method is only recommended if a formatting is passed |
/// which will result in an 7-bit ASCII compatible string as we cannot |
/// ensure that string processing will not alter/interpret some |
/// byte combinations in a destructive way, making the encrypted string |
/// un-decryptable. |
/// </remarks> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if the length of the data passed as <c>Source</c> |
/// is not a multiple of the algorithm's block size. |
/// </exception> |
function EncodeStringToString(const Source: AnsiString; |
Format: TDECFormatClass = nil): AnsiString; overload; |
/// <summary> |
/// Decrypts the contents of the passed encrypted Ansistring |
/// </summary> |
/// <param name="Source"> |
/// String to decrypt. When block chaining mode ECBx |
/// is used (not recommended!), the size of the data passed via this |
/// parameter needs to be a multiple of the block size of the algorithm |
/// used, otherwise a EDECCipherException exception will be raised! |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Decoded will be the still encrypted data, not the |
/// encrypted data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Decrypted string as a byte array |
/// </returns> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if the length of the data passed as <c>Source</c> |
/// is not a multiple of the algorithm's block size. |
/// </exception> |
function DecodeStringToBytes(const Source: AnsiString; |
Format: TDECFormatClass = nil): TBytes; overload; |
/// <summary> |
/// Decrypts the contents of the passed AnsiString string |
/// </summary> |
/// <param name="Source"> |
/// String to decrypt. When block chaining mode ECBx |
/// is used (not recommended!), the size of the data passed via this |
/// parameter needs to be a multiple of the block size of the algorithm |
/// used, otherwise a EDECCipherException exception will be raised! |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Decoded will be the encrypted data, not the |
/// decrypted data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Decrypted string |
/// </returns> |
/// <remarks> |
/// The use of this method is only recommended if a formatting is passed |
/// which uses an 7-bit ASCII compatible string as input so that it |
/// didn't get altered by string processing in some hafrmful way |
/// </remarks> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if the length of the data passed as <c>Source</c> |
/// is not a multiple of the algorithm's block size. |
/// </exception> |
function DecodeStringToString(const Source: AnsiString; |
Format: TDECFormatClass = nil): AnsiString; overload; |
{$ENDIF} |
{$IFNDEF NEXTGEN} |
/// <summary> |
/// Encrypts the contents of the passed Widestring |
/// </summary> |
/// <param name="Source"> |
/// String to encrypt. When block chaining mode ECBx |
/// is used (not recommended!), the size of the data passed via this |
/// parameter needs to be a multiple of the block size of the algorithm |
/// used, otherwise a EDECCipherException exception will be raised! |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Encoded will be the encrypted data, not the |
/// source data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Encrypted string as a byte array |
/// </returns> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if the length of the data passed as <c>Source</c> |
/// is not a multiple of the algorithm's block size. |
/// </exception> |
function EncodeStringToBytes(const Source: WideString; |
Format: TDECFormatClass = nil): TBytes; overload; |
/// <summary> |
/// Encrypts the contents of the passed Widestring |
/// </summary> |
/// <param name="Source"> |
/// String to encrypt. When block chaining mode ECBx |
/// is used (not recommended!), the size of the data passed via this |
/// parameter needs to be a multiple of the block size of the algorithm |
/// used, otherwise a EDECCipherException exception will be raised! |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Encoded will be the encrypted data, not the |
/// source data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Encrypted string as an WideString |
/// </returns> |
/// <remarks> |
/// The use of this method is only recommended if a formatting is passed |
/// which will result in an 7-bit ASCII compatible string as we cannot |
/// ensure that string processing will not alter/interpret some |
/// byte combinations in a destructive way, making the encrypted string |
/// un-decryptable. |
/// </remarks> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if the length of the data passed as <c>Source</c> |
/// is not a multiple of the algorithm's block size. |
/// </exception> |
function EncodeStringToString(const Source: WideString; |
Format: TDECFormatClass = nil): WideString; overload; |
/// <summary> |
/// Decrypts the contents of the passed encrypted Widestring |
/// </summary> |
/// <param name="Source"> |
/// String to decrypt. When block chaining mode ECBx |
/// is used (not recommended!), the size of the data passed via this |
/// parameter needs to be a multiple of the block size of the algorithm |
/// used, otherwise a EDECCipherException exception will be raised! |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Decoded will be the still encrypted data, not the |
/// encrypted data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Decrypted string as a byte array |
/// </returns> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if the length of the data passed as <c>Source</c> |
/// is not a multiple of the algorithm's block size. |
/// </exception> |
function DecodeStringToBytes(const Source: WideString; |
Format: TDECFormatClass = nil): TBytes; overload; |
/// <summary> |
/// Decrypts the contents of the passed WideString string |
/// </summary> |
/// <param name="Source"> |
/// String to decrypt. When block chaining mode ECBx |
/// is used (not recommended!), the size of the data passed via this |
/// parameter needs to be a multiple of the block size of the algorithm |
/// used, otherwise a EDECCipherException exception will be raised! |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Decoded will be the encrypted data, not the |
/// decrypted data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Decrypted string |
/// </returns> |
/// <remarks> |
/// The use of this method is only recommended if a formatting is passed |
/// which uses an 7-bit ASCII compatible string as input so that it |
/// didn't get altered by string processing in some hafrmful way |
/// </remarks> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if the length of the data passed as <c>Source</c> |
/// is not a multiple of the algorithm's block size. |
/// </exception> |
function DecodeStringToString(const Source: WideString; |
Format: TDECFormatClass = nil): WideString; overload; |
{$ENDIF} |
end; |
implementation |
uses |
DECBaseClass; |
function TDECFormattedCipher.EncodeBytes(const Source: TBytes): TBytes; |
begin |
SetLength(Result, Length(Source)); |
if Length(Result) > 0 then |
Encode(Source[0], Result[0], Length(Source)) |
else |
if (FMode = cmGCM) then |
EncodeGCM(@Source, @Result, 0); |
end; |
function TDECFormattedCipher.DecodeBytes(const Source: TBytes): TBytes; |
begin |
Result := Source; |
if Length(Result) > 0 then |
begin |
if (FMode = cmGCM) then |
SetLength(Result, Length(Source)); |
Decode(Source[0], Result[0], Length(Source)); |
end |
else |
if (FMode = cmGCM) then |
DecodeGCM(@Source, @Result, 0); |
end; |
procedure TDECFormattedCipher.DoEncodeDecodeStream(const Source, Dest: TStream; |
DataSize: Int64; |
const CipherProc: TDECCipherCodeEvent; |
const OnProgress: TDECProgressEvent); |
var |
Buffer: TBytes; |
outBuffer: TBytes; |
BufferSize, Bytes: Integer; |
Max, StartPos, Pos: Int64; |
begin |
Pos := Source.Position; |
if DataSize < 0 then |
DataSize := Source.Size - Pos; |
Max := Pos + DataSize; |
StartPos := Pos; |
if DataSize > 0 then |
begin |
try |
if Assigned(OnProgress) then |
OnProgress(Max, 0, Started); |
if StreamBufferSize <= 0 then |
StreamBufferSize := 8192; |
BufferSize := StreamBufferSize mod Context.BlockSize; |
if BufferSize = 0 then |
BufferSize := StreamBufferSize |
else |
BufferSize := StreamBufferSize + Context.BlockSize - BufferSize; |
if DataSize > BufferSize then |
SetLength(Buffer, BufferSize) |
else |
SetLength(Buffer, DataSize); |
outBuffer := Buffer; |
if (FMode = cmGCM) then |
SetLength(outBuffer, Length(Buffer)); |
while DataSize > 0 do |
begin |
Bytes := BufferSize; |
if Bytes > DataSize then |
Bytes := DataSize; |
Source.ReadBuffer(Buffer[0], Bytes); |
// The real encryption or decryption routine |
CipherProc(Buffer[0], outBuffer[0], Bytes); |
Dest.WriteBuffer(outBuffer[0], Bytes); |
Dec(DataSize, Bytes); |
Inc(Pos, Bytes); |
if Assigned(OnProgress) then |
OnProgress(Max, Pos - StartPos, Processing); |
end; |
finally |
ProtectBytes(Buffer); |
if (FMode = cmGCM) then |
ProtectBytes(outBuffer); |
if Assigned(OnProgress) then |
OnProgress(Max, Max, Finished); |
end; |
end |
else |
if (FMode = cmGCM) then |
begin |
Buffer := nil; |
CipherProc(Buffer, Buffer, 0); |
end; |
end; |
procedure TDECFormattedCipher.EncodeStream(const Source, Dest: TStream; DataSize: Int64; |
const OnProgress: TDECProgressEvent); |
begin |
DoEncodeDecodeStream(Source, Dest, DataSize, |
Encode, OnProgress); |
end; |
procedure TDECFormattedCipher.DecodeStream(const Source, Dest: TStream; DataSize: Int64; |
const OnProgress: TDECProgressEvent); |
begin |
DoEncodeDecodeStream(Source, Dest, DataSize, |
Decode, OnProgress); |
end; |
procedure TDECFormattedCipher.DoEncodeDecodeFile(const SourceFileName, DestFileName: string; |
const Proc: TDECCipherCodeEvent; |
const OnProgress: TDECProgressEvent); |
var |
S, D: TStream; |
begin |
Assert(SourceFileName <> DestFileName, 'Source and Dest file name may not be equal'); |
S := TFileStream.Create(SourceFileName, fmOpenRead or fmShareDenyNone); |
try |
D := TFileStream.Create(DestFileName, fmCreate); |
try |
DoEncodeDecodeStream(S, D, S.Size, Proc, OnProgress); |
finally |
D.Free; |
end; |
finally |
S.Free; |
end; |
end; |
procedure TDECFormattedCipher.EncodeFile(const SourceFileName, DestFileName: string; |
const OnProgress: TDECProgressEvent); |
begin |
DoEncodeDecodeFile(SourceFileName, DestFileName, Encode, OnProgress); |
end; |
procedure TDECFormattedCipher.DecodeFile(const SourceFileName, DestFileName: string; |
const OnProgress: TDECProgressEvent); |
begin |
DoEncodeDecodeFile(SourceFileName, DestFileName, Decode, OnProgress); |
end; |
function TDECFormattedCipher.EncodeStringToBytes(const Source: string; |
Format: TDECFormatClass = nil): TBytes; |
var |
Len: Integer; |
begin |
if Length(Source) > 0 then |
begin |
{$IFDEF HAVE_STR_LIKE_ARRAY} |
Len := Length(Source) * SizeOf(Source[low(Source)]); |
SetLength(Result, Len); |
Encode(Source[low(Source)], Result[0], Len); |
{$ELSE} |
Len := Length(Source) * SizeOf(Source[1]); |
SetLength(Result, Len); |
Encode(Source[1], Result[0], Len); |
{$ENDIF} |
Result := ValidFormat(Format).Encode(Result); |
end |
else |
SetLength(Result, 0); |
end; |
function TDECFormattedCipher.EncodeStringToBytes(const Source: RawByteString; Format: TDECFormatClass): TBytes; |
var |
Len: Integer; |
begin |
if Length(Source) > 0 then |
begin |
{$IFDEF HAVE_STR_LIKE_ARRAY} |
Len := Length(Source) * SizeOf(Source[low(Source)]); |
SetLength(Result, Len); |
Encode(Source[low(Source)], Result[0], Len); |
{$ELSE} |
Len := Length(Source) * SizeOf(Source[1]); |
SetLength(Result, Len); |
Encode(Source[1], Result[0], Len); |
{$ENDIF} |
Result := ValidFormat(Format).Encode(Result); |
end |
else |
SetLength(Result, 0); |
end; |
function TDECFormattedCipher.DecodeStringToBytes(const Source: string; Format: TDECFormatClass): TBytes; |
var |
Len: Integer; |
Src: TBytes; |
begin |
if Length(Source) > 0 then |
begin |
Src := ValidFormat(Format).Decode(BytesOf(Source)); |
Len := Length(Src); |
Result := Src; |
Decode(Result[0], Result[0], Len); |
end |
else |
SetLength(Result, 0); |
end; |
function TDECFormattedCipher.DecodeStringToBytes(const Source: RawByteString; Format: TDECFormatClass): TBytes; |
var |
Len: Integer; |
Src: TBytes; |
begin |
if Length(Source) > 0 then |
begin |
Src := ValidFormat(Format).Decode(BytesOf(Source)); |
Len := Length(Src); |
Result := Src; |
Decode(Result[0], Result[0], Len); |
end |
else |
SetLength(Result, 0); |
end; |
{$IFDEF ANSISTRINGSUPPORTED} |
function TDECFormattedCipher.EncodeStringToBytes(const Source: AnsiString; Format: TDECFormatClass): TBytes; |
var |
Len: Integer; |
begin |
if Length(Source) > 0 then |
begin |
Len := Length(Source) * SizeOf(Source[1]); |
SetLength(Result, Len); |
Encode(Source[1], Result[0], Len); |
Result := ValidFormat(Format).Encode(Result); |
end |
else |
SetLength(Result, 0); |
end; |
{$ENDIF} |
{$IFDEF ANSISTRINGSUPPORTED} |
function TDECFormattedCipher.DecodeStringToBytes(const Source: AnsiString; Format: TDECFormatClass): TBytes; |
var |
Len: Integer; |
Src: TBytes; |
begin |
if Length(Source) > 0 then |
begin |
Src := ValidFormat(Format).Decode(SysUtils.BytesOf(Source)); |
Len := Length(Src); |
SetLength(Result, Len); |
Decode(Src[0], Result[0], Len); |
end |
else |
SetLength(Result, 0); |
end; |
{$ENDIF} |
{$IFNDEF NEXTGEN} |
function TDECFormattedCipher.EncodeStringToBytes(const Source: WideString; Format: TDECFormatClass): TBytes; |
var |
Len: Integer; |
begin |
if Length(Source) > 0 then |
begin |
Len := Length(Source) * SizeOf(Source[1]); |
SetLength(Result, Len); |
Encode(Source[1], Result[0], Len); |
Result := ValidFormat(Format).Encode(Result); |
end |
else |
SetLength(Result, 0); |
end; |
function TDECFormattedCipher.EncodeStringToString(const Source: WideString; |
Format: TDECFormatClass): WideString; |
begin |
result := WideString(EncodeStringToString(string(Source), Format)); |
end; |
{$ENDIF} |
{$IFDEF ANSISTRINGSUPPORTED} |
function TDECFormattedCipher.EncodeStringToString(const Source: AnsiString; |
Format: TDECFormatClass): AnsiString; |
var |
Len : Integer; |
EncryptedBuffer : TBytes; |
Temp : TBytes; |
begin |
if Length(Source) > 0 then |
begin |
Len := Length(Source) * SizeOf(Source[1]); |
SetLength(EncryptedBuffer, Len); |
Encode(Source[1], EncryptedBuffer[0], Len); |
Temp := ValidFormat(Format).Encode(EncryptedBuffer); |
SetLength(Result, length(Temp)); |
Move(Temp[0], Result[1], length(Temp)); |
end |
else |
SetLength(Result, 0); |
end; |
{$ENDIF} |
function TDECFormattedCipher.EncodeStringToString(const Source: string; |
Format: TDECFormatClass): string; |
var |
SourceSize : Integer; |
EncryptedBuffer : TBytes; |
begin |
if Length(Source) > 0 then |
begin |
{$IFDEF HAVE_STR_LIKE_ARRAY} |
SourceSize := Length(Source) * SizeOf(Source[low(Source)]); |
SetLength(EncryptedBuffer, SourceSize); |
Encode(Source[low(Source)], EncryptedBuffer[0], SourceSize); |
{$ELSE} |
SourceSize := Length(Source) * SizeOf(Source[1]); |
SetLength(EncryptedBuffer, SourceSize); |
Encode(Source[1], EncryptedBuffer[0], SourceSize); |
{$ENDIF} |
Result := StringOf(ValidFormat(Format).Encode(EncryptedBuffer)); |
end |
else |
Result := ''; |
end; |
function TDECFormattedCipher.EncodeStringToString(const Source: RawByteString; |
Format: TDECFormatClass): RawByteString; |
var |
SourceSize : Integer; |
EncryptedBuffer : TBytes; |
Temp : TBytes; |
begin |
if Length(Source) > 0 then |
begin |
{$IFDEF HAVE_STR_LIKE_ARRAY} |
SourceSize := Length(Source) * SizeOf(Source[low(Source)]); |
SetLength(EncryptedBuffer, SourceSize); |
Encode(Source[low(Source)], EncryptedBuffer[0], SourceSize); |
{$ELSE} |
SourceSize := Length(Source) * SizeOf(Source[1]); |
SetLength(EncryptedBuffer, SourceSize); |
Encode(Source[1], EncryptedBuffer[0], SourceSize); |
{$ENDIF} |
Temp := ValidFormat(Format).Encode(EncryptedBuffer); |
SetLength(Result, length(Temp)); |
{$IFDEF HAVE_STR_LIKE_ARRAY} |
Move(Temp[0], Result[low(Result)], length(Temp)) |
{$ELSE} |
Move(Temp[0], Result[1], length(Temp)) |
{$ENDIF} |
end |
else |
Result := ''; |
end; |
{$IFNDEF NEXTGEN} |
function TDECFormattedCipher.DecodeStringToBytes(const Source: WideString; Format: TDECFormatClass): TBytes; |
var |
Len: Integer; |
Src: TBytes; |
begin |
if Length(Source) > 0 then |
begin |
Src := ValidFormat(Format).Decode(BytesOf(Source)); |
Len := Length(Src); |
SetLength(Result, Len); |
Decode(Src[0], Result[0], Len); |
end |
else |
SetLength(Result, 0); |
end; |
{$ENDIF} |
{$IFDEF ANSISTRINGSUPPORTED} |
function TDECFormattedCipher.DecodeStringToString(const Source: AnsiString; |
Format: TDECFormatClass): AnsiString; |
var |
Len : Integer; |
Src : TBytes; |
Tmp : TBytes; |
begin |
if Length(Source) > 0 then |
begin |
Src := ValidFormat(Format).Decode(SysUtils.BytesOf(Source)); |
Len := Length(Src); |
SetLength(Tmp, Len); |
Decode(Src[0], Tmp[0], Len); |
SetLength(Result, length(Tmp)); |
{$IFDEF HAVE_STR_LIKE_ARRAY} |
Move(Tmp[0], Result[low(Result)], length(Tmp)) |
{$ELSE} |
Move(Tmp[0], Result[1], length(Tmp)) |
{$ENDIF} |
end |
else |
SetLength(Result, 0); |
end; |
{$ENDIF} |
{$IFNDEF NEXTGEN} |
function TDECFormattedCipher.DecodeStringToString(const Source: WideString; |
Format: TDECFormatClass): WideString; |
begin |
Result := WideString(DecodeStringToString(string(Source), Format)); |
end; |
{$ENDIF} |
function TDECFormattedCipher.DecodeStringToString(const Source: RawByteString; |
Format: TDECFormatClass): RawByteString; |
var |
Len : Integer; |
Src : TBytes; |
Tmp : TBytes; |
begin |
if Length(Source) > 0 then |
begin |
Src := ValidFormat(Format).Decode(BytesOf(Source)); |
Len := Length(Src); |
SetLength(Tmp, Len); |
Decode(Src[0], Tmp[0], Len); |
SetLength(Result, length(Tmp)); |
{$IFDEF HAVE_STR_LIKE_ARRAY} |
Move(Tmp[0], Result[low(Result)], length(Tmp)) |
{$ELSE} |
Move(Tmp[0], Result[1], length(Tmp)) |
{$ENDIF} |
end |
else |
SetLength(Result, 0); |
end; |
function TDECFormattedCipher.DecodeStringToString(const Source: string; |
Format: TDECFormatClass): string; |
var |
Len : Integer; |
Src : TBytes; |
Tmp : TBytes; |
begin |
if Length(Source) > 0 then |
begin |
Src := ValidFormat(Format).Decode(BytesOf(Source)); |
Len := Length(Src); |
SetLength(Tmp, Len); |
Decode(Src[0], Tmp[0], Len); |
Result := WideStringOf(Tmp); |
end |
else |
SetLength(Result, 0); |
end; |
end. |
/trunk/Decoder5/VCL_DEC/DECCipherInterface.pas |
---|
0,0 → 1,762 |
{***************************************************************************** |
The DEC team (see file NOTICE.txt) licenses this file |
to you under the Apache License, Version 2.0 (the |
"License"); you may not use this file except in compliance |
with the License. A copy of this licence is found in the root directory |
of this project in the file LICENCE.txt or alternatively 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. |
*****************************************************************************} |
unit DECCipherInterface; |
interface |
uses |
{$IFDEF FPC} |
SysUtils, Classes, |
{$ELSE} |
System.SysUtils, System.Classes, |
{$ENDIF} |
DECTypes, DECCipherBase, DECFormatBase; |
type |
/// <summary> |
/// Common interface for all ciphers. Some ciphers may have additional |
/// methods/properties though! |
/// </summary> |
IDECCipher = Interface |
['{73D70F28-95C0-4715-8C27-1AE6FBEE9698}'] |
/// <summary> |
/// Encrypts the contents of a given byte array |
/// </summary> |
/// <param name="Source"> |
/// Byte array with data to be encrypted |
/// </param> |
/// <returns> |
/// Byte array with encrypted data |
/// </returns> |
function EncodeBytes(const Source: TBytes): TBytes; |
/// <summary> |
/// Decrypts the contents of a given byte array |
/// </summary> |
/// <param name="Source"> |
/// Byte array with data to be decrypted |
/// </param> |
/// <returns> |
/// Byte array with decrypted data |
/// </returns> |
function DecodeBytes(const Source: TBytes): TBytes; |
/// <summary> |
/// Encrypts the data contained in a given stream |
/// </summary> |
/// <param name="Source"> |
/// Source stream containing the data to encrypt |
/// </param> |
/// <param name="Dest"> |
/// Destination stream, where the encrypted data shall be put in |
/// </param> |
/// <param name="DataSize"> |
/// Number of bytes of Source to be encrypted |
/// </param> |
/// <param name="OnProgress"> |
/// optional callback for reporting progress of the operation |
/// </param> |
procedure EncodeStream(const Source, Dest: TStream; DataSize: Int64; |
const OnProgress: TDECProgressEvent = nil); |
/// <summary> |
/// Decrypts the data contained in a given stream |
/// </summary> |
/// <param name="Source"> |
/// Source stream containing the data to decrypt |
/// </param> |
/// <param name="Dest"> |
/// Destination stream, where the decrypted data shall be put in |
/// </param> |
/// <param name="DataSize"> |
/// Number of bytes of Source to be decrypted |
/// </param> |
/// <param name="OnProgress"> |
/// optional callback for reporting progress of the operation |
/// </param> |
procedure DecodeStream(const Source, Dest: TStream; DataSize: Int64; |
const OnProgress: TDECProgressEvent = nil); |
/// <summary> |
/// Reads the contents of one file, encrypts it and stores it in another file |
/// </summary> |
/// <param name="SourceFileName"> |
/// Path and name of the file to encrypt |
/// </param> |
/// <param name="DestFileName"> |
/// Path and name of the file the encrypted data shall be stored in |
/// </param> |
/// <param name="OnProgress"> |
/// Optional event which can be passed to get information about the |
/// progress of the encryption operation |
/// </param> |
procedure EncodeFile(const SourceFileName, DestFileName: string; |
const OnProgress: TDECProgressEvent = nil); |
/// <summary> |
/// Reads the contents of one file, decrypts it and stores it in another file |
/// </summary> |
/// <param name="SourceFileName"> |
/// Path and name of the file to decrypt |
/// </param> |
/// <param name="DestFileName"> |
/// Path and name of the file the decrypted data shall be stored in |
/// </param> |
/// <param name="OnProgress"> |
/// Optional event which can be passed to get information about the |
/// progress of the decryption operation |
/// </param> |
procedure DecodeFile(const SourceFileName, DestFileName: string; |
const OnProgress: TDECProgressEvent = nil); |
/// <summary> |
/// Encrypts the contents of the passed unicode string |
/// </summary> |
/// <param name="Source"> |
/// String to encrypt |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Encoded will be the encrypted data, not the |
/// source data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Encrypted string as a byte array |
/// </returns> |
function EncodeStringToBytes(const Source: string; Format: TDECFormatClass = nil): TBytes; overload; |
/// <summary> |
/// Encrypts the contents of the passed RawByteString |
/// </summary> |
/// <param name="Source"> |
/// String to encrypt |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Encoded will be the encrypted data, not the |
/// source data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Encrypted string as a byte array |
/// </returns> |
function EncodeStringToBytes(const Source: RawByteString; Format: TDECFormatClass = nil): TBytes; overload; |
/// <summary> |
/// Encrypts the contents of the passed unicode string |
/// </summary> |
/// <param name="Source"> |
/// String to encrypt |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Encoded will be the encrypted data, not the |
/// source data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Encrypted string |
/// </returns> |
/// <remarks> |
/// The use of this method is only recommended if a formatting is passed |
/// which will result in an 7-bit ASCII compatible string as we cannot |
/// ensure that Unicode string processing will not alter/interpret some |
/// byte combinations in a destructive way, making the encrypted string |
/// un-decryptable. |
/// </remarks> |
function EncodeStringToString(const Source: string; Format: TDECFormatClass = nil): string; overload; |
/// <summary> |
/// Encrypts the contents of the passed unicode string |
/// </summary> |
/// <param name="Source"> |
/// String to encrypt |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Encoded will be the encrypted data, not the |
/// source data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Encrypted string |
/// </returns> |
/// <remarks> |
/// The use of this method is only recommended if a formatting is passed |
/// which will result in an 7-bit ASCII compatible string as we cannot |
/// ensure that string processing will not alter/interpret some |
/// byte combinations in a destructive way, making the encrypted string |
/// un-decryptable. |
/// </remarks> |
function EncodeStringToString(const Source: RawByteString; Format: TDECFormatClass = nil): RawByteString; overload; |
/// <summary> |
/// Decrypts the contents of the passed encrypted unicode string |
/// </summary> |
/// <param name="Source"> |
/// String to decrypt |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Decoded will be the still encrypted data, not the |
/// encrypted data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Decrypted string as a byte array |
/// </returns> |
function DecodeStringToBytes(const Source: string; Format: TDECFormatClass = nil): TBytes; overload; |
/// <summary> |
/// Decrypts the contents of the passed encrypted RawByteString |
/// </summary> |
/// <param name="Source"> |
/// String to decrypt |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Decoded will be the still encrypted data, not the |
/// encrypted data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Decrypted string as a byte array |
/// </returns> |
function DecodeStringToBytes(const Source: RawByteString; Format: TDECFormatClass = nil): TBytes; overload; |
/// <summary> |
/// Decrypts the contents of the passed Unicode string |
/// </summary> |
/// <param name="Source"> |
/// String to decrypt |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Decoded will be the encrypted data, not the |
/// decrypted data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Decrypted string |
/// </returns> |
/// <remarks> |
/// The use of this method is only recommended if a formatting is passed |
/// which uses an 7-bit ASCII compatible string as input so that it |
/// didn't get altered by Unicode string processing in some hafrmful way |
/// </remarks> |
function DecodeStringToString(const Source: string; Format: TDECFormatClass = nil): string; overload; |
/// <summary> |
/// Decrypts the contents of the passed RawByteString string |
/// </summary> |
/// <param name="Source"> |
/// String to decrypt |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Decoded will be the encrypted data, not the |
/// decrypted data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Decrypted string |
/// </returns> |
/// <remarks> |
/// The use of this method is only recommended if a formatting is passed |
/// which uses an 7-bit ASCII compatible string as input so that it |
/// didn't get altered by string processing in some hafrmful way |
/// </remarks> |
function DecodeStringToString(const Source: RawByteString; Format: TDECFormatClass = nil): RawByteString; overload; |
{$IFDEF ANSISTRINGSUPPORTED} |
/// <summary> |
/// Encrypts the contents of the passed Ansistring |
/// </summary> |
/// <param name="Source"> |
/// String to encrypt |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Encoded will be the encrypted data, not the |
/// source data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Encrypted string as a byte array |
/// </returns> |
function EncodeStringToBytes(const Source: AnsiString; Format: TDECFormatClass = nil): TBytes; overload; |
/// <summary> |
/// Encrypts the contents of the passed Ansistring |
/// </summary> |
/// <param name="Source"> |
/// String to encrypt |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Encoded will be the encrypted data, not the |
/// source data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Encrypted string as an AnsiString |
/// </returns> |
/// <remarks> |
/// The use of this method is only recommended if a formatting is passed |
/// which will result in an 7-bit ASCII compatible string as we cannot |
/// ensure that string processing will not alter/interpret some |
/// byte combinations in a destructive way, making the encrypted string |
/// un-decryptable. |
/// </remarks> |
function EncodeStringToString(const Source: AnsiString; Format: TDECFormatClass = nil): AnsiString; overload; |
/// <summary> |
/// Decrypts the contents of the passed encrypted Ansistring |
/// </summary> |
/// <param name="Source"> |
/// String to decrypt |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Decoded will be the still encrypted data, not the |
/// encrypted data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Decrypted string as a byte array |
/// </returns> |
function DecodeStringToBytes(const Source: AnsiString; Format: TDECFormatClass = nil): TBytes; overload; |
/// <summary> |
/// Decrypts the contents of the passed AnsiString string |
/// </summary> |
/// <param name="Source"> |
/// String to decrypt |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Decoded will be the encrypted data, not the |
/// decrypted data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Decrypted string |
/// </returns> |
/// <remarks> |
/// The use of this method is only recommended if a formatting is passed |
/// which uses an 7-bit ASCII compatible string as input so that it |
/// didn't get altered by string processing in some hafrmful way |
/// </remarks> |
function DecodeStringToString(const Source: AnsiString; Format: TDECFormatClass = nil): AnsiString; overload; |
{$ENDIF} |
{$IFNDEF NEXTGEN} |
/// <summary> |
/// Encrypts the contents of the passed Widestring |
/// </summary> |
/// <param name="Source"> |
/// String to encrypt |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Encoded will be the encrypted data, not the |
/// source data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Encrypted string as a byte array |
/// </returns> |
function EncodeStringToBytes(const Source: WideString; Format: TDECFormatClass = nil): TBytes; overload; |
/// <summary> |
/// Encrypts the contents of the passed Widestring |
/// </summary> |
/// <param name="Source"> |
/// String to encrypt |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Encoded will be the encrypted data, not the |
/// source data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Encrypted string as an WideString |
/// </returns> |
/// <remarks> |
/// The use of this method is only recommended if a formatting is passed |
/// which will result in an 7-bit ASCII compatible string as we cannot |
/// ensure that string processing will not alter/interpret some |
/// byte combinations in a destructive way, making the encrypted string |
/// un-decryptable. |
/// </remarks> |
function EncodeStringToString(const Source: WideString; Format: TDECFormatClass = nil): WideString; overload; |
/// <summary> |
/// Decrypts the contents of the passed encrypted Widestring |
/// </summary> |
/// <param name="Source"> |
/// String to decrypt |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Decoded will be the still encrypted data, not the |
/// encrypted data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Decrypted string as a byte array |
/// </returns> |
function DecodeStringToBytes(const Source: WideString; Format: TDECFormatClass = nil): TBytes; overload; |
/// <summary> |
/// Decrypts the contents of the passed WideString string |
/// </summary> |
/// <param name="Source"> |
/// String to decrypt |
/// </param> |
/// <param name="Format"> |
/// Optional parameter. One can pass a class reference of one of the |
/// concrete data formatting classes here which will be internally used |
/// to convert the data. Decoded will be the encrypted data, not the |
/// decrypted data. Formattings can be used to convert data into a format |
/// suitable for the transport medium the data shall be transported with. |
/// </param> |
/// <returns> |
/// Decrypted string |
/// </returns> |
/// <remarks> |
/// The use of this method is only recommended if a formatting is passed |
/// which uses an 7-bit ASCII compatible string as input so that it |
/// didn't get altered by string processing in some hafrmful way |
/// </remarks> |
function DecodeStringToString(const Source: WideString; Format: TDECFormatClass = nil): WideString; overload; |
{$ENDIF} |
/// <summary> |
/// Initializes the cipher with the necessary encryption/decryption key |
/// </summary> |
/// <param name="Key"> |
/// Encryption/decryption key. Recommended/required key length is dependant |
/// on the concrete algorithm. |
/// </param> |
/// <param name="Size"> |
/// Size of the key in bytes |
/// </param> |
/// <param name="IVector"> |
/// Initialization vector. This contains the values the first block of |
/// data to be processed is linked with. This is being done the same way |
/// as the 2nd block of the data to be processed will be linked with the |
/// first block and so on and this is dependant on the cypher mode set via |
/// Mode property |
/// </param> |
/// <param name="IVectorSize"> |
/// Size of the initialization vector in bytes |
/// </param> |
/// <param name="IFiller"> |
/// optional parameter defining the value with which the last block will |
/// be filled up if the size of the data to be processed cannot be divided |
/// by block size without reminder. Means: if the last block is not |
/// completely filled with data. |
/// </param> |
procedure Init(const Key; Size: Integer; const IVector; IVectorSize: Integer; IFiller: Byte = $FF); overload; |
/// <summary> |
/// Initializes the cipher with the necessary encryption/decryption key |
/// </summary> |
/// <param name="Key"> |
/// Encryption/decryption key. Recommended/required key length is dependant |
/// on the concrete algorithm. |
/// </param> |
/// <param name="IVector"> |
/// Initialization vector. This contains the values the first block of |
/// data to be processed is linked with. This is being done the same way |
/// as the 2nd block of the data to be processed will be linked with the |
/// first block and so on and this is dependant on the cypher mode set via |
/// Mode property |
/// </param> |
/// <param name="IFiller"> |
/// optional parameter defining the value with which the last block will |
/// be filled up if the size of the data to be processed cannot be divided |
/// by block size without reminder. Means: if the last block is not |
/// completely filled with data. |
/// </param> |
procedure Init(const Key: TBytes; const IVector: TBytes; IFiller: Byte = $FF); overload; |
/// <summary> |
/// Initializes the cipher with the necessary encryption/decryption key |
/// </summary> |
/// <param name="Key"> |
/// Encryption/decryption key. Recommended/required key length is dependant |
/// on the concrete algorithm. |
/// </param> |
/// <param name="IVector"> |
/// Initialization vector. This contains the values the first block of |
/// data to be processed is linked with. This is being done the same way |
/// as the 2nd block of the data to be processed will be linked with the |
/// first block and so on and this is dependant on the cypher mode set via |
/// Mode property |
/// </param> |
/// <param name="IFiller"> |
/// optional parameter defining the value with which the last block will |
/// be filled up if the size of the data to be processed cannot be divided |
/// by block size without reminder. Means: if the last block is not |
/// completely filled with data. |
/// </param> |
procedure Init(const Key: RawByteString; const IVector: RawByteString = ''; IFiller: Byte = $FF); overload; |
{$IFDEF ANSISTRINGSUPPORTED} |
/// <summary> |
/// Initializes the cipher with the necessary encryption/decryption key. |
/// Only for use with the classic desktop compilers. |
/// </summary> |
/// <param name="Key"> |
/// Encryption/decryption key. Recommended/required key length is dependant |
/// on the concrete algorithm. |
/// </param> |
/// <param name="IVector"> |
/// Initialization vector. This contains the values the first block of |
/// data to be processed is linked with. This is being done the same way |
/// as the 2nd block of the data to be processed will be linked with the |
/// first block and so on and this is dependant on the cypher mode set via |
/// Mode property |
/// </param> |
/// <param name="IFiller"> |
/// optional parameter defining the value with which the last block will |
/// be filled up if the size of the data to be processed cannot be divided |
/// by block size without reminder. Means: if the last block is not |
/// completely filled with data. |
/// </param> |
procedure Init(const Key: AnsiString; const IVector: AnsiString = ''; IFiller: Byte = $FF); overload; |
{$ENDIF} |
{$IFNDEF NEXTGEN} |
/// <summary> |
/// Initializes the cipher with the necessary encryption/decryption key. |
/// Only for use with the classic desktop compilers. |
/// </summary> |
/// <param name="Key"> |
/// Encryption/decryption key. Recommended/required key length is dependant |
/// on the concrete algorithm. |
/// </param> |
/// <param name="IVector"> |
/// Initialization vector. This contains the values the first block of |
/// data to be processed is linked with. This is being done the same way |
/// as the 2nd block of the data to be processed will be linked with the |
/// first block and so on and this is dependant on the cypher mode set via |
/// Mode property |
/// </param> |
/// <param name="IFiller"> |
/// optional parameter defining the value with which the last block will |
/// be filled up if the size of the data to be processed cannot be divided |
/// by block size without reminder. Means: if the last block is not |
/// completely filled with data. |
/// </param> |
procedure Init(const Key: WideString; const IVector: WideString = ''; IFiller: Byte = $FF); overload; |
{$ENDIF} |
/// <summary> |
/// Returns the currently set cipher block mode, means how blocks are |
/// linked to each other in order to avoid certain attacks. |
/// </summary> |
function GetMode: TCipherMode; |
/// <summary> |
/// Sets the cipher mode, means how each block is being linked with his |
/// predecessor to avoid certain attacks |
/// </summary> |
procedure SetMode(Value: TCipherMode); |
/// <summary> |
/// Mode used for padding data to be encrypted/decrypted. See TCipherMode. |
/// </summary> |
property Mode: TCipherMode |
read GetMode |
write SetMode; |
end; |
/// <summary> |
/// Common interface for all authenticated ciphers like GCM mode. |
/// Some ciphers may have additional methods/properties though! |
/// </summary> |
IDECAuthenticatedCipher = Interface |
['{506A865D-9461-4038-BAB7-A013A9321E8E}'] |
/// <summary> |
/// Returns the data which shall get authenticated when using a cipher |
/// mode which provides authentication support as well. |
/// </summary> |
/// <returns> |
/// Data to be authenticated. Raises an EDECCipherException if this is |
/// called for a cipher mode not supporting authentication. |
/// </returns> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if called for a cipher mode not supporting |
/// authentication. |
/// </exception> |
function GetDataToAuthenticate: TBytes; |
/// <summary> |
/// Returns the length of the resulting authentication value if a |
/// cipher mode which provides authentication support as well is used. |
/// </summary> |
/// <returns> |
/// Length of the authentication result in bit. Raises an |
/// EDECCipherException if this is called for a cipher mode not supporting |
/// authentication. |
/// </returns> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if called for a cipher mode not supporting |
/// authentication. |
/// </exception> |
function GetAuthenticationResultBitLength: Integer; |
/// <summary> |
/// Returns the value calculated over the data to be authenticated if a |
/// cipher mode which provides authentication support as well is used. |
/// The value will be returned even if decryption resulted in a wrong value. |
/// A wrong authentication result on decryption is signalled via exception. |
/// </summary> |
/// <returns> |
/// Result of the authentication. Raises an EDECCipherException if this is |
/// called for a cipher mode not supporting authentication. |
/// </returns> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if called for a cipher mode not supporting |
/// authentication. |
/// </exception> |
function GetCalcAuthenticatonResult: TBytes; |
/// <summary> |
/// Defines the data which shall get authenticated when using a cipher |
/// mode which provides authentication support as well. |
/// </summary> |
/// <param name="Value"> |
/// Data to be authenticated. Raises an EDECCipherException if this is |
/// called for a cipher mode not supporting authentication. |
/// </param> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if called for a cipher mode not supporting |
/// authentication. |
/// </exception> |
procedure SetDataToAuthenticate(const Value: TBytes); |
/// <summary> |
/// Sets the length of the resulting authentication value if a |
/// cipher mode which provides authentication support as well is used. |
/// </summary> |
/// <param name="Value"> |
/// Length of the authentication result in bit. Raises an |
/// EDECCipherException if this is called for a cipher mode not supporting |
/// authentication. |
/// </param> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if called for a cipher mode not supporting |
/// authentication. |
/// </exception> |
procedure SetAuthenticationResultBitLength(const Value: Integer); |
/// <summary> |
/// Returns a list of authentication tag lengs explicitely specified by |
/// the official specification of the standard. |
/// </summary> |
/// <returns> |
/// List of bit lengths. If the cipher mode used is not an authenticated |
/// one, the array will just contain a single value of 0. |
/// </returns> |
function GetStandardAuthenticationTagBitLengths:TStandardBitLengths; |
/// <summary> |
/// Returns the value set as expected authenthication value for ciphers |
/// providing authehtication features as well. Raises an |
/// EDECCipherException if this is called for a cipher mode not supporting |
/// authentication. |
/// </summary> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if called for a cipher mode not supporting |
/// authentication. |
/// </exception> |
function GetExpectedAuthenticationResult: TBytes; |
/// <summary> |
/// Sets the value used as expected authenthication value when decrypting |
/// and a cipher providing authehtication features is being used. Raises an |
/// EDECCipherException if this is called for a cipher mode not supporting |
/// authentication. |
/// </summary> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if called for a cipher mode not supporting |
/// authentication. |
/// </exception> |
procedure SetExpectedAuthenticationResult(const Value: TBytes); |
/// <summary> |
/// Some block chaining modes have the ability to authenticate the message |
/// in addition to encrypting it. This property contains the data which |
/// shall be authenticated in parallel to the encryption. |
/// </summary> |
property DataToAuthenticate : TBytes |
read GetDataToAuthenticate |
write SetDataToAuthenticate; |
/// <summary> |
/// Some block chaining modes have the ability to authenticate the message |
/// in addition to encrypting it. |
/// Represents the length of AuthenticatonValue in bit, values as per |
/// specification are: 128, 120, 112, 104, or 96 bit. For certain applications, |
/// they may be 64 or 32 as well, but the use of these two tag lengths |
/// constrains the length of the input data and the lifetime of the key. |
/// </summary> |
property AuthenticationResultBitLength : Integer |
read GetAuthenticationResultBitLength |
write SetAuthenticationResultBitLength; |
/// <summary> |
/// Some block chaining modes have the ability to authenticate the message |
/// in addition to encrypting it. This property contains the generated |
/// authentication tag. Raises an EDECCipherException if this is |
/// called for a cipher mode not supporting authentication. |
/// </summary> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if called for a cipher mode not supporting |
/// authentication. |
/// </exception> |
property CalculatedAuthenticationResult : TBytes |
read GetCalcAuthenticatonResult; |
/// <summary> |
/// Expected authentication tag value, will be compared with actual value |
/// when decryption finished. Raises an EDECCipherException if this is |
/// called for a cipher mode not supporting authentication. |
/// </summary> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if called for a cipher mode not supporting |
/// authentication. |
/// </exception> |
property ExpectedAuthenticationResult : TBytes |
read GetExpectedAuthenticationResult |
write SetExpectedAuthenticationResult; |
end; |
implementation |
end. |
/trunk/Decoder5/VCL_DEC/DECCipherModes.pas |
---|
0,0 → 1,1279 |
{***************************************************************************** |
The DEC team (see file NOTICE.txt) licenses this file |
to you under the Apache License, Version 2.0 (the |
"License"); you may not use this file except in compliance |
with the License. A copy of this licence is found in the root directory |
of this project in the file LICENCE.txt or alternatively 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. |
*****************************************************************************} |
unit DECCipherModes; |
{$INCLUDE DECOptions.inc} |
interface |
uses |
{$IFDEF FPC} |
SysUtils, |
{$ELSE} |
System.SysUtils, |
{$ENDIF} |
DECTypes, DECCipherBase, DECCipherModesGCM, DECCipherInterface; |
type |
/// <summary> |
/// Class type of the cipher base class implementing all block |
/// concatenation modes. |
/// </summary> |
TDECCipherModesClass = class of TDECCipherModes; |
/// <summary> |
/// Most ciphers are block oriented and thus work on blocks of a fixed size. |
/// In order to not encrypt each block separately without any link to his |
/// predecessor and sucessor, which would make attacks on the encrypted data |
/// easier, each block should be linked with his predecessor (or the |
/// initialization vector). This class implements the various supported |
/// algorithms for linking blocks. |
/// </summary> |
TDECCipherModes = class(TDECCipher, IDECAuthenticatedCipher) |
strict private |
/// <summary> |
/// Returns the data which shall get authenticated when using a cipher |
/// mode which provides authentication support as well. |
/// </summary> |
/// <returns> |
/// Data to be authenticated. Raises an EDECCipherException if this is |
/// called for a cipher mode not supporting authentication. |
/// </returns> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if called for a cipher mode not supporting |
/// authentication. |
/// </exception> |
function GetDataToAuthenticate: TBytes; |
/// <summary> |
/// Returns the length of the resulting authentication value if a |
/// cipher mode which provides authentication support as well is used. |
/// </summary> |
/// <returns> |
/// Length of the authentication result in bit. Raises an |
/// EDECCipherException if this is called for a cipher mode not supporting |
/// authentication. |
/// </returns> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if called for a cipher mode not supporting |
/// authentication. |
/// </exception> |
function GetAuthenticationResultBitLength: Integer; |
/// <summary> |
/// Returns the value calculated over the data to be authenticated if a |
/// cipher mode which provides authentication support as well is used. |
/// The value will be returned even if decryption resulted in a wrong value. |
/// A wrong authentication result on decryption is signalled via exception. |
/// </summary> |
/// <returns> |
/// Result of the authentication. Raises an EDECCipherException if this is |
/// called for a cipher mode not supporting authentication. |
/// </returns> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if called for a cipher mode not supporting |
/// authentication. |
/// </exception> |
function GetCalcAuthenticatonResult: TBytes; |
/// <summary> |
/// Defines the data which shall get authenticated when using a cipher |
/// mode which provides authentication support as well. |
/// </summary> |
/// <param name="Value"> |
/// Data to be authenticated. Raises an EDECCipherException if this is |
/// called for a cipher mode not supporting authentication. |
/// </param> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if called for a cipher mode not supporting |
/// authentication. |
/// </exception> |
procedure SetDataToAuthenticate(const Value: TBytes); |
/// <summary> |
/// Sets the length of the resulting authentication value if a |
/// cipher mode which provides authentication support as well is used. |
/// </summary> |
/// <param name="Value"> |
/// Length of the authentication result in bit. Raises an |
/// EDECCipherException if this is called for a cipher mode not supporting |
/// authentication. |
/// </param> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if called for a cipher mode not supporting |
/// authentication. |
/// </exception> |
procedure SetAuthenticationResultBitLength(const Value: Integer); |
/// <summary> |
/// Returns the value set as expected authenthication value for ciphers |
/// providing authehtication features as well. Raises an |
/// EDECCipherException if this is called for a cipher mode not supporting |
/// authentication. |
/// </summary> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if called for a cipher mode not supporting |
/// authentication. |
/// </exception> |
function GetExpectedAuthenticationResult: TBytes; |
/// <summary> |
/// Sets the value used as expected authenthication value when decrypting |
/// and a cipher providing authehtication features is being used. Raises an |
/// EDECCipherException if this is called for a cipher mode not supporting |
/// authentication. |
/// </summary> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if called for a cipher mode not supporting |
/// authentication. |
/// </exception> |
procedure SetExpectedAuthenticationResult(const Value: TBytes); |
strict protected |
/// <summary> |
/// Implementation of the Galois counter mode. Only created when gmGCM is |
/// set as mode. |
/// </summary> |
FGCM : TGCM; |
/// <summary> |
/// Raises an EDECCipherException exception and provides the correct value |
/// for block size in that message |
/// </summary> |
/// <exception cref="EDECCipherException"> |
/// Exception raised unconditionally. |
/// </exception> |
procedure ReportInvalidMessageLength(Cipher: TDECCipher); |
/// <summary> |
/// Allows to run code after the initialization vector has been initialized |
/// inside the Init call, which is after DoInit has been called. |
/// </summary> |
/// <param name="OriginalInitVector"> |
/// Value of the init vector as originally passed to the Init call without |
/// any initialization steps done to/on it |
/// </param> |
procedure OnAfterInitVectorInitialization(const OriginalInitVector: TBytes); override; |
/// <summary> |
/// Electronic Code Book |
/// Mode cmECBx needs message padding to be a multiple of Cipher.BlockSize |
/// and should be used only in 1-byte Streamciphers. |
/// This one works on Blocks of Cipher.BufferSize bytes, when using a |
/// Blockcipher that's equal to Cipher.BlockSize. |
/// </summary> |
/// <remarks> |
/// This mode should not be used in practice, as it makes the encrypted |
/// message vulnerable to certain attacks without knowing the encryption key |
/// </remarks> |
procedure EncodeECBx(Source, Dest: PUInt8Array; Size: Integer); virtual; |
/// <summary> |
/// 8bit Output Feedback mode, needs no padding |
/// </summary> |
procedure EncodeOFB8(Source, Dest: PUInt8Array; Size: Integer); virtual; |
/// <summary> |
/// 8 bit Cipher Feedback mode, needs no padding and works on 8 bit |
/// Feedback Shift Registers. |
/// </summary> |
procedure EncodeCFB8(Source, Dest: PUInt8Array; Size: Integer); virtual; |
/// <summary> |
/// 8Bit CFS, double Cipher Feedback mode (CFB), needs no padding and |
/// works on 8 bit Feedback Shift Registers. |
/// This one is a proprietary mode developed by Hagen Reddmann. This mode |
/// works as cmCBCx, cmCFBx, cmCFB8 but with double XOR'ing of the |
/// inputstream into Feedback register. |
/// </summary> |
procedure EncodeCFS8(Source, Dest: PUInt8Array; Size: Integer); virtual; |
/// <summary> |
/// Cipher Feedback mode (CFB) on Blocksize of Cipher, needs no padding |
/// This one works on Blocks of Cipher.BufferSize bytes, when using a |
/// Blockcipher that's equal to Cipher.BlockSize. |
/// </summary> |
procedure EncodeCFBx(Source, Dest: PUInt8Array; Size: Integer); virtual; |
/// <summary> |
/// Output Feedback mode on Blocksize of Cipher, needs no padding and |
/// works on 8 bit Feedback Shift Registers. |
/// This one works on Blocks of Cipher.BufferSize bytes, when using a |
/// Blockcipher that's equal to Cipher.BlockSize. |
/// </summary> |
procedure EncodeOFBx(Source, Dest: PUInt8Array; Size: Integer); virtual; |
/// <summary> |
/// double Cipher Feedback mode (CFB) on Blocksize of Cipher, needs no padding. |
/// This one works on Blocks of Cipher.BufferSize bytes, when using a |
/// Blockcipher that's equal to Cipher.BlockSize. |
/// This one is a proprietary mode developed by Hagen Reddmann. This mode |
/// works as cmCBCx, cmCFBx, cmCFB8 but with double XOR'ing of the |
/// inputstream into Feedback register. |
/// </summary> |
procedure EncodeCFSx(Source, Dest: PUInt8Array; Size: Integer); virtual; |
/// <summary> |
/// Cipher Block Chaining, with CFB8 padding of truncated final block |
/// It needs no external padding, because internally the last |
/// truncated block is padded by cmCFS8 or cmCFB8. After padding these Modes |
/// cannot be used to process any more data. If needed to process chunks of |
/// data then each chunk must be aligned to Cipher.BufferSize bytes. |
/// This one works on Blocks of Cipher.BufferSize bytes, when using a |
/// Blockcipher that's equal to Cipher.BlockSize. |
/// </summary> |
procedure EncodeCBCx(Source, Dest: PUInt8Array; Size: Integer); virtual; |
/// <summary> |
/// double CBC, with CFS8 padding of truncated final block |
/// It needs no external padding, because internally the last |
/// truncated block is padded by cmCFS8 or cmCFB8. After padding these Modes |
/// cannot be used to process any more data. If needed to process chunks of |
/// data then each chunk must be aligned to Cipher.BufferSize bytes. |
/// This one works on Blocks of Cipher.BufferSize bytes, when using a |
/// Blockcipher that's equal to Cipher.BlockSize. |
/// This one is a proprietary mode developed by Hagen Reddmann. This mode |
/// works as cmCBCx, cmCFBx, cmCFB8 but with double XOR'ing of the |
/// inputstream into Feedback register. |
/// </summary> |
procedure EncodeCTSx(Source, Dest: PUInt8Array; Size: Integer); virtual; |
/// <summary> |
/// Galois Counter Mode: encryption with addtional optional authentication. |
/// Implemented in its own unit, but needed here to be callable even if |
/// source length is 0. |
/// </summary> |
procedure EncodeGCM(Source, Dest: PUInt8Array; Size: Integer); virtual; |
{$IFDEF DEC3_CMCTS} |
/// <summary> |
/// double CBC, with |
/// for DEC 3.0 compatibility only |
/// This is a proprietary mode developed by Frederik Winkelsdorf. It |
/// replaces the CFS8 padding of the truncated final block with a CFSx padding. |
/// Useful when converting projects that previously used the old DEC v3.0. It |
/// has the same restrictions for external padding and chunk processing as |
/// cmCTSx has. It has a less secure padding of the truncated final block. |
/// (to enable it see DECOptions.inc) |
/// </summary> |
procedure EncodeCTS3(Source, Dest: PUInt8Array; Size: Integer); virtual; |
{$ENDIF} |
/// <summary> |
/// Electronic Code Book |
/// Mode cmECBx needs message padding to be a multiple of Cipher.BlockSize |
/// and should be used only in 1-byte Streamciphers. |
/// This one works on blocks of Cipher.BufferSize bytes, when using a |
/// blockcipher that's equal to Cipher.BlockSize. |
/// </summary> |
procedure DecodeECBx(Source, Dest: PUInt8Array; Size: Integer); virtual; |
/// <summary> |
/// 8 bit Output Feedback mode, needs no padding |
/// </summary> |
procedure DecodeOFB8(Source, Dest: PUInt8Array; Size: Integer); virtual; |
/// <summary> |
/// 8 bit Cipher Feedback mode, needs no padding and works on 8 bit |
/// Feedback Shift Registers. |
/// </summary> |
procedure DecodeCFB8(Source, Dest: PUInt8Array; Size: Integer); virtual; |
/// <summary> |
/// 8 Bit CFS, double Cipher Feedback mode (CFB), needs no padding and |
/// works on 8 bit Feedback Shift Registers. |
/// This one is a proprietary mode developed by Hagen Reddmann. This mode |
/// works as cmCBCx, cmCFBx, cmCFB8 but with double XOR'ing of the |
/// inputstream into Feedback register. |
/// </summary> |
procedure DecodeCFS8(Source, Dest: PUInt8Array; Size: Integer); virtual; |
/// <summary> |
/// Cipher Feedback mode (CFB) on Blocksize of Cipher, needs no padding |
/// This one works on blocks of Cipher.BufferSize bytes, when using a |
/// blockcipher that's equal to Cipher.BlockSize. |
/// </summary> |
procedure DecodeCFBx(Source, Dest: PUInt8Array; Size: Integer); virtual; |
/// <summary> |
/// Output Feedback mode on Blocksize of Cipher, needs no padding and |
/// works on 8 bit Feedback Shift Registers. |
/// This one works on blocks of Cipher.BufferSize bytes, when using a |
/// blockcipher that's equal to Cipher.BlockSize. |
/// </summary> |
procedure DecodeOFBx(Source, Dest: PUInt8Array; Size: Integer); virtual; |
/// <summary> |
/// double Cipher Feedback mode (CFB) on Blocksize of Cipher, needs no padding. |
/// This one works on blocks of Cipher.BufferSize bytes, when using a |
/// blockcipher that's equal to Cipher.BlockSize. |
/// This one is a proprietary mode developed by Hagen Reddmann. This mode |
/// works as cmCBCx, cmCFBx, cmCFB8 but with double XOR'ing of the |
/// inputstream into Feedback register. |
/// </summary> |
procedure DecodeCFSx(Source, Dest: PUInt8Array; Size: Integer); virtual; |
/// <summary> |
/// Cipher Block Chaining, with CFB8 padding of truncated final block. |
/// It needs no external padding, because internally the last |
/// truncated block is padded by cmCFS8 or cmCFB8. After padding these modes |
/// cannot be used to process any more data. If needed to process chunks of |
/// data then each chunk must be algined to Cipher.BufferSize bytes. |
/// This one works on blocks of Cipher.BufferSize bytes, when using a |
/// blockcipher that's equal to Cipher.BlockSize. |
/// </summary> |
procedure DecodeCBCx(Source, Dest: PUInt8Array; Size: Integer); virtual; |
/// <summary> |
/// double CBC, with CFS8 padding of truncated final block |
/// It needs no external padding, because internally the last |
/// truncated block is padded by cmCFS8 or cmCFB8. After padding these Modes |
/// cannot be used to process any more data. If needed to process chunks of |
/// data then each chunk must be algined to Cipher.BufferSize bytes. |
/// This one works on blocks of Cipher.BufferSize bytes, when using a |
/// blockcipher that's equal to Cipher.BlockSize. |
/// This one is a proprietary mode developed by Hagen Reddmann. This mode |
/// works as cmCBCx, cmCFBx, cmCFB8 but with double XOR'ing of the |
/// inputstream into feedback register. |
/// </summary> |
procedure DecodeCTSx(Source, Dest: PUInt8Array; Size: Integer); virtual; |
/// <summary> |
/// Galois Counter Mode, details are implemented in DECCipherModesGCM |
/// </summary> |
procedure DecodeGCM(Source, Dest: PUInt8Array; Size: Integer); virtual; |
{$IFDEF DEC3_CMCTS} |
/// <summary> |
/// double CBC |
/// This is a proprietary mode developed by Frederik Winkelsdorf. It |
/// replaces the CFS8 padding of the truncated final block with a CFSx padding. |
/// Useful when converting projects that previously used the old DEC v3.0. It |
/// has the same restrictions for external padding and chunk processing as |
/// cmCTSx has. It has a less secure padding of the truncated final block. |
/// (to enable it see DECOptions.inc) |
/// </summary> |
/// <remarks> |
/// For DEC 3.0 compatibility only |
/// </remarks> |
procedure DecodeCTS3(Source, Dest: PUInt8Array; Size: Integer); virtual; |
{$ENDIF} |
/// <summary> |
/// When setting mode to GCM the GCM implementing class instance needs to |
/// be created |
/// </summary> |
procedure InitMode; override; |
public |
/// <summary> |
/// Frees, if necessary, internal objects |
/// </summary> |
destructor Destroy; override; |
/// <summary> |
/// Encrypts a given block of data |
/// </summary> |
/// <param name="Source"> |
/// Data to be encrypted |
/// </param> |
/// <param name="Dest"> |
/// Data after encryption |
/// </param> |
/// <param name="DataSize"> |
/// Size of the data the Source parameter points to in byte |
/// </param> |
procedure Encode(const Source; var Dest; DataSize: Integer); |
/// <summary> |
/// Decrypts a given block of data |
/// </summary> |
/// <param name="Source"> |
/// Data to be Decrypted |
/// </param> |
/// <param name="Dest"> |
/// Data after decryption |
/// </param> |
/// <param name="DataSize"> |
/// Size of the data the Source parameter points to in byte |
/// </param> |
procedure Decode(const Source; var Dest; DataSize: Integer); |
/// <summary> |
/// Properly finishes the cryptographic operation. It needs to be called |
/// at the end of encrypting or decrypting data, otherwise the last block |
/// or last byte of the data will not be properly processed. |
/// </summary> |
procedure Done; override; |
/// <summary> |
/// Returns a list of CalculatedAuthenticationResult lengs explicitely |
/// specified by the official specification of the standard. |
/// </summary> |
/// <returns> |
/// List of bit lengths. If the cipher mode used is not an authenticated |
/// one, the array will just contain a single value of 0. |
/// </returns> |
function GetStandardAuthenticationTagBitLengths:TStandardBitLengths; |
/// <summary> |
/// Some block chaining modes have the ability to authenticate the message |
/// in addition to encrypting it. This property contains the data which |
/// shall be authenticated in parallel to the encryption. Some authenticated |
/// modes still generate an authentication result even if no additional |
/// data is supplied via this property, e.g. cmGCM is one of those. |
/// </summary> |
property DataToAuthenticate : TBytes |
read GetDataToAuthenticate |
write SetDataToAuthenticate; |
/// <summary> |
/// Some block chaining modes have the ability to authenticate the message |
/// in addition to encrypting it. |
/// Represents the length of CalculatedAuthenticationResult in bit, values |
/// as per specification are: 128, 120, 112, 104, or 96 bit. For certain |
/// applications, they may be 64 or 32 as well, but the use of these two |
/// tag lengths constrains the length of the input data and the lifetime |
/// of the key. |
/// </summary> |
property AuthenticationResultBitLength : Integer |
read GetAuthenticationResultBitLength |
write SetAuthenticationResultBitLength; |
/// <summary> |
/// Some block chaining modes have the ability to authenticate the message |
/// in addition to encrypting it. This property contains the generated |
/// authentication tag. Raises an EDECCipherException if this is |
/// called for a cipher mode not supporting authentication. |
/// </summary> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if called for a cipher mode not supporting |
/// authentication. |
/// </exception> |
property CalculatedAuthenticationResult : TBytes |
read GetCalcAuthenticatonResult; |
/// <summary> |
/// Expected CalculatedAuthenticationResult value, will be compared with |
/// actual value when decryption finished. Raises an EDECCipherException |
/// if this is called for a cipher mode not supporting authentication. |
/// </summary> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if called for a cipher mode not supporting |
/// authentication. |
/// </exception> |
property ExpectedAuthenticationResult : TBytes |
read GetExpectedAuthenticationResult |
write SetExpectedAuthenticationResult; |
end; |
implementation |
uses |
{$IFDEF FPC} |
TypInfo, |
{$ELSE} |
System.TypInfo, |
{$ENDIF} |
DECUtil; |
resourcestring |
sInvalidMessageLength = 'Message length for mode %0:s must be a multiple of %1:d bytes'; |
sInvalidBlockSize = 'Block size must be %0:d bit for selected mode %1:s'; |
sInvalidModeForMethod = 'Invalid mode for this method. Mode must be %0:s'; |
/// <summary> |
/// Exception message when calculated authentication value does not match |
/// given expected one |
/// </summary> |
sInvalidAuthenticationValue = 'Calculated authentication value does not match '+ |
'given expected value'; |
procedure TDECCipherModes.ReportInvalidMessageLength(Cipher: TDECCipher); |
begin |
raise EDECCipherException.CreateResFmt(@sInvalidMessageLength, |
[GetEnumName(TypeInfo(TCipherMode), |
Integer(Cipher.Mode)), |
Cipher.Context.BlockSize]); |
end; |
procedure TDECCipherModes.SetDataToAuthenticate(const Value: TBytes); |
begin |
if (FMode = cmGCM) then |
FGCM.DataToAuthenticate := Value |
else |
raise EDECCipherException.CreateResFmt(@sInvalidModeForMethod, ['cmGCM']); |
end; |
procedure TDECCipherModes.SetExpectedAuthenticationResult(const Value: TBytes); |
begin |
if (FMode = cmGCM) then |
FGCM.ExpectedAuthenticationTag := Value |
else |
raise EDECCipherException.CreateResFmt(@sInvalidModeForMethod, ['cmGCM']); |
end; |
procedure TDECCipherModes.SetAuthenticationResultBitLength( |
const Value: Integer); |
begin |
if (FMode = cmGCM) then |
FGCM.AuthenticationTagBitLength := Value |
else |
raise EDECCipherException.CreateResFmt(@sInvalidModeForMethod, ['cmGCM']); |
end; |
procedure TDECCipherModes.Encode(const Source; var Dest; DataSize: Integer); |
begin |
CheckState([csInitialized, csEncode, csDone]); |
case FMode of |
cmECBx: EncodeECBx(@Source, @Dest, DataSize); |
cmCBCx: EncodeCBCx(@Source, @Dest, DataSize); |
cmCTSx: EncodeCTSx(@Source, @Dest, DataSize); |
{$IFDEF DEC3_CMCTS} |
cmCTS3: EncodeCTS3(@Source, @Dest, DataSize); |
{$ENDIF DEC3_CMCTS} |
cmCFB8: EncodeCFB8(@Source, @Dest, DataSize); |
cmCFBx: EncodeCFBx(@Source, @Dest, DataSize); |
cmOFB8: EncodeOFB8(@Source, @Dest, DataSize); |
cmOFBx: EncodeOFBx(@Source, @Dest, DataSize); |
cmCFS8: EncodeCFS8(@Source, @Dest, DataSize); |
cmCFSx: EncodeCFSx(@Source, @Dest, DataSize); |
cmGCM : EncodeGCM(@Source, @Dest, DataSize); |
end; |
end; |
procedure TDECCipherModes.EncodeECBx(Source, Dest: PUInt8Array; Size: Integer); |
var |
I: Integer; |
begin |
if Context.BlockSize = 1 then |
begin |
DoEncode(Source, Dest, Size); |
FState := csEncode; |
end |
else |
begin |
Dec(Size, FBufferSize); |
I := 0; |
while I <= Size do |
begin |
DoEncode(@Source[I], @Dest[I], FBufferSize); |
Inc(I, FBufferSize); |
end; |
Dec(Size, I - FBufferSize); |
if Size > 0 then |
begin |
if Size mod Context.BlockSize = 0 then |
begin |
DoEncode(@Source[I], @Dest[I], Size); |
FState := csEncode; |
end |
else |
begin |
FState := csPadded; |
ReportInvalidMessageLength(Self); |
end; |
end; |
end; |
end; |
procedure TDECCipherModes.EncodeOFB8(Source, Dest: PUInt8Array; Size: Integer); |
var |
I: Integer; |
begin |
I := 0; |
while I < Size do |
begin |
DoEncode(FFeedback, FBuffer, FBufferSize); |
Move(FFeedback[1], FFeedback[0], FBufferSize - 1); |
FFeedback[FBufferSize - 1] := FBuffer[0]; |
Dest[I] := Source[I] xor FBuffer[0]; |
Inc(I); |
end; |
FState := csEncode; |
end; |
procedure TDECCipherModes.EncodeCFB8(Source, Dest: PUInt8Array; Size: Integer); |
// CFB-8 |
var |
I: Integer; |
begin |
I := 0; |
while I < Size do |
begin |
DoEncode(FFeedback, FBuffer, FBufferSize); |
Move(FFeedback[1], FFeedback[0], FBufferSize - 1); |
Dest[I] := Source[I] xor FBuffer[0]; |
FFeedback[FBufferSize - 1] := Dest[I]; |
Inc(I); |
end; |
FState := csEncode; |
end; |
procedure TDECCipherModes.EncodeCFS8(Source, Dest: PUInt8Array; Size: Integer); |
// CFS-8, CTS as CFB |
var |
I: Integer; |
begin |
I := 0; |
while I < Size do |
begin |
DoEncode(FFeedback, FBuffer, FBufferSize); |
Dest[I] := Source[I] xor FBuffer[0]; |
Move(FFeedback[1], FFeedback[0], FBufferSize - 1); |
FFeedback[FBufferSize - 1] := FFeedback[FBufferSize - 1] xor Dest[I]; |
Inc(I); |
end; |
FState := csEncode; |
end; |
procedure TDECCipherModes.EncodeCFBx(Source, Dest: PUInt8Array; Size: Integer); |
// CFB-BlockSize |
var |
I: Integer; |
F: PUInt8Array; |
begin |
FState := csEncode; |
if FBufferIndex > 0 then |
begin |
I := FBufferSize - FBufferIndex; |
if I > Size then |
I := Size; |
XORBuffers(Source[0], FBuffer[FBufferIndex], I, Dest[0]); |
Move(Dest[0], FFeedback[FBufferIndex], I); |
Inc(FBufferIndex, I); |
if FBufferIndex < FBufferSize then |
Exit; |
Dec(Size, I); |
Source := @Source[I]; |
Dest := @Dest[I]; |
FBufferIndex := 0 |
end; |
Dec(Size, FBufferSize); |
F := FFeedback; |
I := 0; |
while I < Size do |
begin |
DoEncode(F, FBuffer, FBufferSize); |
XORBuffers(Source[I], FBuffer[0], FBufferSize, Dest[I]); |
F := @Dest[I]; |
Inc(I, FBufferSize); |
end; |
if F <> FFeedback then |
Move(F^, FFeedback^, FBufferSize); |
Dec(Size, I - FBufferSize); |
if Size > 0 then |
begin |
DoEncode(FFeedback, FBuffer, FBufferSize); |
XORBuffers(Source[I], FBuffer[0], Size, Dest[I]); |
Move(Dest[I], FFeedback[0], Size); |
FBufferIndex := Size; |
end; |
end; |
procedure TDECCipherModes.EncodeOFBx(Source, Dest: PUInt8Array; Size: Integer); |
// OFB-BlockSize |
var |
I: Integer; |
begin |
FState := csEncode; |
if FBufferIndex > 0 then |
begin |
I := FBufferSize - FBufferIndex; |
if I > Size then |
I := Size; |
XORBuffers(Source[0], FFeedback[FBufferIndex], I, Dest[0]); |
Inc(FBufferIndex, I); |
if FBufferIndex < FBufferSize then |
Exit; |
Dec(Size, I); |
Source := @Source[I]; |
Dest := @Dest[I]; |
FBufferIndex := 0 |
end; |
Dec(Size, FBufferSize); |
I := 0; |
while I < Size do |
begin |
DoEncode(FFeedback, FFeedback, FBufferSize); |
XORBuffers(Source[I], FFeedback[0], FBufferSize, Dest[I]); |
Inc(I, FBufferSize); |
end; |
Dec(Size, I - FBufferSize); |
if Size > 0 then |
begin |
DoEncode(FFeedback, FFeedback, FBufferSize); |
XORBuffers(Source[I], FFeedback[0], Size, Dest[I]); |
FBufferIndex := Size; |
end; |
end; |
function TDECCipherModes.GetDataToAuthenticate: TBytes; |
begin |
if (FMode = cmGCM) then |
Result := FGCM.DataToAuthenticate |
else |
raise EDECCipherException.CreateResFmt(@sInvalidModeForMethod, ['cmGCM']); |
end; |
function TDECCipherModes.GetExpectedAuthenticationResult: TBytes; |
begin |
if (FMode = cmGCM) then |
Result := FGCM.ExpectedAuthenticationTag |
else |
raise EDECCipherException.CreateResFmt(@sInvalidModeForMethod, ['cmGCM']); |
end; |
function TDECCipherModes.GetStandardAuthenticationTagBitLengths: TStandardBitLengths; |
begin |
case FMode of |
cmGCM: Result := FGCM.GetStandardAuthenticationTagBitLengths; |
else |
begin |
SetLength(Result, 1); |
Result[0] := 0; |
end; |
end; |
end; |
function TDECCipherModes.GetAuthenticationResultBitLength: Integer; |
begin |
if (FMode = cmGCM) then |
Result := FGCM.AuthenticationTagBitLength |
else |
raise EDECCipherException.CreateResFmt(@sInvalidModeForMethod, ['cmGCM']); |
end; |
function TDECCipherModes.GetCalcAuthenticatonResult: TBytes; |
begin |
if (FMode = cmGCM) then |
Result := FGCM.CalculatedAuthenticationTag |
else |
raise EDECCipherException.CreateResFmt(@sInvalidModeForMethod, ['cmGCM']); |
end; |
procedure TDECCipherModes.InitMode; |
begin |
if FMode = TCipherMode.cmGCM then |
begin |
if Context.BlockSize = 16 then |
FGCM := TGCM.Create |
else |
// GCM requires a cipher with 128 bit block size |
raise EDECCipherException.CreateResFmt(@sInvalidBlockSize, |
[128, GetEnumName(TypeInfo(TCipherMode), |
Integer(FMode))]); |
end |
else |
if Assigned(FGCM) then |
FreeAndNil(FGCM); |
end; |
procedure TDECCipherModes.EncodeCFSx(Source, Dest: PUInt8Array; Size: Integer); |
// CFS-BlockSize |
var |
I: Integer; |
begin |
FState := csEncode; |
if FBufferIndex > 0 then |
begin |
I := FBufferSize - FBufferIndex; |
if I > Size then |
I := Size; |
XORBuffers(Source[0], FBuffer[FBufferIndex], I, Dest[0]); |
XORBuffers(Dest[0], FFeedback[FBufferIndex], I, FFeedback[FBufferIndex]); |
Inc(FBufferIndex, I); |
if FBufferIndex < FBufferSize then |
Exit; |
Dec(Size, I); |
Source := @Source[I]; |
Dest := @Dest[I]; |
FBufferIndex := 0 |
end; |
Dec(Size, FBufferSize); |
I := 0; |
while I < Size do |
begin |
DoEncode(FFeedback, FBuffer, FBufferSize); |
XORBuffers(Source[I], FBuffer[0], FBufferSize, Dest[I]); |
XORBuffers(Dest[I], FFeedback[0], FBufferSize, FFeedback[0]); |
Inc(I, FBufferSize); |
end; |
Dec(Size, I - FBufferSize); |
if Size > 0 then |
begin |
DoEncode(FFeedback, FBuffer, FBufferSize); |
XORBuffers(Source[I], FBuffer[0], Size, Dest[I]); |
XORBuffers(Dest[I], FFeedback[0], Size, FFeedback[0]); |
FBufferIndex := Size; |
end; |
end; |
procedure TDECCipherModes.EncodeCBCx(Source, Dest: PUInt8Array; Size: Integer); |
var |
F: PUInt8Array; |
I: Integer; |
begin |
Dec(Size, FBufferSize); |
F := FFeedback; |
I := 0; |
while I <= Size do |
begin |
XORBuffers(Source[I], F[0], FBufferSize, Dest[I]); |
F := @Dest[I]; |
DoEncode(F, F, FBufferSize); |
Inc(I, FBufferSize); |
end; |
if F <> FFeedback then |
Move(F[0], FFeedback[0], FBufferSize); |
Dec(Size, I - FBufferSize); |
if Size > 0 then |
begin // padding |
EncodeCFB8(@Source[I], @Dest[I], Size); |
FState := csPadded; |
end |
else |
FState := csEncode; |
end; |
procedure TDECCipherModes.EncodeCTSx(Source, Dest: PUInt8Array; Size: Integer); |
var |
I: Integer; |
begin |
Dec(Size, FBufferSize); |
I := 0; |
while I <= Size do |
begin |
XORBuffers(Source[I], FFeedback[0], FBufferSize, Dest[I]); |
DoEncode(@Dest[I], @Dest[I], FBufferSize); |
XORBuffers(Dest[I], FFeedback[0], FBufferSize, FFeedback[0]); |
Inc(I, FBufferSize); |
end; |
Dec(Size, I - FBufferSize); |
if Size > 0 then |
begin // padding |
EncodeCFS8(@Source[I], @Dest[I], Size); |
FState := csPadded; |
end |
else |
FState := csEncode; |
end; |
procedure TDECCipherModes.EncodeGCM(Source, Dest: PUInt8Array; Size: Integer); |
var |
PlainText, |
CipherText : TBytes; |
begin |
if (Size > 0) then |
begin |
PlainText := TBytes(@Source^); |
CipherText := TBytes(@Dest^); |
end |
else |
begin |
SetLength(PlainText, 0); |
SetLength(CipherText, 0); |
end; |
FGCM.EncodeGCM(PlainText, CipherText, Size); |
end; |
{$IFDEF DEC3_CMCTS} |
procedure TDECCipherModes.EncodeCTS3(Source, Dest: PUInt8Array; Size: Integer); |
var |
I: Integer; |
begin |
Dec(Size, FBufferSize); |
I := 0; |
while I <= Size do |
begin |
XORBuffers(Source[I], FFeedback[0], FBufferSize, Dest[I]); |
DoEncode(@Dest[I], @Dest[I], FBufferSize); |
XORBuffers(Dest[I], FFeedback[0], FBufferSize, FFeedback[0]); |
Inc(I, FBufferSize); |
end; |
Dec(Size, I - FBufferSize); |
if Size > 0 then |
begin // padding |
EncodeCFSx(@Source[I], @Dest[I], Size); // use the padding implemented in CFSx |
FState := csPadded; |
end |
else |
FState := csEncode; |
end; |
{$ENDIF DEC3_CMCTS} |
procedure TDECCipherModes.Decode(const Source; var Dest; DataSize: Integer); |
begin |
CheckState([csInitialized, csDecode, csDone]); |
case FMode of |
cmECBx: DecodeECBx(@Source, @Dest, DataSize); |
cmCBCx: DecodeCBCx(@Source, @Dest, DataSize); |
cmCTSx: DecodeCTSx(@Source, @Dest, DataSize); |
{$IFDEF DEC3_CMCTS} |
cmCTS3: DecodeCTS3(@Source, @Dest, DataSize); |
{$ENDIF DEC3_CMCTS} |
cmCFB8: DecodeCFB8(@Source, @Dest, DataSize); |
cmCFBx: DecodeCFBx(@Source, @Dest, DataSize); |
cmOFB8: DecodeOFB8(@Source, @Dest, DataSize); |
cmOFBx: DecodeOFBx(@Source, @Dest, DataSize); |
cmCFS8: DecodeCFS8(@Source, @Dest, DataSize); |
cmCFSx: DecodeCFSx(@Source, @Dest, DataSize); |
cmGCM : DecodeGCM(@Source, @Dest, DataSize); |
end; |
end; |
procedure TDECCipherModes.DecodeECBx(Source, Dest: PUInt8Array; Size: Integer); |
var |
I: Integer; |
begin |
if Context.BlockSize = 1 then |
begin |
DoDecode(Source, Dest, Size); |
FState := csDecode; |
end |
else |
begin |
Dec(Size, FBufferSize); |
I := 0; |
while I <= Size do |
begin |
DoDecode(@Source[I], @Dest[I], FBufferSize); |
Inc(I, FBufferSize); |
end; |
Dec(Size, I - FBufferSize); |
if Size > 0 then |
begin |
if Size mod Context.BlockSize = 0 then |
begin |
DoDecode(@Source[I], @Dest[I], Size); |
FState := csDecode; |
end |
else |
begin |
FState := csPadded; |
ReportInvalidMessageLength(Self); |
end; |
end; |
end; |
end; |
procedure TDECCipherModes.DecodeGCM(Source, Dest: PUInt8Array; Size: Integer); |
var |
PlainText, |
CipherText : TBytes; |
begin |
if (Size > 0) then |
begin |
PlainText := TBytes(@Source^); |
CipherText := TBytes(@Dest^); |
end |
else |
begin |
SetLength(PlainText, 0); |
SetLength(CipherText, 0); |
end; |
FGCM.DecodeGCM(PlainText, CipherText, Size); |
end; |
procedure TDECCipherModes.DecodeCFB8(Source, Dest: PUInt8Array; Size: Integer); |
// CFB-8 |
var |
I: Integer; |
begin |
I := 0; |
while I < Size do |
begin |
DoEncode(FFeedback, FBuffer, FBufferSize); |
Move(FFeedback[1], FFeedback[0], FBufferSize - 1); |
FFeedback[FBufferSize - 1] := Source[I]; |
Dest[I] := Source[I] xor FBuffer[0]; |
Inc(I); |
end; |
FState := csDecode; |
end; |
procedure TDECCipherModes.DecodeOFB8(Source, Dest: PUInt8Array; Size: Integer); |
// same as EncodeOFB |
var |
I: Integer; |
begin |
I := 0; |
while I < Size do |
begin |
DoEncode(FFeedback, FBuffer, FBufferSize); |
Move(FFeedback[1], FFeedback[0], FBufferSize - 1); |
FFeedback[FBufferSize - 1] := FBuffer[0]; |
Dest[I] := Source[I] xor FBuffer[0]; |
Inc(I); |
end; |
FState := csDecode; |
end; |
procedure TDECCipherModes.DecodeCFS8(Source, Dest: PUInt8Array; Size: Integer); |
var |
I: Integer; |
begin |
I := 0; |
while I < Size do |
begin |
DoEncode(FFeedback, FBuffer, FBufferSize); |
Move(FFeedback[1], FFeedback[0], FBufferSize - 1); |
FFeedback[FBufferSize - 1] := FFeedback[FBufferSize - 1] xor Source[I]; |
Dest[I] := Source[I] xor FBuffer[0]; |
Inc(I); |
end; |
FState := csDecode; |
end; |
procedure TDECCipherModes.DecodeCFBx(Source, Dest: PUInt8Array; Size: Integer); |
// CFB-BlockSize |
var |
I: Integer; |
F: PUInt8Array; |
begin |
FState := csDecode; |
if FBufferIndex > 0 then |
begin // remaining bytes of last decode |
I := FBufferSize - FBufferIndex; |
if I > Size then |
I := Size; |
Move(Source[0], FFeedback[FBufferIndex], I); |
XORBuffers(Source[0], FBuffer[FBufferIndex], I, Dest[0]); |
Inc(FBufferIndex, I); |
if FBufferIndex < FBufferSize then |
Exit; |
Dec(Size, I); |
Source := @Source[I]; |
Dest := @Dest[I]; |
FBufferIndex := 0 |
end; |
// process chunks of FBufferSize bytes |
Dec(Size, FBufferSize); |
I := 0; |
if Source <> Dest then |
begin |
F := FFeedback; |
while I < Size do |
begin |
DoEncode(F, FBuffer, FBufferSize); |
XORBuffers(Source[I], FBuffer[0], FBufferSize, Dest[I]); |
F := @Source[I]; |
Inc(I, FBufferSize); |
end; |
if F <> FFeedback then |
Move(F^, FFeedback^, FBufferSize); |
end |
else |
while I < Size do |
begin |
DoEncode(FFeedback, FBuffer, FBufferSize); |
Move(Source[I], FFeedback[0], FBufferSize); |
XORBuffers(Source[I], FBuffer[0], FBufferSize, Dest[I]); |
Inc(I, FBufferSize); |
end; |
Dec(Size, I - FBufferSize); |
if Size > 0 then |
begin // remaining bytes |
DoEncode(FFeedback, FBuffer, FBufferSize); |
Move(Source[I], FFeedback[0], Size); |
XORBuffers(Source[I], FBuffer[0], Size, Dest[I]); |
FBufferIndex := Size; |
end; |
end; |
procedure TDECCipherModes.DecodeOFBx(Source, Dest: PUInt8Array; Size: Integer); |
// OFB-BlockSize, same as EncodeOFBx |
var |
I: Integer; |
begin |
FState := csDecode; |
if FBufferIndex > 0 then |
begin |
I := FBufferSize - FBufferIndex; |
if I > Size then |
I := Size; |
XORBuffers(Source[0], FFeedback[FBufferIndex], I, Dest[0]); |
Inc(FBufferIndex, I); |
if FBufferIndex < FBufferSize then |
Exit; |
Dec(Size, I); |
Source := @Source[I]; |
Dest := @Dest[I]; |
FBufferIndex := 0 |
end; |
Dec(Size, FBufferSize); |
I := 0; |
while I < Size do |
begin |
DoEncode(FFeedback, FFeedback, FBufferSize); |
XORBuffers(Source[I], FFeedback[0], FBufferSize, Dest[I]); |
Inc(I, FBufferSize); |
end; |
Dec(Size, I - FBufferSize); |
if Size > 0 then |
begin |
DoEncode(FFeedback, FFeedback, FBufferSize); |
XORBuffers(Source[I], FFeedback[0], Size, Dest[I]); |
FBufferIndex := Size; |
end; |
end; |
destructor TDECCipherModes.Destroy; |
begin |
FGCM.Free; |
inherited; |
end; |
procedure TDECCipherModes.Done; |
begin |
inherited; |
if (FMode = cmGCM) then |
begin |
if (length(FGCM.ExpectedAuthenticationTag) > 0) and |
(not IsEqual(FGCM.ExpectedAuthenticationTag, FGCM.CalculatedAuthenticationTag)) then |
raise EDECCipherAuthenticationException.Create(sInvalidAuthenticationValue); |
end; |
end; |
procedure TDECCipherModes.OnAfterInitVectorInitialization(const OriginalInitVector: TBytes); |
begin |
inherited; |
if (FMode = cmGCM) then |
FGCM.Init(self.DoEncode, OriginalInitVector); |
end; |
procedure TDECCipherModes.DecodeCFSx(Source, Dest: PUInt8Array; Size: Integer); |
// CFS-BlockSize |
var |
I: Integer; |
begin |
FState := csDecode; |
if FBufferIndex > 0 then |
begin // remaining bytes of last decode |
I := FBufferSize - FBufferIndex; |
if I > Size then |
I := Size; |
XORBuffers(Source[0], FFeedback[FBufferIndex], I, FFeedback[FBufferIndex]); |
XORBuffers(Source[0], FBuffer[FBufferIndex], I, Dest[0]); |
Inc(FBufferIndex, I); |
if FBufferIndex < FBufferSize then |
Exit; |
Dec(Size, I); |
Source := @Source[I]; |
Dest := @Dest[I]; |
FBufferIndex := 0 |
end; |
// process chunks of FBufferSize bytes |
Dec(Size, FBufferSize); |
I := 0; |
while I < Size do |
begin |
DoEncode(FFeedback, FBuffer, FBufferSize); |
XORBuffers(Source[I], FFeedback[0], FBufferSize, FFeedback[0]); |
XORBuffers(Source[I], FBuffer[0], FBufferSize, Dest[I]); |
Inc(I, FBufferSize); |
end; |
Dec(Size, I - FBufferSize); |
if Size > 0 then |
begin // remaining bytes |
DoEncode(FFeedback, FBuffer, FBufferSize); |
XORBuffers(Source[I], FFeedback[0], Size, FFeedback[0]); |
XORBuffers(Source[I], FBuffer[0], Size, Dest[I]); |
FBufferIndex := Size; |
end; |
end; |
procedure TDECCipherModes.DecodeCBCx(Source, Dest: PUInt8Array; Size: Integer); |
var |
I: Integer; |
F, B, T: PUInt8Array; |
begin |
Dec(Size, FBufferSize); |
F := FFeedback; |
I := 0; |
if Source = Dest then |
begin |
B := FBuffer; |
while I <= Size do |
begin |
Move(Source[I], B[0], FBufferSize); |
DoDecode(@Source[I], @Source[I], FBufferSize); |
XORBuffers(Source[I], F[0], FBufferSize, Source[I]); |
T := F; |
F := B; |
B := T; |
Inc(I, FBufferSize); |
end; |
end |
else |
begin |
while I <= Size do |
begin |
DoDecode(@Source[I], @Dest[I], FBufferSize); |
XORBuffers(F[0], Dest[I], FBufferSize, Dest[I]); |
F := @Source[I]; |
Inc(I, FBufferSize); |
end; |
end; |
if F <> FFeedback then |
Move(F[0], FFeedback[0], FBufferSize); |
Dec(Size, I - FBufferSize); |
if Size > 0 then |
begin |
DecodeCFB8(@Source[I], @Dest[I], Size); |
FState := csPadded; |
end |
else |
FState := csDecode; |
end; |
procedure TDECCipherModes.DecodeCTSx(Source, Dest: PUInt8Array; Size: Integer); |
var |
I: Integer; |
F, B, T: PUInt8Array; |
begin |
Dec(Size, FBufferSize); |
F := FFeedback; |
B := FBuffer; |
I := 0; |
while I <= Size do |
begin |
XORBuffers(Source[I], F[0], FBufferSize, B[0]); |
DoDecode(@Source[I], @Dest[I], FBufferSize); |
XORBuffers(Dest[I], F[0], FBufferSize, Dest[I]); |
T := B; |
B := F; |
F := T; |
Inc(I, FBufferSize); |
end; |
if F <> FFeedback then |
Move(F[0], FFeedback[0], FBufferSize); |
Dec(Size, I - FBufferSize); |
if Size > 0 then |
begin |
DecodeCFS8(@Source[I], @Dest[I], Size); |
FState := csPadded; |
end |
else |
FState := csDecode; |
end; |
{$IFDEF DEC3_CMCTS} |
procedure DecodeCTS3(Source, Dest: PUInt8Array; Size: Integer); |
var |
I: Integer; |
F, B, T: PUInt8Array; |
begin |
Dec(Size, FBufferSize); |
F := FFeedback; |
B := FBuffer; |
I := 0; |
while I <= Size do |
begin |
XORBuffers(Source[I], F[0], FBufferSize, B[0]); |
DoDecode(@Source[I], @Dest[I], FBufferSize); |
XORBuffers(Dest[I], F[0], FBufferSize, Dest[I]); |
T := B; |
B := F; |
F := T; |
Inc(I, FBufferSize); |
end; |
if F <> FFeedback then |
Move(F[0], FFeedback[0], FBufferSize); |
Dec(Size, I - FBufferSize); |
if Size > 0 then |
begin |
DecodeCFSx(@Source[I], @Dest[I], Size); // use the padding implemented in CFSx |
FState := csPadded; |
end |
else |
FState := csDecode; |
end; |
{$ENDIF DEC3_CMCTS} |
end. |
/trunk/Decoder5/VCL_DEC/DECCipherModesGCM.pas |
---|
0,0 → 1,730 |
{***************************************************************************** |
The DEC team (see file NOTICE.txt) licenses this file |
to you under the Apache License, Version 2.0 (the |
"License"); you may not use this file except in compliance |
with the License. A copy of this licence is found in the root directory |
of this project in the file LICENCE.txt or alternatively 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. |
*****************************************************************************} |
unit DECCipherModesGCM; |
interface |
{$INCLUDE DECOptions.inc} |
uses |
{$IFDEF FPC} |
SysUtils, |
{$ELSE} |
System.SysUtils, |
{$ENDIF} |
DECTypes; |
type |
/// <summary> |
/// 128 bit unsigned integer |
/// </summary> |
T128 = array[0..1] of UInt64; |
/// <summary> |
/// pointer to an 128 bit unsigned integer |
/// </summary> |
P128 = ^T128; |
/// <summary> |
/// Array of 16 bytes |
/// </summary> |
T16ByteArray = array[0..15] of Byte; |
/// <summary> |
/// Pointer to an array of 16 bytes |
/// </summary> |
P16ByteArray = ^T16ByteArray; |
/// <summary> |
/// A methopd of this type needs to be supplied for encrypting or decrypting |
/// a block via this GCM algorithm. The method is implemented as a parameter, |
/// to avoid the need to bring TGCM in the inheritance chain. TGCM thus can |
/// be used for composition instead of inheritance. |
/// </summary> |
/// <param name="Source"> |
/// Data to be encrypted |
/// </param> |
/// <param name="Dest"> |
/// In this memory the encrypted result will be written |
/// </param> |
/// <param name="Size"> |
/// Size of source in byte |
/// </param> |
TEncodeDecodeMethod = procedure(Source, Dest: Pointer; Size: Integer) of Object; |
/// <summary> |
/// Galois Counter Mode specific methods |
/// </summary> |
TGCM = class(TObject) |
private |
/// <summary> |
/// Empty value? |
/// </summary> |
nullbytes : T128; |
/// <summary> |
/// Table with precalculated values |
/// </summary> |
FM : array[0..15,0..255] of T128; |
/// <summary> |
/// Required for creating the table and encryption at least |
/// </summary> |
FH : T128; |
/// <summary> |
/// Calculated in initialization |
/// </summary> |
FY : T128; |
/// <summary> |
/// Calculated in initialization |
/// </summary> |
FE_K_Y0 : T128; |
/// <summary> |
/// The data which shall be authenticated in parallel to the encryption |
/// </summary> |
FDataToAuthenticate : TBytes; |
/// <summary> |
/// Length of the authentication tag to generate in byte |
/// </summary> |
FCalcAuthenticationTagLength : UInt32; |
/// <summary> |
/// Generated authentication tag |
/// </summary> |
FCalcAuthenticationTag : TBytes; |
/// <summary> |
/// Expected authentication tag value, will be compared with actual value |
/// when decryption finished. |
/// </summary> |
FExpectedAuthenticationTag : TBytes; |
/// <summary> |
/// Reference to the encode method of the actual cipher used |
/// </summary> |
FEncryptionMethod : TEncodeDecodeMethod; |
/// <summary> |
/// XOR implementation for unsigned 128 bit numbers |
/// </summary> |
/// <param name="x"> |
/// First number to xor |
/// </param> |
/// <param name="y"> |
/// Second number to xor the first with |
/// </param> |
/// <returns> |
/// x xor y |
/// </returns> |
function XOR_T128(const x, y: T128): T128; inline; |
/// <summary> |
/// XOR implementation for a pointer and an unsigned 128 bit number |
/// </summary> |
/// <param name="x"> |
/// Pointer on a T128 typed number to xor with y |
/// </param> |
/// <param name="y"> |
/// Second number to xor the first with |
/// </param> |
/// <returns> |
/// x xor y |
/// </returns> |
function XOR_PointerWithT128(const x: Pointer; y: T128 ): T128; inline; |
/// <summary> |
/// XORs the bytes given in a byte array with a T128 number given |
/// </summary> |
/// <param name="x"> |
/// Bytes which shall be XORed with the T128 number |
/// </param> |
/// <param name="XIndex"> |
/// Starting index within x from which onwards to XOR |
/// </param> |
/// <param name="Count"> |
/// Number of bytes from x beginning at XIndex to XOR |
/// </param> |
/// <param name="y"> |
/// Value to XOR the bytes from y with. XOR is done bytewise for each |
/// byte of y |
/// </param> |
/// <param name="Result"> |
/// Result of the XOR operation |
/// </param> |
procedure XOR_ArrayWithT128(const x: TBytes; XIndex, Count: UInt64; y: T128; var Result: TBytes); inline; |
/// <summary> |
/// XORs all elements of the precalculated matrix with the value passed |
/// </summary> |
/// <param name="hx"> |
/// Value who's two parts shall be XORed with the two parts of the |
/// matrix each. |
/// </param> |
/// <returns> |
/// result of the XOR Operation |
/// </returns> |
function poly_mult_H(const hx: T128) : T128; inline; |
/// <summary> |
/// Encodes the 64 bit lengths of DataToAuthenticate and of the cipher |
/// text into a T128 value, swapping the bytes in the process. |
/// </summary> |
/// <param name="x"> |
/// Result of the operation |
/// </param> |
/// <param name="AuthDataLength"> |
/// Length of the data to authenticate in byte |
/// </param> |
/// <param name="CipherTextLength"> |
/// Length of the ciphertext in byte |
/// </param> |
procedure SetAuthenticationCipherLength(var x : T128; |
AuthDataLength, CipherTextLength : UInt64); inline; |
/// <summary> |
/// Calculates a table with precalculated values which speeds up |
/// operations later. The initialized table is the FM field. |
/// </summary> |
/// <param name="H"> |
/// Start value for the precalculation |
/// </param> |
procedure GenerateTableM8Bit(const H: T128); //inline; |
/// <summary> |
/// Performs a right shift of 1 of all bytes in an 128 bit variable |
/// </summary> |
/// <param name="rx"> |
/// Variable on which the right shift is being performed |
/// </param> |
procedure ShiftRight(var rx: T128); //inline; |
/// <summary> |
/// Incremepts the last 4 bytes of the index 0 part |
/// </summary> |
/// <param name="Y"> |
/// Value to increment, this is the return value as well. |
/// </param> |
procedure INCR(var Y : T128); |
/// <summary> |
/// Defines the length of the resulting authentication value in bit. |
/// </summary> |
/// <param name="Value"> |
/// Sets the length of Authenticaton_tag in bit, values as per specification |
/// are: 128, 120, 112, 104, or 96 bit. For certain applications, they |
/// may be 64 or 32 as well, but the use of these two tag lengths |
/// constrains the length of the input data and the lifetime of the key. |
/// </param> |
procedure SetAuthenticationTagLength(const Value: UInt32); |
/// <summary> |
/// Returns the length of the calculated authehtication value in bit |
/// </summary> |
/// <returns> |
/// Length of the calculated authentication value in bit |
/// </returns> |
function GetAuthenticationTagBitLength: UInt32; |
/// <summary> |
/// Calculates the hash value |
/// </summary> |
/// <param name="AuthenticatedData"> |
/// Specifys the data for which an authentication value shall be |
/// calculated. It is allowed to be nil. |
/// </param> |
/// <param name="Ciphertext"> |
/// Encrypted data used in the calculation |
/// </param> |
/// <param name="CiphertextSize"> |
/// Length of the ciphertext in bytes. Use when reading part of array. |
/// </param> |
/// <returns> |
/// Calculated raw hash value which will later get returned as AuthenticatedTag |
/// </returns> |
function CalcGaloisHash(AuthenticatedData, Ciphertext : TBytes; CiphertextSize: |
Integer): T128; |
/// <summary> |
/// Encrypts a T128 value using the encryption method specified on init |
/// </summary> |
/// <param name="Value"> |
/// Value to be encrypted |
/// </param> |
/// <returns> |
/// Encrypted value |
/// </returns> |
function EncodeT128(Value: T128): T128; |
public |
/// <summary> |
/// Should be called when starting encryption/decryption in order to |
/// initialize internal tables etc. |
/// </summary> |
/// <param name="EncryptionMethod"> |
/// Encryption method of the cypher used |
/// </param> |
/// <param name="InitVector"> |
/// Initialization vector |
/// </param> |
procedure Init(EncryptionMethod : TEncodeDecodeMethod; |
InitVector : TBytes); |
/// <summary> |
/// Encodes a block of data using the supplied cipher |
/// </summary> |
/// <param name="Source"> |
/// Plain text to encrypt |
/// </param> |
/// <param name="Dest"> |
/// Ciphertext after encryption |
/// </param> |
/// <param name="Size"> |
/// Number of bytes to encrypt |
/// </param> |
procedure EncodeGCM(Source, |
Dest : TBytes; |
Size : Integer); |
/// <summary> |
/// Decodes a block of data using the supplied cipher |
/// </summary> |
/// <param name="Source"> |
/// Encrypted ciphertext to decrypt |
/// </param> |
/// <param name="Dest"> |
/// Plaintext after decryption |
/// </param> |
/// <param name="Size"> |
/// Number of bytes to decrypt |
/// </param> |
procedure DecodeGCM(Source, |
Dest : TBytes; |
Size : Integer); |
/// <summary> |
/// Returns a list of authentication tag lengs explicitely specified by |
/// the official specification of the standard. |
/// </summary> |
/// <returns> |
/// List of bit lengths |
/// </returns> |
function GetStandardAuthenticationTagBitLengths:TStandardBitLengths; |
/// <summary> |
/// The data which shall be authenticated in parallel to the encryption |
/// </summary> |
property DataToAuthenticate : TBytes |
read FDataToAuthenticate |
write FDataToAuthenticate; |
/// <summary> |
/// Sets the length of AuthenticatonTag in bit, values as per official |
/// specification are: 128, 120, 112, 104, or 96 bit. For certain |
/// applications, they may be 64 or 32 as well, but the use of these two |
/// tag lengths constrains the length of the input data and the lifetime |
/// of the key. |
/// </summary> |
property AuthenticationTagBitLength : UInt32 |
read GetAuthenticationTagBitLength |
write SetAuthenticationTagLength; |
/// <summary> |
/// Calculated authentication value |
/// </summary> |
property CalculatedAuthenticationTag : TBytes |
read FCalcAuthenticationTag |
write FCalcAuthenticationTag; |
/// <summary> |
/// Expected authentication tag value, will be compared with actual value |
/// when decryption finished. |
/// </summary> |
property ExpectedAuthenticationTag : TBytes |
read FExpectedAuthenticationTag |
write FExpectedAuthenticationTag; |
end; |
implementation |
function TGCM.XOR_T128(const x, y : T128): T128; |
begin |
Result[0] := x[0] xor y[0]; |
Result[1] := x[1] xor y[1]; |
end; |
function TGCM.XOR_PointerWithT128(const x : Pointer; y : T128): T128; |
begin |
Result[0] := P128(x)^[0] xor y[0]; |
Result[1] := P128(x)^[1] xor y[1]; |
end; |
procedure TGCM.XOR_ArrayWithT128(const x: TBytes; XIndex, Count: UInt64; y: T128; var Result: TBytes); |
var |
i : integer; |
by : P16ByteArray; |
begin |
by := @y[0]; |
for i := 0 to Count-1 do |
begin |
Result[XIndex] := x[XIndex] xor by[i]; |
inc(XIndex); |
end; |
end; |
function TGCM.poly_mult_H(const hx : T128): T128; |
var |
i : integer; |
x : P16ByteArray; |
begin |
x := @hx[0]; |
Result := FM[0, x[0]]; |
for i := 1 to 15 do |
begin |
Result[0] := Result[0] xor FM[i, x[i]][0]; |
Result[1] := Result[1] xor FM[i, x[i]][1]; |
end; |
end; |
procedure TGCM.SetAuthenticationCipherLength(var x : T128; |
AuthDataLength, CipherTextLength : UInt64); |
var |
i : integer; |
hx : P16ByteArray; |
begin |
hx := @x[0]; |
// al: |
x := nullbytes; |
i := 7; |
repeat |
hx[i] := AuthDataLength mod 256; |
AuthDataLength := AuthDataLength shr 8; |
dec(i); |
until AuthDataLength = 0; |
// cl: |
i := 15; |
repeat |
hx[i] := CipherTextLength mod 256; |
CipherTextLength := CipherTextLength shr 8; |
dec(i); |
until CipherTextLength = 0; |
end; |
procedure TGCM.GenerateTableM8Bit(const H : T128); |
var |
hbit, hbyte, i, j : integer; |
HP : T128; |
bHP : P16ByteArray; |
mask : byte; |
begin |
HP := H; |
bHP := @HP[0]; |
for hbyte := 0 to 15 do |
begin |
mask := 128; |
for hbit := 0 to 7 do |
begin |
FM[hbyte, mask] := HP; |
if (bHP[15] and 1 = 0) then |
ShiftRight(HP) |
else |
begin |
ShiftRight(HP); |
bHP[0] := bHP[0] xor $e1; |
end; |
mask := mask shr 1; |
end; |
end; |
for hbyte := 0 to 15 do |
begin |
i := 2; |
while i <= 128 do |
begin |
for j := 1 to i-1 do |
FM[hbyte, i+j] := XOR_T128(FM[hbyte, i], FM[hbyte, j]); |
i := i*2; |
end; |
FM[hbyte, 0] := nullbytes; |
end; |
end; |
procedure TGCM.ShiftRight(var rx : T128); |
var |
x : P16ByteArray; |
i : integer; |
begin |
x := @rx[0]; |
for i := 15 downto 1 do |
x[i] := (x[i] shr 1) or ((x[i-1] and 1) shl 7); |
x[0] := x[0] shr 1; |
end; |
procedure TGCM.SetAuthenticationTagLength(const Value: UInt32); |
begin |
FCalcAuthenticationTagLength := Value shr 3; |
SetLength(FCalcAuthenticationTag, FCalcAuthenticationTagLength); |
end; |
procedure TGCM.INCR(var Y : T128); |
var |
bY : P16ByteArray; |
begin |
bY := @Y[0]; |
{$IFOPT Q+}{$DEFINE RESTORE_OVERFLOWCHECKS}{$Q-}{$ENDIF} |
{$Q-} |
inc(bY[15]); |
if bY[15] = 0 then |
begin |
inc(bY[14]); |
if bY[14] = 0 then |
begin |
inc(bY[13]); |
if bY[13] = 0 then |
inc(bY[12]); |
end; |
end; |
{$IFDEF RESTORE_OVERFLOWCHECKS}{$Q+}{$ENDIF} |
end; |
procedure TGCM.Init(EncryptionMethod : TEncodeDecodeMethod; |
InitVector : TBytes); |
var |
b : ^Byte; |
OldH : T128; |
begin |
Assert(Assigned(EncryptionMethod), 'No encryption method specified'); |
// Clear calculated authentication value |
if (Length(FCalcAuthenticationTag) > 0) then |
FillChar(FCalcAuthenticationTag[0], Length(FCalcAuthenticationTag), #0); |
FEncryptionMethod := EncryptionMethod; |
Nullbytes[0] := 0; |
Nullbytes[1] := 0; |
OldH := FH; |
EncryptionMethod(@Nullbytes[0], @FH[0], 16); |
// Only generate the table when not already generated |
if (OldH[0] <> FH[0]) or (OldH[1] <> FH[1]) then |
GenerateTableM8Bit(FH); |
if length(InitVector) = 12 then |
begin |
FY[1] := 0; |
Move(InitVector[0], FY[0], 12); |
b := @FY[0]; |
inc(b, 15); |
b^ := 1; |
end |
else |
FY := CalcGaloisHash(nil, InitVector, length(InitVector)); |
FEncryptionMethod(@FY[0], @FE_K_Y0[0], 16); |
end; |
function TGCM.CalcGaloisHash(AuthenticatedData, Ciphertext : TBytes; |
CiphertextSize: Integer): T128; |
var |
AuthCipherLength : T128; |
x : T128; |
n : Uint64; |
procedure encode(data : TBytes; dataSize: Integer); |
var |
i, mod_d, div_d, len_d : UInt64; |
hdata : T128; |
begin |
len_d := dataSize; |
if (len_d > 0) then |
begin |
n := 0; |
div_d := len_d div 16; |
if div_d > 0 then |
begin |
for i := 0 to div_d-1 do |
begin |
x := poly_mult_H(XOR_PointerWithT128(@data[n], x )); |
inc(n, 16); |
end; |
end; |
mod_d := len_d mod 16; |
if mod_d > 0 then |
begin |
hdata := nullbytes; |
Move(data[n], hdata[0], mod_d); |
x := poly_mult_H(XOR_T128(hdata, x)); |
end; |
end; |
end; |
begin |
x := nullbytes; |
encode(AuthenticatedData, length(AuthenticatedData)); |
Assert(length(Ciphertext) >= CiphertextSize); |
encode(Ciphertext, CiphertextSize); |
SetAuthenticationCipherLength(AuthCipherLength, length(AuthenticatedData) shl 3, CiphertextSize shl 3); |
Result := poly_mult_H(XOR_T128(AuthCipherLength, x)); |
end; |
procedure TGCM.DecodeGCM(Source, Dest: TBytes; Size: Integer); |
var |
i, j, BlockCount : UInt64; |
a_tag : T128; |
begin |
i := 0; |
BlockCount := Size div 16; |
for j := 1 to BlockCount do |
begin |
INCR(FY); |
P128(@Dest[i])^ := XOR_PointerWithT128(@Source[i], EncodeT128(FY)); |
inc(i, 16); |
end; |
if i < Size then |
begin |
INCR(FY); |
XOR_ArrayWithT128(Source, i, UInt64(Size)-i, EncodeT128(FY), Dest); |
end; |
a_tag := XOR_T128(CalcGaloisHash(DataToAuthenticate, Source, Size), FE_K_Y0); |
Setlength(FCalcAuthenticationTag, FCalcAuthenticationTagLength); |
Move(a_tag[0], FCalcAuthenticationTag[0], FCalcAuthenticationTagLength); |
// Check for correct authentication result is in Done of DECCipherModes |
// if not IsEqual(FExpectedAuthenticationTag, FCalcAuthenticationTag) then |
// raise EDECCipherAuthenticationException.Create(sInvalidAuthenticationValue); |
// In difference to the NIST recommendation we do not discard plaintext if |
// authentication failed to make data recovery possible. But since we throw |
// an exception the user will get notified that there's something wrong |
// if not IsEqual(authenticaton_tag, ba_tag) then |
// SetLength(plaintext, 0); // NIST FAIL => pt='' |
end; |
procedure TGCM.EncodeGCM(Source, Dest: TBytes; Size: Integer); |
var |
i, j, div_len_plain : UInt64; |
AuthTag : T128; |
begin |
i := 0; |
div_len_plain := Size div 16; |
for j := 1 to div_len_plain do |
begin |
INCR(FY); |
P128(@Dest[i])^ := XOR_PointerWithT128(@Source[i], EncodeT128(FY)); |
inc(i,16); |
end; |
if i < Size then |
begin |
INCR(FY); |
XOR_ArrayWithT128(Source, i, UInt64(Size)-i, EncodeT128(FY), Dest); |
end; |
AuthTag := XOR_T128(CalcGaloisHash(DataToAuthenticate, Dest, Size), FE_K_Y0); |
Setlength(FCalcAuthenticationTag, FCalcAuthenticationTagLength); |
Move(AuthTag[0], FCalcAuthenticationTag[0], FCalcAuthenticationTagLength); |
end; |
function TGCM.EncodeT128(Value: T128): T128; |
begin |
FEncryptionMethod(@Value[0], @Result[0], 16); |
end; |
function TGCM.GetAuthenticationTagBitLength: UInt32; |
begin |
Result := FCalcAuthenticationTagLength shl 3; |
end; |
function TGCM.GetStandardAuthenticationTagBitLengths: TStandardBitLengths; |
begin |
SetLength(Result, 5); |
Result := [96, 104, 112, 120, 128]; |
end; |
// |
//function decrypt( const key, IV : TBytes; out plaintext : TBytes; const authenticated_data, |
//ciphertext : TBytes; len_auth_tag : integer; const authenticaton_tag : TBytes ) : boolean; |
//var |
// i, j, div_len_ciph, len_ciph : Uint64; |
// a_tag, E_K_Y0, Y, H : T128; |
// bY : array[0..15] of byte absolute Y[0]; |
// ba_Tag : TBytes; |
// |
// function equal( const a, b : TBytes ):boolean; |
// begin |
// if length(a) <> length(b) then Result := false |
// else |
// Result := CompareMem( @a[0], @b[0], length(a) ); |
// end; |
// |
//begin |
// len_auth_tag := len_auth_tag shr 3; |
// |
// E_Init( key ); |
// H := E_Cipher( nullbytes ); |
// Table_M_8Bit(H); |
// |
// len_ciph := length( ciphertext ); |
// SetLength( plaintext, len_ciph ); |
// |
// if length(IV) = 12 then |
// begin |
// Y[1] := 0; |
// Move( IV[0], Y[0], 12 ); |
// bY[15] := 1; |
// end |
// else |
// Y := CalcGaloisHash( H, nil, IV ); |
// |
// E_K_Y0 := E_Cipher( y ); |
// |
// i := 0; |
// div_len_ciph := len_ciph div 16; |
// for j := 1 to div_len_ciph do |
// begin |
// INCR( Y ); |
// P128(@plaintext[i])^ := XOR_128_n( @ciphertext[i], E_cipher( Y ) ); |
// inc(i,16); |
// end; |
// |
// if i < len_ciph then |
// begin |
// INCR( Y ); |
// XOR_128_n_l( ciphertext, i, len_ciph-i, E_cipher( Y ), plaintext ); |
// end; |
// |
// a_tag := XOR_128( CalcGaloisHash( H, authenticated_data, ciphertext ), E_K_Y0 ); |
// |
// Setlength( ba_tag, len_auth_tag ); |
// Move( a_tag[0], ba_tag[0], len_auth_tag ); |
// |
// Result := equal( authenticaton_tag, ba_tag ); |
// if not Result then SetLength( plaintext, 0 ); // NIST FAIL => pt='' |
//end; |
// |
end. |
/trunk/Decoder5/VCL_DEC/DECCiphers.pas |
---|
0,0 → 1,6843 |
{***************************************************************************** |
The DEC team (see file NOTICE.txt) licenses this file |
to you under the Apache License, Version 2.0 (the |
"License"); you may not use this file except in compliance |
with the License. A copy of this licence is found in the root directory |
of this project in the file LICENCE.txt or alternatively 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. |
*****************************************************************************} |
unit DECCiphers; |
interface |
{$INCLUDE DECOptions.inc} |
uses |
DECCipherBase, DECCipherFormats, DECUtil, DECTypes; |
type |
// Cipher Classes |
/// <summary> |
/// Null cipher, doesn't encrypt, only copy |
/// </summary> |
TCipher_Null = class; |
/// <summary> |
/// A block based encryption algorithm with 32 to 448 bit key length |
/// </summary> |
TCipher_Blowfish = class; |
/// <summary> |
/// AES Round 2 Final Candidate |
/// </summary> |
TCipher_Twofish = class; |
/// <summary> |
/// International Data Encryption Algorithm, formerly patentet, |
/// now patent free. The algorithm is no longer to be really recommended due |
/// to some classes of weak keys and other successfull attacks. |
/// </summary> |
TCipher_IDEA = class; |
/// <summary> |
/// Carlisle Adams and Stafford Tavares, 256 bit key length |
/// </summary> |
TCipher_Cast256 = class; |
/// <summary> |
/// AES Round 2 Final Candidate |
/// </summary> |
TCipher_Mars = class; |
/// <summary> |
/// Streamcipher in as Block Cipher |
/// </summary> |
TCipher_RC4 = class; |
/// <summary> |
/// AES Round 2 Final Candidate |
/// </summary> |
TCipher_RC6 = class; |
/// <summary> |
/// AES Round 2 Final Candidate |
/// </summary> |
TCipher_Rijndael = class; |
/// <summary> |
/// AES winner = TCipher_Rijndael |
/// </summary> |
TCipher_AES = class; |
/// <summary> |
/// A block cipher invented by Joan Daemen and Vincent Rijmen. The design, |
/// published in 1997, is a forerunner to Rijndael, which has been adopted |
/// as the Advanced Encryption Standard. Square was introduced together with |
/// a new form of cryptanalysis discovered by Lars Knudsen, called the |
/// "Square attack". |
/// The structure of Square is a substitution-permutation network with eight |
/// rounds, operating on 128-bit blocks and using a 128-bit key. |
/// </summary> |
/// <remarks> |
/// If possible use TCipher_AES instead |
/// </remarks> |
TCipher_Square = class; |
/// <summary> |
/// Stream Cipher in Blockmode (on UInt32), very fast |
/// </summary> |
TCipher_SCOP = class; |
/// <summary> |
/// Stream Cipher in Blockmode (on UInt32), very fast. |
/// Wrong old version from DEC 5.2. Use only for backwards compatibility! |
/// </summary> |
TCipher_SCOP_DEC52 = class; |
/// <summary> |
/// Stream Cipher, eq. design from German ENIGMA Machine |
/// </summary> |
TCipher_Sapphire = class; |
/// <summary> |
/// Single DES 8 byte Blocksize, 8 byte Keysize, 56 bits relevant. |
/// Considered to be too weak nowadays. Included for compatibility reasons. |
/// </summary> |
TCipher_1DES = class; |
/// <summary> |
/// Double DES 8 byte Blocksize, 16 byte Keysize, 112 bits relevant |
/// </summary> |
TCipher_2DES = class; |
/// <summary> |
/// Triple DES 8 byte Blocksize, 24 byte Keysize, 168 bits relevant |
/// </summary> |
TCipher_3DES = class; |
/// <summary> |
/// Triple DES 16 byte Blocksize, 16 byte Keysize, 112 bits relevant |
/// </summary> |
TCipher_2DDES = class; |
/// <summary> |
/// Triple DES 16 byte Blocksize, 24 byte Keysize, 168 bits relevant |
/// </summary> |
TCipher_3DDES = class; |
/// <summary> |
/// Triple DES 24 byte Blocksize, 24 byte Keysize, 168 bits relevant |
/// </summary> |
TCipher_3TDES = class; |
/// <summary> |
/// A 1994 developed block cipher using a 96 bit key. 3-Way, is vulnerable |
/// to related key cryptanalysis. |
/// </summary> |
TCipher_3Way = class; |
/// <summary> |
/// Carlisle Adams and Stafford Tavares, 128 bit key length |
/// </summary> |
TCipher_Cast128 = class; |
/// <summary> |
/// Russian Cipher |
/// </summary> |
TCipher_Gost = class; |
/// <summary> |
/// Alias/new name for Gost cipher |
/// </summary> |
TCipher_Magma = class; |
/// <summary> |
/// Misty1 is a block cipher developed 1995 by Mitsubishi. It is free only for |
/// academical and non-profit works in RFC 2994. it is otherwise patented. |
/// In 2015 it got broken via integral cryptoanalysis. |
/// </summary> |
TCipher_Misty = class; |
/// <summary> |
/// A 1996 block cipher with a key length of 120 bit. It can be broken with |
/// a relatively low number of ciphertext/plaintext queries. |
/// </summary> |
TCipher_NewDES = class; |
/// <summary> |
/// Camelia, a 128 bit block cipher. |
/// Specification: https://info.isl.ntt.co.jp/crypt/eng/camellia/dl/01espec.pdf |
/// </summary> |
TCipher_Q128 = class; |
/// <summary> |
/// Rivest Cipher 2, a 1987 developed cipher with a default keysize of 64 bit |
/// </summary> |
TCipher_RC2 = class; |
/// <summary> |
/// Rivest Cipher 5, a 1994 developed cipher with emphasis on speed and low |
/// size in order to make it efficient on embedded hardware as well. Key sizes |
/// of up to 2048 bits are possible but 128 bits are suggested. The algorithm |
/// was patented in the US up to 2015. |
/// </summary> |
TCipher_RC5 = class; |
/// <summary> |
/// SAFER = Secure And Fast Encryption Routine |
/// </summary> |
TCipher_SAFER = class; |
/// <summary> |
/// A 1996 published block cipher with a key size of 128 bits. It was |
/// identified as one of the predecessors of Rijndael |
/// </summary> |
TCipher_Shark = class; |
/// <summary> |
/// A 1996 published block cipher with a key size of 128 bits. It was |
/// identified as one of the predecessors of Rijndael |
/// Wrong old version from DEC 5.2. Use only for backwards compatibility! |
/// </summary> |
TCipher_Shark_DEC52 = class; |
/// <summary> |
/// A NSA developed and 1998 published block cipher with a key length of |
/// 80 bit. Soon after publication various weaknesses have been identified. |
/// </summary> |
TCipher_Skipjack = class; |
/// <summary> |
/// Tiny Encryption Algorithm |
/// </summary> |
TCipher_TEA = class; |
/// <summary> |
/// Tiny Encryption Algorithm, 1st extended Version |
/// </summary> |
TCipher_XTEA = class; |
/// <summary> |
/// = TCipher_XTEA (kept for backward compatibility) |
/// </summary> |
TCipher_TEAN = class; |
/// <summary> |
/// Tiny Encryption Algorithm, 1st extended Version. |
/// Wrong old version from DEC 5.2. Use only for backwards compatibility! |
/// </summary> |
TCipher_XTEA_DEC52 = class; |
// Definitions needed for Skipjack algorithm |
PSkipjackTab = ^TSkipjackTab; |
TSkipjackTab = array[0..255] of Byte; |
/// <summary> |
/// A do nothing cipher, usefull for debugging and development purposes. Do |
/// not use it for actual encryption as it will not encrypt anything at all! |
/// </summary> |
TCipher_Null = class(TDECFormattedCipher) |
protected |
procedure DoInit(const Key; Size: Integer); override; |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
public |
/// <summary> |
/// Provides meta data about the cipher algorithm used like key size. |
/// </summary> |
class function Context: TCipherContext; override; |
end; |
TCipher_Blowfish = class(TDECFormattedCipher) |
protected |
/// <summary> |
/// Initialize the key, based on the key passed in |
/// </summary> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
procedure DoInit(const Key; Size: Integer); override; |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
end; |
TCipher_Twofish = class(TDECFormattedCipher) |
protected |
/// <summary> |
/// Initialize the key, based on the key passed in |
/// </summary> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
procedure DoInit(const Key; Size: Integer); override; |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
end; |
TCipher_IDEA = class(TDECFormattedCipher) |
protected |
/// <summary> |
/// Initialize the key, based on the key passed in |
/// </summary> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
procedure DoInit(const Key; Size: Integer); override; |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
end; |
TCipher_Cast256 = class(TDECFormattedCipher) |
protected |
/// <summary> |
/// Initialize the key, based on the key passed in |
/// </summary> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
procedure DoInit(const Key; Size: Integer); override; |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
end; |
TCipher_Mars = class(TDECFormattedCipher) |
protected |
/// <summary> |
/// Initialize the key, based on the key passed in |
/// </summary> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
procedure DoInit(const Key; Size: Integer); override; |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
end; |
/// <summary> |
/// This is a well known stream cipher. In February 2015 its use in context |
/// of TLS has been forbidden due to severe security issues. |
/// </summary> |
TCipher_RC4 = class(TDECFormattedCipher) |
protected |
/// <summary> |
/// Initialize the key, based on the key passed in |
/// </summary> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
procedure DoInit(const Key; Size: Integer); override; |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
end; |
TCipher_RC6 = class(TDECFormattedCipher) |
private |
FRounds: Integer; |
procedure SetRounds(Value: Integer); |
/// <summary> |
/// Limits the number of rounds used to a minimum or maximum value, |
/// depending on the current value. If FRounds is 0 it will be set to 20. |
/// </summary> |
procedure LimitRounds; inline; |
protected |
/// <summary> |
/// Initialize the key, based on the key passed in |
/// </summary> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
procedure DoInit(const Key; Size: Integer); override; |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
/// <summary> |
/// Sets the number of rounds/times the algorithm is being applied to the |
/// data. Range should be 16-24 and default is 20 rounds. |
/// </summary> |
property Rounds: Integer read FRounds write SetRounds; |
end; |
TCipher_Rijndael = class(TDECFormattedCipher) |
private |
FRounds: Integer; |
/// <summary> |
/// Calculates the key used for encoding. Implemented is the "new AES |
/// conform key scheduling". |
/// </summary> |
/// <param name="KeySize"> |
/// Length of the key in byte, but here the AES variant is relevant rather |
/// </param> |
procedure BuildEncodeKey(KeySize:Integer); inline; |
/// <summary> |
/// Calculates the key used for decoding. Implemented is the "new AES |
/// conform key scheduling". |
/// </summary> |
procedure BuildDecodeKey; inline; |
protected |
/// <summary> |
/// Initialize the key, based on the key passed in |
/// </summary> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
procedure DoInit(const Key; Size: Integer); override; |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
/// <summary> |
/// Gets the number of rounds/times the algorithm is being applied to the |
/// data. The number of rounds depends on the key size. |
/// </summary> |
property Rounds: Integer read FRounds; |
end; |
/// <summary> |
/// Generic implementation. The bit length one gets depends on the length |
/// of the key defined via Init. |
/// </summary> |
TCipher_AES = class(TCipher_Rijndael); |
/// <summary> |
/// 128 Bit variant of the algorithm. Specifying a longer key leads to a |
/// EDECCipherException exception |
/// </summary> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if called with a key length longer than 128 bit. |
/// </exception> |
TCipher_AES128 = class(TCipher_AES) |
protected |
/// <summary> |
/// Initialize the key, based on the key passed in |
/// </summary> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
procedure DoInit(const Key; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
end; |
/// <summary> |
/// 192 Bit variant of the algorithm. Specifying a longer key leads to a |
/// EDECCipherException exception |
/// </summary> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if called with a key length longer than 192 bit. |
/// </exception> |
TCipher_AES192 = class(TCipher_AES) |
protected |
/// <summary> |
/// Initialize the key, based on the key passed in |
/// </summary> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
procedure DoInit(const Key; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
end; |
/// <summary> |
/// 256 Bit variant of the algorithm. Specifying a longer key leads to a |
/// EDECCipherException exception |
/// </summary> |
/// <exception cref="EDECCipherException"> |
/// Exception raised if called with a key length longer than 256 bit. |
/// </exception> |
TCipher_AES256 = class(TCipher_AES) |
protected |
/// <summary> |
/// Initialize the key, based on the key passed in |
/// </summary> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
procedure DoInit(const Key; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
end; |
TCipher_Square = class(TDECFormattedCipher) |
protected |
/// <summary> |
/// Initialize the key, based on the key passed in |
/// </summary> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
procedure DoInit(const Key; Size: Integer); override; |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
end; |
TCipher_SCOP = class(TDECFormattedCipher) |
protected |
/// <summary> |
/// Initialize the key, based on the key passed in |
/// </summary> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
procedure DoInit(const Key; Size: Integer); override; |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
end; |
/// <remarks> |
/// Do only use if backwards compatibility with old code is necessary as |
/// this implementation is faulty! |
/// </remarks> |
TCipher_SCOP_DEC52 = class(TDECFormattedCipher) |
protected |
/// <summary> |
/// Initialize the key, based on the key passed in |
/// </summary> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
procedure DoInit(const Key; Size: Integer); override; |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
end; |
TCipher_Sapphire = class(TDECFormattedCipher) |
protected |
/// <summary> |
/// Initialize the key, based on the key passed in |
/// </summary> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
procedure DoInit(const Key; Size: Integer); override; |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
end; |
/// <summary> |
/// Base class for all DES based ciphers to fix issues with calling |
/// inherited in DoInit, as all other DES based classes did inherit from |
/// TCipher_1DES and inherited called the DoInit of that as well... |
/// </summary> |
TCipher_DESBase = class(TDECFormattedCipher) |
strict protected |
/// <summary> |
/// Initialize the key, based on the key passed in |
/// </summary> |
/// <param name="Data"> |
/// Key for the current block to be encrypted/decrypted? |
/// </param> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
/// <param name="Reverse"> |
/// Defines whether some internal calculation needs to be based from the |
/// start index or the highest index (= reverse) |
/// </param> |
procedure DoInitKey(const Data: array of Byte; Key: PUInt32Array; Reverse: Boolean); |
end; |
TCipher_1DES = class(TCipher_DESBase) |
protected |
procedure DoInit(const Key; Size: Integer); override; |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
end; |
TCipher_2DES = class(TCipher_DESBase) |
protected |
/// <summary> |
/// Initialize the key, based on the key passed in |
/// </summary> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
procedure DoInit(const Key; Size: Integer); override; |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
end; |
TCipher_3DES = class(TCipher_DESBase) |
protected |
/// <summary> |
/// Initialize the key, based on the key passed in |
/// </summary> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
procedure DoInit(const Key; Size: Integer); override; |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
end; |
TCipher_2DDES = class(TCipher_2DES) |
protected |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
end; |
TCipher_3DDES = class(TCipher_3DES) |
protected |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
end; |
TCipher_3TDES = class(TCipher_3DES) |
protected |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
end; |
TCipher_3Way = class(TDECFormattedCipher) |
protected |
/// <summary> |
/// Initialize the key, based on the key passed in |
/// </summary> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
procedure DoInit(const Key; Size: Integer); override; |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
end; |
TCipher_Cast128 = class(TDECFormattedCipher) |
private |
FRounds: Integer; |
protected |
/// <summary> |
/// Initialize the key, based on the key passed in |
/// </summary> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
procedure DoInit(const Key; Size: Integer); override; |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
end; |
TCipher_Gost = class(TDECFormattedCipher) |
protected |
/// <summary> |
/// Initialize the key, based on the key passed in |
/// </summary> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
procedure DoInit(const Key; Size: Integer); override; |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
end; |
/// <summary> |
/// Alias for Gost |
/// </summary> |
TCipher_Magma = class(TCipher_Gost); |
/// <summary> |
/// Do no longer use this algorithm if possible, as it got broken in 2015 |
/// by crypto analysis. |
/// </summary> |
TCipher_Misty = class(TDECFormattedCipher) |
protected |
/// <summary> |
/// Initialize the key, based on the key passed in |
/// </summary> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
procedure DoInit(const Key; Size: Integer); override; |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
end; |
/// <summary> |
/// While this algorithm resembles the Data Encryption Standard (DES), |
/// it is easier to implement in software and is supposed to be more secure. |
/// It is not to be confused with another algorithm - known by the same |
/// name - which is simply DES without the initial and final permutations. |
/// The NewDES here is a completely different algorithm. |
/// |
/// Be aware though that recent crypto analysis shows that this algorithm is |
/// less safe than DES and thus not to be recommended for use! |
/// </summary> |
TCipher_NewDES = class(TDECFormattedCipher) |
protected |
/// <summary> |
/// Initialize the key, based on the key passed in |
/// </summary> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
procedure DoInit(const Key; Size: Integer); override; |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
end; |
TCipher_Q128 = class(TDECFormattedCipher) |
protected |
/// <summary> |
/// Initialize the key, based on the key passed in |
/// </summary> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
procedure DoInit(const Key; Size: Integer); override; |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
end; |
TCipher_RC2 = class(TDECFormattedCipher) |
protected |
/// <summary> |
/// Initialize the key, based on the key passed in |
/// </summary> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
procedure DoInit(const Key; Size: Integer); override; |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
end; |
TCipher_RC5 = class(TDECFormattedCipher) |
private |
FRounds: Integer; |
procedure SetRounds(Value: Integer); |
protected |
/// <summary> |
/// Initialize the key, based on the key passed in |
/// </summary> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
procedure DoInit(const Key; Size: Integer); override; |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
/// <summary> |
/// Sets the number of rounds/times the algorithm is being applied to the |
/// data. Allowed range is 0-255, if you can choose we recommend a |
/// value > 16. |
/// </summary> |
property Rounds: Integer read FRounds write SetRounds; |
end; |
/// <summary> |
/// svK40 SAFER K-40 Keysize is 40bit -> 5 Byte |
/// svK64 SAFER K-64 Keysize is 64bit -> 8 Byte |
/// svK128 SAFER K-128 KeySize is 128bit -> 16 Byte |
/// svSK40 SAFER SK-40 Stronger Version from K-40 with better Key Scheduling |
/// svSK64 SAFER SK-64 Stronger Version from K-64 with better Key Scheduling |
/// svSK128 SAFER SK-128 Stronger Version from K-128 with better Key Scheduling |
/// </summary> |
TSAFERVersion = (svSK128, svSK64, svSK40, svK128, svK64, svK40); |
TCipher_SAFER = class(TDECFormattedCipher) |
private |
FRounds: Integer; |
FVersion: TSAFERVersion; |
procedure SetRounds(Value: Integer); |
procedure SetVersion(Value: TSAFERVersion); |
protected |
/// <summary> |
/// Initialize the key, based on the key passed in |
/// </summary> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
procedure DoInit(const Key; Size: Integer); override; |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
/// <summary> |
/// Sets the number of rounds/times the algorithm is being applied to the |
/// data. Range should be 4-13 and default is 5, 6, 10 or 8 rounds |
/// depending on the version |
/// </summary> |
property Rounds: Integer read FRounds write SetRounds; |
property Version: TSAFERVersion read FVersion write SetVersion; |
end; |
{$IFNDEF CPU64BITS} |
PLong64 = ^TLong64; |
TLong64 = packed record |
L, R: UInt32; |
end; |
PLong64Array = ^TLong64Array; |
TLong64Array = array[0..1023] of TLong64; |
{$ENDIF} |
TLogArray = array[0..255] of Byte; |
/// <summary> |
/// Base class for both Shark implementations |
/// </summary> |
TCipher_SharkBase = class(TDECFormattedCipher) |
strict protected |
{$IFNDEF CPU64BITS} |
function Transform(A: TLong64; Log, ALog: TLogArray): TLong64; |
function Shark(D: TLong64; K: PLong64): TLong64; |
{$ELSE} |
function Transform(A: UInt64; Log, ALog: TLogArray): UInt64; |
function SharkEncode(D: UInt64; K: PUInt64): UInt64; |
{$ENDIF} |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
end; |
TCipher_Shark = class(TCipher_SharkBase) |
protected |
/// <summary> |
/// Initialize the key, based on the key passed in |
/// </summary> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
procedure DoInit(const Key; Size: Integer); override; |
public |
end; |
/// <remarks> |
/// Do only use if backwards compatibility with old code is necessary as |
/// this implementation is faulty! |
/// </remarks> |
TCipher_Shark_DEC52 = class(TCipher_SharkBase) |
protected |
/// <summary> |
/// Initialize the key, based on the key passed in |
/// </summary> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
procedure DoInit(const Key; Size: Integer); override; |
end; |
TCipher_Skipjack = class(TDECFormattedCipher) |
strict private |
procedure SkipjackIncCheck(var ATab: PSkipjackTab; AMin: PSkipjackTab; AMax: PByte); inline; |
procedure SkipjackDecCheck(var ATab: PSkipjackTab; AMin: PByte; AMax: PSkipjackTab); inline; |
protected |
/// <summary> |
/// Initialize the key, based on the key passed in |
/// </summary> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
procedure DoInit(const Key; Size: Integer); override; |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
end; |
TCipher_TEA = class(TDECFormattedCipher) |
private |
FRounds: Integer; |
procedure SetRounds(Value: Integer); |
protected |
/// <summary> |
/// Initialize the key, based on the key passed in |
/// </summary> |
/// <param name="Key"> |
/// Encryption/Decryption key to be used |
/// </param> |
/// <param name="Size"> |
/// Size of the key passed in bytes. |
/// </param> |
procedure DoInit(const Key; Size: Integer); override; |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
public |
class function Context: TCipherContext; override; |
/// <summary> |
/// 16 - 256 Rounds, 16 (default) is sufficient, 64 is the official |
/// recommendation. If a value outside the range of 16 to 256 is assigned |
/// it will be limited to that range. |
/// </summary> |
property Rounds: Integer read FRounds write SetRounds; |
end; |
/// <summary> |
/// XTEA is an improved version of the TEA algorithm. |
/// </summary> |
/// <remarks> |
/// In DEC V5.2 at least and in former commits of DEC 6.0 development version |
/// this algorithm was broken due to differences in brackets and thus returned |
/// a different result. It is unclear why nobody reported this as bug yet |
/// but be aware that if you need the old variant for compatibility reasons |
/// you need a commit from before 3rd December 2020. |
/// </remarks> |
TCipher_XTEA = class(TCipher_TEA) |
protected |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
end; |
TCipher_TEAN = class(TCipher_XTEA); |
/// <summary> |
/// XTEA is an improved version of the TEA algorithm. This version is the |
/// old faulty one from DEC 5.2. Use only if necessary for compatibility |
/// reasons! |
/// </summary> |
/// <remarks> |
/// In DEC V5.2 at least and in former commits of DEC 6.0 development version |
/// this algorithm was broken due to differences in brackets and thus returned |
/// a different result. It is unclear why nobody reported this as bug yet |
/// but be aware that if you need the old variant for compatibility reasons |
/// you need a commit from before 3rd December 2020. |
/// </remarks> |
TCipher_XTEA_DEC52 = class(TCipher_TEA) |
protected |
procedure DoEncode(Source, Dest: Pointer; Size: Integer); override; |
procedure DoDecode(Source, Dest: Pointer; Size: Integer); override; |
end; |
implementation |
{$IFOPT Q+}{$DEFINE RESTORE_OVERFLOWCHECKS}{$Q-}{$ENDIF} |
{$IFOPT R+}{$DEFINE RESTORE_RANGECHECKS}{$R-}{$ENDIF} |
uses |
{$IFDEF FPC} |
SysUtils, |
{$ELSE} |
System.SysUtils, |
{$ENDIF} |
DECData, DECDataCipher; |
{ TCipher_Null } |
class function TCipher_Null.Context: TCipherContext; |
begin |
Result.KeySize := 0; |
Result.BlockSize := 1; |
Result.BufferSize := 8; |
Result.AdditionalBufferSize := 0; |
Result.NeedsAdditionalBufferBackup := False; |
Result.MinRounds := 1; |
Result.MaxRounds := 1; |
Result.CipherType := [ctNull, ctSymmetric]; |
end; |
procedure TCipher_Null.DoInit(const Key; Size: Integer); |
begin |
inherited; |
end; |
procedure TCipher_Null.DoEncode(Source, Dest: Pointer; Size: Integer); |
begin |
if Source <> Dest then |
Move(Source^, Dest^, Size); |
end; |
procedure TCipher_Null.DoDecode(Source, Dest: Pointer; Size: Integer); |
begin |
if Source <> Dest then |
Move(Source^, Dest^, Size); |
end; |
{ TCipher_Blowfish } |
class function TCipher_Blowfish.Context: TCipherContext; |
begin |
Result.KeySize := 56; |
Result.BufferSize := 8; |
Result.BlockSize := 8; |
Result.AdditionalBufferSize := SizeOf(Blowfish_Data) + SizeOf(Blowfish_Key); |
Result.NeedsAdditionalBufferBackup := False; |
Result.MinRounds := 1; |
Result.MaxRounds := 1; |
Result.CipherType := [ctSymmetric, ctBlock]; |
end; |
procedure TCipher_Blowfish.DoInit(const Key; Size: Integer); |
var |
I, J: Integer; |
B: array[0..1] of UInt32; |
K: PUInt8Array; |
P: PUInt32Array; |
S: PBlowfish; |
begin |
K := @Key; |
S := FAdditionalBuffer; |
P := Pointer(PByte(FAdditionalBuffer) + SizeOf(Blowfish_Data)); // for Pointer Math |
Move(Blowfish_Data, S^, SizeOf(Blowfish_Data)); |
Move(Blowfish_Key, P^, Sizeof(Blowfish_Key)); |
J := 0; |
if Size > 0 then |
for I := 0 to 17 do |
begin |
P[I] := P[I] xor (K[(J + 0) mod Size] shl 24 + |
K[(J + 1) mod Size] shl 16 + |
K[(J + 2) mod Size] shl 8 + |
K[(J + 3) mod Size] shl 0); |
J := (J + 4) mod Size; |
end; |
FillChar(B, SizeOf(B), 0); |
for I := 0 to 8 do |
begin |
DoEncode(@B, @B, SizeOf(B)); |
P[I * 2 + 0] := SwapUInt32(B[0]); |
P[I * 2 + 1] := SwapUInt32(B[1]); |
end; |
for I := 0 to 3 do |
for J := 0 to 127 do |
begin |
DoEncode(@B, @B, SizeOf(B)); |
S[I, J * 2 + 0] := SwapUInt32(B[0]); |
S[I, J * 2 + 1] := SwapUInt32(B[1]); |
end; |
FillChar(B, SizeOf(B), 0); |
inherited; |
end; |
procedure TCipher_Blowfish.DoEncode(Source, Dest: Pointer; Size: Integer); |
{$IFDEF X86ASM} |
// Source = EDX, Dest = ECX, Size on Stack |
asm |
PUSH EDI |
PUSH ESI |
PUSH EBX |
PUSH EBP |
PUSH ECX |
MOV ESI,[EAX].TCipher_Blowfish.FAdditionalBuffer |
MOV EBX,[EDX + 0] // A |
MOV EBP,[EDX + 4] // B |
BSWAP EBX // CPU >= 486 |
BSWAP EBP |
XOR EBX,[ESI + 4 * 256 * 4] |
XOR EDI,EDI |
@@1: MOV EAX,EBX |
SHR EBX,16 |
MOVZX ECX,BH |
AND EBX,0FFh |
MOV ECX,[ESI + ECX * 4 + 1024 * 0] |
MOV EBX,[ESI + EBX * 4 + 1024 * 1] |
MOVZX EDX,AH |
ADD EBX,ECX |
MOVZX ECX,AL |
MOV EDX,[ESI + EDX * 4 + 1024 * 2] |
MOV ECX,[ESI + ECX * 4 + 1024 * 3] |
XOR EBX,EDX |
XOR EBP,[ESI + 4 * 256 * 4 + 4 + EDI * 4] |
ADD EBX,ECX |
INC EDI |
XOR EBX,EBP |
TEST EDI,010h |
MOV EBP,EAX |
JZ @@1 |
POP EAX |
XOR EBP,[ESI + 4 * 256 * 4 + 17 * 4] |
BSWAP EBX |
BSWAP EBP |
MOV [EAX + 4],EBX |
MOV [EAX + 0],EBP |
POP EBP |
POP EBX |
POP ESI |
POP EDI |
end; |
{$ELSE !X86ASM} |
var |
I, A, B: UInt32; |
P: PUInt32Array; |
D: PBlowfish; |
begin |
Assert(Size = Context.BlockSize, 'Size of ' + IntToStr(Size) + ' does not equal '+ |
'block size of ' + IntToStr(Context.BlockSize)); |
D := Pointer(FAdditionalBuffer); |
P := Pointer(PByte(FAdditionalBuffer) + SizeOf(Blowfish_Data)); // for Pointer Math |
A := SwapUInt32(PUInt32Array(Source)[0]) xor P[0]; P := @P[1]; |
B := SwapUInt32(PUInt32Array(Source)[1]); |
for I := 0 to 7 do |
begin |
{$IFOPT Q+}The following code requires overflow checks being off!{$ENDIF} |
B := B xor P[0] xor (D[0, A shr 24 ] + |
D[1, A shr 16 and $FF] xor |
D[2, A shr 8 and $FF] + |
D[3, A and $FF]); |
A := A xor P[1] xor (D[0, B shr 24 ] + |
D[1, B shr 16 and $FF] xor |
D[2, B shr 8 and $FF] + |
D[3, B and $FF]); |
P := @P[2]; |
end; |
PUInt32Array(Dest)[0] := SwapUInt32(B xor P[0]); |
PUInt32Array(Dest)[1] := SwapUInt32(A); |
end; |
{$ENDIF !X86ASM} |
procedure TCipher_Blowfish.DoDecode(Source, Dest: Pointer; Size: Integer); |
{$IFDEF X86ASM} |
asm |
PUSH EDI |
PUSH ESI |
PUSH EBX |
PUSH EBP |
PUSH ECX |
MOV ESI,[EAX].TCipher_Blowfish.FAdditionalBuffer |
MOV EBX,[EDX + 0] // A |
MOV EBP,[EDX + 4] // B |
BSWAP EBX |
BSWAP EBP |
XOR EBX,[ESI + 4 * 256 * 4 + 17 * 4] |
MOV EDI,16 |
@@1: MOV EAX,EBX |
SHR EBX,16 |
MOVZX ECX,BH |
MOVZX EDX,BL |
MOV EBX,[ESI + ECX * 4 + 1024 * 0] |
MOV EDX,[ESI + EDX * 4 + 1024 * 1] |
MOVZX ECX,AH |
LEA EBX,[EBX + EDX] |
MOVZX EDX,AL |
MOV ECX,[ESI + ECX * 4 + 1024 * 2] |
MOV EDX,[ESI + EDX * 4 + 1024 * 3] |
XOR EBX,ECX |
XOR EBP,[ESI + 4 * 256 * 4 + EDI * 4] |
LEA EBX,[EBX + EDX] |
XOR EBX,EBP |
DEC EDI |
MOV EBP,EAX |
JNZ @@1 |
POP EAX |
XOR EBP,[ESI + 4 * 256 * 4] |
BSWAP EBX |
BSWAP EBP |
MOV [EAX + 0],EBP |
MOV [EAX + 4],EBX |
POP EBP |
POP EBX |
POP ESI |
POP EDI |
end; |
{$ELSE !X86ASM} |
var |
I, A, B: UInt32; |
P: PUInt32Array; |
D: PBlowfish; |
begin |
Assert(Size = Context.BlockSize); |
D := Pointer(FAdditionalBuffer); |
P := Pointer(PByte(FAdditionalBuffer) + SizeOf(Blowfish_Data) + SizeOf(Blowfish_Key) - SizeOf(Int32)); |
A := SwapUInt32(PUInt32Array(Source)[0]) xor P[0]; |
B := SwapUInt32(PUInt32Array(Source)[1]); |
for I := 0 to 7 do |
begin |
Dec(PUInt32(P), 2); |
B := B xor P[1] xor (D[0, A shr 24 ] + |
D[1, A shr 16 and $FF] xor |
D[2, A shr 8 and $FF] + |
D[3, A and $FF]); |
A := A xor P[0] xor (D[0, B shr 24 ] + |
D[1, B shr 16 and $FF] xor |
D[2, B shr 8 and $FF] + |
D[3, B and $FF]); |
end; |
Dec(PUInt32(P)); |
PUInt32Array(Dest)[0] := SwapUInt32(B xor P[0]); |
PUInt32Array(Dest)[1] := SwapUInt32(A); |
end; |
{$ENDIF !X86ASM} |
{ TCipher_Twofish } |
type |
PTwofishBox = ^TTwofishBox; |
TTwofishBox = array[0..3, 0..255] of UInt32; |
TLongRec = record |
case Integer of |
0: (L: UInt32); |
1: (A, B, C, D: Byte); |
end; |
class function TCipher_Twofish.Context: TCipherContext; |
begin |
Result.KeySize := 32; |
Result.BufferSize := 16; |
Result.BlockSize := 16; |
Result.AdditionalBufferSize := 4256; |
Result.NeedsAdditionalBufferBackup := False; |
Result.MinRounds := 1; |
Result.MaxRounds := 1; |
Result.CipherType := [ctSymmetric, ctBlock]; |
end; |
procedure TCipher_Twofish.DoInit(const Key; Size: Integer); |
var |
BoxKey: array[0..3] of TLongRec; |
SubKey: PUInt32Array; |
Box: PTwofishBox; |
procedure SetupKey; |
function Encode(K0, K1: Integer): Integer; |
var |
R, I, J, G2, G3: Integer; |
B: byte; |
begin |
R := 0; |
for I := 0 to 1 do |
begin |
if I <> 0 then |
R := R xor K0 |
else |
R := R xor K1; |
for J := 0 to 3 do |
begin |
B := R shr 24; |
if B and $80 <> 0 then |
G2 := (B shl 1 xor $014D) and $FF |
else |
G2 := B shl 1 and $FF; |
if B and 1 <> 0 then |
G3 := (B shr 1 and $7F) xor $014D shr 1 xor G2 |
else |
G3 := (B shr 1 and $7F) xor G2; |
R := R shl 8 xor G3 shl 24 xor G2 shl 16 xor G3 shl 8 xor B; |
end; |
end; |
Result := R; |
end; |
function F32(X: Integer; K: array of Integer): Integer; |
var |
A, B, C, D: UInt32; |
begin |
A := X and $FF; |
B := X shr 8 and $FF; |
C := X shr 16 and $FF; |
D := X shr 24; |
if Size = 32 then |
begin |
A := Twofish_8x8[1, A] xor K[3] and $FF; |
B := Twofish_8x8[0, B] xor K[3] shr 8 and $FF; |
C := Twofish_8x8[0, C] xor K[3] shr 16 and $FF; |
D := Twofish_8x8[1, D] xor K[3] shr 24; |
end; |
if Size >= 24 then |
begin |
A := Twofish_8x8[1, A] xor K[2] and $FF; |
B := Twofish_8x8[1, B] xor K[2] shr 8 and $FF; |
C := Twofish_8x8[0, C] xor K[2] shr 16 and $FF; |
D := Twofish_8x8[0, D] xor K[2] shr 24; |
end; |
A := Twofish_8x8[0, A] xor K[1] and $FF; |
B := Twofish_8x8[1, B] xor K[1] shr 8 and $FF; |
C := Twofish_8x8[0, C] xor K[1] shr 16 and $FF; |
D := Twofish_8x8[1, D] xor K[1] shr 24; |
A := Twofish_8x8[0, A] xor K[0] and $FF; |
B := Twofish_8x8[0, B] xor K[0] shr 8 and $FF; |
C := Twofish_8x8[1, C] xor K[0] shr 16 and $FF; |
D := Twofish_8x8[1, D] xor K[0] shr 24; |
Result := Twofish_Data[0, A] xor Twofish_Data[1, B] xor |
Twofish_Data[2, C] xor Twofish_Data[3, D]; |
end; |
var |
I, J, A, B: Integer; |
E, O: array[0..3] of Integer; |
K: array[0..7] of Integer; |
begin |
FillChar(K, SizeOf(K), 0); |
Move(Key, K, Size); |
if Size <= 16 then |
Size := 16 |
else |
if Size <= 24 then |
Size := 24 |
else |
Size := 32; |
J := Size shr 3 - 1; |
for I := 0 to J do |
begin |
E[I] := K[I shl 1]; |
O[I] := K[I shl 1 + 1]; |
BoxKey[J].L := Encode(E[I], O[I]); |
Dec(J); |
end; |
J := 0; |
for I := 0 to 19 do |
begin |
A := F32(J, E); |
B := F32(J + $01010101, O); |
B := B shl 8 or B shr 24; |
SubKey[I shl 1] := A + B; |
B := A + B shl 1; // here buggy instead shr 1 it's correct shl 1 |
SubKey[I shl 1 + 1] := B shl 9 or B shr 23; |
Inc(J, $02020202); |
end; |
end; |
procedure DoXOR(D, S: PUInt32Array; Value: UInt32); |
var |
I: UInt32; |
begin |
Value := (Value and $FF) * $01010101; |
for I := 0 to 63 do |
D[I] := S[I] xor Value; |
end; |
procedure SetupBox128; |
var |
L: array[0..255] of Byte; |
A, I: Integer; |
begin |
DoXOR(@L, @Twofish_8x8[0], BoxKey[1].L); |
A := BoxKey[0].A; |
for I := 0 to 255 do |
Box[0, I] := Twofish_Data[0, Twofish_8x8[0, L[I]] xor A]; |
DoXOR(@L, @Twofish_8x8[1], BoxKey[1].L shr 8); |
A := BoxKey[0].B; |
for I := 0 to 255 do |
Box[1, I] := Twofish_Data[1, Twofish_8x8[0, L[I]] xor A]; |
DoXOR(@L, @Twofish_8x8[0], BoxKey[1].L shr 16); |
A := BoxKey[0].C; |
for I := 0 to 255 do |
Box[2, I] := Twofish_Data[2, Twofish_8x8[1, L[I]] xor A]; |
DoXOR(@L, @Twofish_8x8[1], BoxKey[1].L shr 24); |
A := BoxKey[0].D; |
for I := 0 to 255 do |
Box[3, I] := Twofish_Data[3, Twofish_8x8[1, L[I]] xor A]; |
end; |
procedure SetupBox192; |
var |
L: array[0..255] of Byte; |
A, B, I: Integer; |
begin |
DoXOR(@L, @Twofish_8x8[1], BoxKey[2].L); |
A := BoxKey[0].A; |
B := BoxKey[1].A; |
for I := 0 to 255 do |
Box[0, I] := Twofish_Data[0, Twofish_8x8[0, Twofish_8x8[0, L[I]] xor B] xor A]; |
DoXOR(@L, @Twofish_8x8[1], BoxKey[2].L shr 8); |
A := BoxKey[0].B; |
B := BoxKey[1].B; |
for I := 0 to 255 do |
Box[1, I] := Twofish_Data[1, Twofish_8x8[0, Twofish_8x8[1, L[I]] xor B] xor A]; |
DoXOR(@L, @Twofish_8x8[0], BoxKey[2].L shr 16); |
A := BoxKey[0].C; |
B := BoxKey[1].C; |
for I := 0 to 255 do |
Box[2, I] := Twofish_Data[2, Twofish_8x8[1, Twofish_8x8[0, L[I]] xor B] xor A]; |
DoXOR(@L ,@Twofish_8x8[0], BoxKey[2].L shr 24); |
A := BoxKey[0].D; |
B := BoxKey[1].D; |
for I := 0 to 255 do |
Box[3, I] := Twofish_Data[3, Twofish_8x8[1, Twofish_8x8[1, L[I]] xor B] xor A]; |
end; |
procedure SetupBox256; |
var |
L: array[0..255] of Byte; |
K: array[0..255] of Byte; |
A, B, I: Integer; |
begin |
DoXOR(@K, @Twofish_8x8[1], BoxKey[3].L); |
for I := 0 to 255 do |
L[I] := Twofish_8x8[1, K[I]]; |
DoXOR(@L, @L, BoxKey[2].L); |
A := BoxKey[0].A; |
B := BoxKey[1].A; |
for I := 0 to 255 do |
Box[0, I] := Twofish_Data[0, Twofish_8x8[0, Twofish_8x8[0, L[I]] xor B] xor A]; |
DoXOR(@K, @Twofish_8x8[0], BoxKey[3].L shr 8); |
for I := 0 to 255 do |
L[I] := Twofish_8x8[1, K[I]]; |
DoXOR(@L, @L, BoxKey[2].L shr 8); |
A := BoxKey[0].B; |
B := BoxKey[1].B; |
for I := 0 to 255 do |
Box[1, I] := Twofish_Data[1, Twofish_8x8[0, Twofish_8x8[1, L[I]] xor B] xor A]; |
DoXOR(@K, @Twofish_8x8[0], BoxKey[3].L shr 16); |
for I := 0 to 255 do |
L[I] := Twofish_8x8[0, K[I]]; |
DoXOR(@L, @L, BoxKey[2].L shr 16); |
A := BoxKey[0].C; |
B := BoxKey[1].C; |
for I := 0 to 255 do |
Box[2, I] := Twofish_Data[2, Twofish_8x8[1, Twofish_8x8[0, L[I]] xor B] xor A]; |
DoXOR(@K, @Twofish_8x8[1], BoxKey[3].L shr 24); |
for I := 0 to 255 do |
L[I] := Twofish_8x8[0, K[I]]; |
DoXOR(@L, @L, BoxKey[2].L shr 24); |
A := BoxKey[0].D; |
B := BoxKey[1].D; |
for I := 0 to 255 do |
Box[3, I] := Twofish_Data[3, Twofish_8x8[1, Twofish_8x8[1, L[I]] xor B] xor A]; |
end; |
begin |
SubKey := FAdditionalBuffer; |
Box := @SubKey[40]; |
SetupKey; |
if Size = 16 then |
SetupBox128 |
else |
if Size = 24 then |
SetupBox192 |
else |
SetupBox256; |
inherited; |
end; |
procedure TCipher_Twofish.DoEncode(Source, Dest: Pointer; Size: Integer); |
var |
S: PUInt32Array; |
Box: PTwofishBox; |
I, X, Y: UInt32; |
A, B, C, D: TLongRec; |
begin |
Assert(Size = Context.BlockSize); |
S := FAdditionalBuffer; |
A.L := PUInt32Array(Source)[0] xor S[0]; |
B.L := PUInt32Array(Source)[1] xor S[1]; |
C.L := PUInt32Array(Source)[2] xor S[2]; |
D.L := PUInt32Array(Source)[3] xor S[3]; |
Box := @S[40]; |
S := @S[8]; |
for I := 0 to 7 do |
begin |
X := Box[0, A.A] xor Box[1, A.B] xor Box[2, A.C] xor Box[3, A.D]; |
Y := Box[1, B.A] xor Box[2, B.B] xor Box[3, B.C] xor Box[0, B.D]; |
D.L := D.L shl 1 or D.L shr 31; |
C.L := C.L xor (X + Y + S[0]); |
D.L := D.L xor (X + Y shl 1 + S[1]); |
C.L := C.L shr 1 or C.L shl 31; |
X := Box[0, C.A] xor Box[1, C.B] xor Box[2, C.C] xor Box[3, C.D]; |
Y := Box[1, D.A] xor Box[2, D.B] xor Box[3, D.C] xor Box[0, D.D]; |
B.L := B.L shl 1 or B.L shr 31; |
A.L := A.L xor (X + Y + S[2]); |
B.L := B.L xor (X + Y shl 1 + S[3]); |
A.L := A.L shr 1 or A.L shl 31; |
S := @S[4]; |
end; |
S := FAdditionalBuffer; |
PUInt32Array(Dest)[0] := C.L xor S[4]; |
PUInt32Array(Dest)[1] := D.L xor S[5]; |
PUInt32Array(Dest)[2] := A.L xor S[6]; |
PUInt32Array(Dest)[3] := B.L xor S[7]; |
end; |
procedure TCipher_Twofish.DoDecode(Source, Dest: Pointer; Size: Integer); |
var |
S: PUInt32Array; |
Box: PTwofishBox; |
I, X, Y: UInt32; |
A, B, C, D: TLongRec; |
begin |
Assert(Size = Context.BlockSize); |
S := FAdditionalBuffer; |
Box := @S[40]; |
C.L := PUInt32Array(Source)[0] xor S[4]; |
D.L := PUInt32Array(Source)[1] xor S[5]; |
A.L := PUInt32Array(Source)[2] xor S[6]; |
B.L := PUInt32Array(Source)[3] xor S[7]; |
S := @S[36]; |
for I := 0 to 7 do |
begin |
X := Box[0, C.A] xor Box[1, C.B] xor Box[2, C.C] xor Box[3, C.D]; |
Y := Box[0, D.D] xor Box[1, D.A] xor Box[2, D.B] xor Box[3, D.C]; |
A.L := A.L shl 1 or A.L shr 31; |
B.L := B.L xor (X + Y shl 1 + S[3]); |
A.L := A.L xor (X + Y + S[2]); |
B.L := B.L shr 1 or B.L shl 31; |
X := Box[0, A.A] xor Box[1, A.B] xor Box[2, A.C] xor Box[3, A.D]; |
Y := Box[0, B.D] xor Box[1, B.A] xor Box[2, B.B] xor Box[3, B.C]; |
C.L := C.L shl 1 or C.L shr 31; |
D.L := D.L xor (X + Y shl 1 + S[1]); |
C.L := C.L xor (X + Y + S[0]); |
D.L := D.L shr 1 or D.L shl 31; |
Dec(PUInt32(S), 4); |
end; |
S := FAdditionalBuffer; |
PUInt32Array(Dest)[0] := A.L xor S[0]; |
PUInt32Array(Dest)[1] := B.L xor S[1]; |
PUInt32Array(Dest)[2] := C.L xor S[2]; |
PUInt32Array(Dest)[3] := D.L xor S[3]; |
end; |
{ TCipher_IDEA } |
class function TCipher_IDEA.Context: TCipherContext; |
begin |
Result.KeySize := 16; |
Result.BufferSize := 8; |
Result.BlockSize := 8; |
Result.AdditionalBufferSize := 208; |
Result.NeedsAdditionalBufferBackup := False; |
Result.MinRounds := 1; |
Result.MaxRounds := 1; |
Result.CipherType := [ctSymmetric, ctBlock]; |
end; |
procedure TCipher_IDEA.DoInit(const Key; Size: Integer); |
function IDEAInv(X: Word): Word; |
var |
A, B, C, D: Word; |
begin |
if X <= 1 then |
begin |
Result := X; |
Exit; |
end; |
A := 1; |
B := $10001 div X; |
C := $10001 mod X; |
while C <> 1 do |
begin |
D := X div C; |
X := X mod C; |
Inc(A, B * D); |
if X = 1 then |
begin |
Result := A; |
Exit; |
end; |
D := C div X; |
C := C mod X; |
Inc(B, A * D); |
end; |
Result := 1 - B; |
end; |
var |
I: Integer; |
E: PWordArray; |
A, B, C: Word; |
K, D: PWordArray; |
begin |
E := FAdditionalBuffer; |
Move(Key, E^, Size); |
for I := 0 to 7 do |
E[I] := Swap(E[I]); |
for I := 0 to 39 do |
E[I + 8] := E[I and not 7 + (I + 1) and 7] shl 9 or |
E[I and not 7 + (I + 2) and 7] shr 7; |
for I := 41 to 44 do |
E[I + 7] := E[I] shl 9 or E[I + 1] shr 7; |
K := E; |
D := @E[100]; |
A := IDEAInv(K[0]); |
B := 0 - K[1]; |
C := 0 - K[2]; |
D[3] := IDEAInv(K[3]); |
D[2] := C; |
D[1] := B; |
D[0] := A; |
Inc(PWord(K), 4); |
for I := 1 to 8 do |
begin |
Dec(PWord(D), 6); |
A := K[0]; |
D[5] := K[1]; |
D[4] := A; |
A := IDEAInv(K[2]); |
B := 0 - K[3]; |
C := 0 - K[4]; |
D[3] := IDEAInv(K[5]); |
D[2] := B; |
D[1] := C; |
D[0] := A; |
Inc(PWord(K), 6); |
end; |
A := D[2]; |
D[2] := D[1]; |
D[1] := A; |
inherited; |
end; |
function IDEAMul(X, Y: UInt32): UInt32; |
{$IF defined(X86ASM) or defined(X64ASM)} |
asm |
{$IFDEF X64ASM} |
MOV EAX,ECX |
{$ENDIF X64ASM} |
AND EAX,0FFFFh |
JZ @@1 |
AND EDX,0FFFFh |
JZ @@1 |
MUL EDX |
MOV EDX,EAX |
MOV ECX,EAX |
SHR EDX,16 |
SUB EAX,EDX |
SUB CX,AX |
ADC EAX,0 |
RET |
@@1: LEA EAX,[EAX + EDX - 1] |
NEG EAX |
end; |
{$ELSE} |
begin |
X := X and $FFFF; |
if X <> 0 then |
begin |
Y := Y and $FFFF; |
if Y <> 0 then |
begin |
X := X * Y; |
Result := X - (X shr 16); |
if Word(X) < Word(Result) then // carry flag check for "sub cx,ax" |
Inc(Result); |
Exit; |
end; |
end; |
Result := -(X + Y - 1); |
end; |
{$IFEND} |
procedure IDEACipher(Source, Dest: PUInt32Array; Key: PWordArray); |
var |
I: UInt32; |
X, Y, A, B, C, D: UInt32; |
begin |
I := SwapUInt32(Source[0]); |
A := I shr 16; |
B := I and $FFFF; |
I := SwapUInt32(Source[1]); |
C := I shr 16; |
D := I and $FFFF; |
for I := 0 to 7 do |
begin |
A := IDEAMul(A, Key[0]); |
Inc(B, Key[1]); |
Inc(C, Key[2]); |
D := IDEAMul(D, Key[3]); |
Y := C xor A; |
Y := IDEAMul(Y, Key[4]); |
X := B xor D + Y; |
X := IDEAMul(X, Key[5]); |
Inc(Y, X); |
A := A xor X; |
D := D xor Y; |
Y := B xor Y; |
B := C xor X; |
C := Y; |
Key := @Key[6]; |
end; |
Dest[0] := SwapUInt32(IDEAMul(A, Key[0]) shl 16 or (C + Key[1]) and $FFFF); |
Dest[1] := SwapUInt32((B + Key[2]) shl 16 or IDEAMul(D, Key[3]) and $FFFF); |
end; |
procedure TCipher_IDEA.DoEncode(Source, Dest: Pointer; Size: Integer); |
begin |
Assert(Size = Context.BlockSize); |
IDEACipher(Source, Dest, FAdditionalBuffer); |
end; |
procedure TCipher_IDEA.DoDecode(Source, Dest: Pointer; Size: Integer); |
begin |
Assert(Size = Context.BlockSize); |
IDEACipher(Source, Dest, @PUInt32Array(FAdditionalBuffer)[26]); |
end; |
{ TCipher_Cast256 } |
class function TCipher_Cast256.Context: TCipherContext; |
begin |
Result.KeySize := 32; |
Result.BlockSize := 16; |
Result.BufferSize := 16; |
Result.AdditionalBufferSize := 384; |
Result.NeedsAdditionalBufferBackup := False; |
Result.MinRounds := 1; |
Result.MaxRounds := 1; |
Result.CipherType := [ctSymmetric, ctBlock]; |
end; |
procedure TCipher_Cast256.DoInit(const Key; Size: Integer); |
var |
X: array[0..7] of UInt32; |
M, R, I, J, T: UInt32; |
K: PUInt32Array; |
begin |
FillChar(X, SizeOf(X), 0); |
Move(Key, X, Size); |
SwapUInt32Buffer(X, X, 8); |
K := FAdditionalBuffer; |
M := $5A827999; |
R := 19; |
for I := 0 to 11 do |
begin |
for J := 0 to 1 do |
begin |
T := M + X[7]; |
T := T shl R or T shr (32 - R); |
X[6] := X[6] xor (Cast256_Data[0, T shr 24] xor |
Cast256_Data[1, T shr 16 and $FF] - |
Cast256_Data[2, T shr 8 and $FF] + |
Cast256_Data[3, T and $FF]); |
Inc(M, $6ED9EBA1); |
Inc(R, 17); |
T := M xor X[6]; |
T := T shl R or T shr (32 - R); |
X[5] := X[5] xor (Cast256_Data[0, T shr 24] - |
Cast256_Data[1, T shr 16 and $FF] + |
Cast256_Data[2, T shr 8 and $FF] xor |
Cast256_Data[3, T and $FF]); |
Inc(M, $6ED9EBA1); |
Inc(R, 17); |
T := M - X[5]; |
T := T shl R or T shr (32 - R); |
X[4] := X[4] xor (Cast256_Data[0, T shr 24] + |
Cast256_Data[1, T shr 16 and $FF] xor |
Cast256_Data[2, T shr 8 and $FF] - |
Cast256_Data[3, T and $FF]); |
Inc(M, $6ED9EBA1); |
Inc(R, 17); |
T := M + X[4]; |
T := T shl R or T shr (32 - R); |
X[3] := X[3] xor (Cast256_Data[0, T shr 24] xor |
Cast256_Data[1, T shr 16 and $FF] - |
Cast256_Data[2, T shr 8 and $FF] + |
Cast256_Data[3, T and $FF]); |
Inc(M, $6ED9EBA1); |
Inc(R, 17); |
T := M xor X[3]; |
T := T shl R or T shr (32 - R); |
X[2] := X[2] xor (Cast256_Data[0, T shr 24] - |
Cast256_Data[1, T shr 16 and $FF] + |
Cast256_Data[2, T shr 8 and $FF] xor |
Cast256_Data[3, T and $FF]); |
Inc(M, $6ED9EBA1); |
Inc(R, 17); |
T := M - X[2]; |
T := T shl R or T shr (32 - R); |
X[1] := X[1] xor (Cast256_Data[0, T shr 24] + |
Cast256_Data[1, T shr 16 and $FF] xor |
Cast256_Data[2, T shr 8 and $FF] - |
Cast256_Data[3, T and $FF]); |
Inc(M, $6ED9EBA1); |
Inc(R, 17); |
T := M + X[1]; |
T := T shl R or T shr (32 - R); |
X[0] := X[0] xor (Cast256_Data[0, T shr 24] xor |
Cast256_Data[1, T shr 16 and $FF] - |
Cast256_Data[2, T shr 8 and $FF] + |
Cast256_Data[3, T and $FF]); |
Inc(M, $6ED9EBA1); |
Inc(R, 17); |
T := M xor X[0]; |
T := T shl R or T shr (32 - R); |
X[7] := X[7] xor (Cast256_Data[0, T shr 24] - |
Cast256_Data[1, T shr 16 and $FF] + |
Cast256_Data[2, T shr 8 and $FF] xor |
Cast256_Data[3, T and $FF]); |
Inc(M, $6ED9EBA1); |
Inc(R, 17); |
end; |
if I < 6 then |
begin |
K[48] := X[0] and $1F; |
K[49] := X[2] and $1F; |
K[50] := X[4] and $1F; |
K[51] := X[6] and $1F; |
K[0] := X[7]; |
K[1] := X[5]; |
K[2] := X[3]; |
K[3] := X[1]; |
end |
else |
begin |
K[48] := X[6] and $1F; |
K[49] := X[4] and $1F; |
K[50] := X[2] and $1F; |
K[51] := X[0] and $1F; |
K[0] := X[1]; |
K[1] := X[3]; |
K[2] := X[5]; |
K[3] := X[7]; |
end; |
K := @K[4]; |
end; |
ProtectBuffer(X, SizeOf(X)); |
inherited; |
end; |
procedure TCipher_Cast256.DoEncode(Source, Dest: Pointer; Size: Integer); |
var |
I, T, A, B, C, D: UInt32; |
K: PUInt32Array; |
begin |
Assert(Size = Context.BlockSize); |
K := FAdditionalBuffer; |
SwapUInt32Buffer(Source^, Dest^, 4); |
A := PUInt32Array(Dest)[0]; |
B := PUInt32Array(Dest)[1]; |
C := PUInt32Array(Dest)[2]; |
D := PUInt32Array(Dest)[3]; |
for I := 0 to 5 do |
begin |
T := K[0] + D; |
T := T shl K[48] or T shr (32 - K[48]); |
C := C xor (Cast256_Data[0, T shr 24] xor |
Cast256_Data[1, T shr 16 and $FF] - |
Cast256_Data[2, T shr 8 and $FF] + |
Cast256_Data[3, T and $FF]); |
T := K[1] xor C; |
T := T shl K[49] or T shr (32 - K[49]); |
B := B xor (Cast256_Data[0, T shr 24] - |
Cast256_Data[1, T shr 16 and $FF] + |
Cast256_Data[2, T shr 8 and $FF] xor |
Cast256_Data[3, T and $FF]); |
T := K[2] - B; |
T := T shl K[50] or T shr (32 - K[50]); |
A := A xor (Cast256_Data[0, T shr 24] + |
Cast256_Data[1, T shr 16 and $FF] xor |
Cast256_Data[2, T shr 8 and $FF] - |
Cast256_Data[3, T and $FF]); |
T := K[3] + A; |
T := T shl K[51] or T shr (32 - K[51]); |
D := D xor (Cast256_Data[0, T shr 24] xor |
Cast256_Data[1, T shr 16 and $FF] - |
Cast256_Data[2, T shr 8 and $FF] + |
Cast256_Data[3, T and $FF]); |
K := @K[4]; |
end; |
for I := 0 to 5 do |
begin |
T := K[0] + A; |
T := T shl K[48] or T shr (32 - K[48]); |
D := D xor (Cast256_Data[0, T shr 24] xor |
Cast256_Data[1, T shr 16 and $FF] - |
Cast256_Data[2, T shr 8 and $FF] + |
Cast256_Data[3, T and $FF]); |
T := K[1] - B; |
T := T shl K[49] or T shr (32 - K[49]); |
A := A xor (Cast256_Data[0, T shr 24] + |
Cast256_Data[1, T shr 16 and $FF] xor |
Cast256_Data[2, T shr 8 and $FF] - |
Cast256_Data[3, T and $FF]); |
T := K[2] xor C; |
T := T shl K[50] or T shr (32 - K[50]); |
B := B xor (Cast256_Data[0, T shr 24] - |
Cast256_Data[1, T shr 16 and $FF] + |
Cast256_Data[2, T shr 8 and $FF] xor |
Cast256_Data[3, T and $FF]); |
T := K[3] + D; |
T := T shl K[51] or T shr (32 - K[51]); |
C := C xor (Cast256_Data[0, T shr 24] xor |
Cast256_Data[1, T shr 16 and $FF] - |
Cast256_Data[2, T shr 8 and $FF] + |
Cast256_Data[3, T and $FF]); |
K := @K[4]; |
end; |
PUInt32Array(Dest)[0] := A; |
PUInt32Array(Dest)[1] := B; |
PUInt32Array(Dest)[2] := C; |
PUInt32Array(Dest)[3] := D; |
SwapUInt32Buffer(Dest^, Dest^, 4); |
end; |
procedure TCipher_Cast256.DoDecode(Source, Dest: Pointer; Size: Integer); |
var |
I, T, A, B, C, D: UInt32; |
K: PUInt32Array; |
begin |
Assert(Size = Context.BlockSize); |
K := @PUInt32Array(FAdditionalBuffer)[44]; |
SwapUInt32Buffer(Source^, Dest^, 4); |
A := PUInt32Array(Dest)[0]; |
B := PUInt32Array(Dest)[1]; |
C := PUInt32Array(Dest)[2]; |
D := PUInt32Array(Dest)[3]; |
for I := 0 to 5 do |
begin |
T := K[3] + D; |
T := T shl K[51] or T shr (32 - K[51]); |
C := C xor (Cast256_Data[0, T shr 24] xor |
Cast256_Data[1, T shr 16 and $FF] - |
Cast256_Data[2, T shr 8 and $FF] + |
Cast256_Data[3, T and $FF]); |
T := K[2] xor C; |
T := T shl K[50] or T shr (32 - K[50]); |
B := B xor (Cast256_Data[0, T shr 24] - |
Cast256_Data[1, T shr 16 and $FF] + |
Cast256_Data[2, T shr 8 and $FF] xor |
Cast256_Data[3, T and $FF]); |
T := K[1] - B; |
T := T shl K[49] or T shr (32 - K[49]); |
A := A xor (Cast256_Data[0, T shr 24] + |
Cast256_Data[1, T shr 16 and $FF] xor |
Cast256_Data[2, T shr 8 and $FF] - |
Cast256_Data[3, T and $FF]); |
T := K[0] + A; |
T := T shl K[48] or T shr (32 - K[48]); |
D := D xor (Cast256_Data[0, T shr 24] xor |
Cast256_Data[1, T shr 16 and $FF] - |
Cast256_Data[2, T shr 8 and $FF] + |
Cast256_Data[3, T and $FF]); |
Dec(PUInt32(K), 4); |
end; |
for I := 0 to 5 do |
begin |
T := K[3] + A; |
T := T shl K[51] or T shr (32 - K[51]); |
D := D xor (Cast256_Data[0, T shr 24] xor |
Cast256_Data[1, T shr 16 and $FF] - |
Cast256_Data[2, T shr 8 and $FF] + |
Cast256_Data[3, T and $FF]); |
T := K[2] - B; |
T := T shl K[50] or T shr (32 - K[50]); |
A := A xor (Cast256_Data[0, T shr 24] + |
Cast256_Data[1, T shr 16 and $FF] xor |
Cast256_Data[2, T shr 8 and $FF] - |
Cast256_Data[3, T and $FF]); |
T := K[1] xor C; |
T := T shl K[49] or T shr (32 - K[49]); |
B := B xor (Cast256_Data[0, T shr 24] - |
Cast256_Data[1, T shr 16 and $FF] + |
Cast256_Data[2, T shr 8 and $FF] xor |
Cast256_Data[3, T and $FF]); |
T := K[0] + D; |
T := T shl K[48] or T shr (32 - K[48]); |
C := C xor (Cast256_Data[0, T shr 24] xor |
Cast256_Data[1, T shr 16 and $FF] - |
Cast256_Data[2, T shr 8 and $FF] + |
Cast256_Data[3, T and $FF]); |
Dec(PUInt32(K), 4); |
end; |
PUInt32Array(Dest)[0] := A; |
PUInt32Array(Dest)[1] := B; |
PUInt32Array(Dest)[2] := C; |
PUInt32Array(Dest)[3] := D; |
SwapUInt32Buffer(Dest^, Dest^, 4); |
end; |
{ TCipher_Mars } |
class function TCipher_Mars.Context: TCipherContext; |
begin |
Result.KeySize := 56; |
Result.BlockSize := 16; |
Result.BufferSize := 16; |
Result.AdditionalBufferSize := 160; |
Result.NeedsAdditionalBufferBackup := False; |
Result.MinRounds := 1; |
Result.MaxRounds := 1; |
Result.CipherType := [ctSymmetric, ctBlock]; |
end; |
procedure TCipher_Mars.DoInit(const Key; Size: Integer); |
var |
B: PUInt32Array; |
function FixKey(K, R: UInt32): UInt32; |
var |
M1, M2: UInt32; |
I: UInt32; |
begin |
I := K and 3; |
K := K or 3; |
M1 := not K xor (K shl 1); |
M2 := M1 and (M1 shl 1); |
M2 := M2 and (M2 shl 2); |
M2 := M2 and (M2 shl 4); |
M2 := M2 and (M1 shl 8); |
M2 := M2 and $FFFFFE00; |
if M2 = 0 then |
begin |
Result := K; |
Exit; |
end; |
M1 := M2 or (M2 shr 1); |
M1 := M1 or (M1 shr 2); |
M1 := M1 or (M2 shr 4); |
M1 := M1 or (M1 shr 5); |
M1 := M1 and ((not K xor (K shl 1)) and (not K xor (K shr 1)) and $7FFFFFFC); |
Result := K xor ((B[265 + I] shl R or B[265 + I] shr (32 - R)) and M1); |
end; |
var |
T: array[0..14] of UInt32; |
I, J, L: UInt32; |
U: UInt32; |
K: PUInt32Array; |
begin |
K := FAdditionalBuffer; |
B := @Mars_Data; |
FillChar(T, SizeOf(T), 0); |
Move(Key, T, Size); |
Size := Size div 4; |
T[Size] := Size; |
for J := 0 to 3 do |
begin |
for I := 0 to 14 do |
begin |
U := T[(I + 8) mod 15] xor T[(I + 13) mod 15]; |
T[I] := T[I] xor (U shl 3 or U shr 29) xor (I * 4 + J); |
end; |
for L := 0 to 3 do |
begin |
for I := 0 to 14 do |
begin |
Inc(T[I], B[T[(I + 14) mod 15] and $1FF]); |
T[I] := T[I] shl 9 or T[I] shr 23; |
end; |
end; |
for I := 0 to 9 do |
K[(J * 10) + I] := T[(I * 4) mod 15]; |
end; |
I := 5; |
repeat |
K[I] := FixKey(K[I], K[I - 1]); |
Inc(I, 2); |
until I >= 37; |
inherited; |
end; |
procedure TCipher_Mars.DoEncode(Source, Dest: Pointer; Size: Integer); |
var |
K: PUInt32Array; |
I, L, R, A, B, C, D: UInt32; |
begin |
Assert(Size = Context.BlockSize); |
K := FAdditionalBuffer; |
A := PUInt32Array(Source)[0] + K[0]; |
B := PUInt32Array(Source)[1] + K[1]; |
C := PUInt32Array(Source)[2] + K[2]; |
D := PUInt32Array(Source)[3] + K[3]; |
K := @K[4]; |
for I := 0 to 1 do |
begin |
B := B xor Mars_Data[A and $FF] + Mars_Data[A shr 8 and $FF + 256]; |
Inc(C, Mars_Data[A shr 16 and $FF]); |
D := D xor Mars_Data[A shr 24 + 256]; |
A := (A shr 24 or A shl 8) + D; |
C := C xor Mars_Data[B and $FF] + Mars_Data[B shr 8 and $FF + 256]; |
Inc(D, Mars_Data[B shr 16 and $FF]); |
A := A xor Mars_Data[B shr 24 + 256]; |
B := (B shr 24 or B shl 8) + C; |
D := D xor Mars_Data[C and $FF] + Mars_Data[C shr 8 and $FF + 256]; |
Inc(A, Mars_Data[C shr 16 and $FF]); |
B := B xor Mars_Data[C shr 24 + 256]; |
C := C shr 24 or C shl 8; |
A := A xor Mars_Data[D and $FF] + Mars_Data[D shr 8 and $FF + 256]; |
Inc(B, Mars_Data[D shr 16 and $FF]); |
C := C xor Mars_Data[D shr 24 + 256]; |
D := D shr 24 or D shl 8; |
end; |
for I := 0 to 3 do |
begin |
L := A + K[0]; |
A := A shl 13 or A shr 19; |
R := A * K[1]; |
R := R shl 5 or R shr 27; |
Inc(C, L shl R or L shr (32 - R)); |
L := Mars_Data[L and $1FF] xor R; |
R := R shl 5 or R shr 27; |
L := L xor R; |
L := L shl R or L shr (32 - R); |
if I <= 1 then |
begin |
Inc(B, L); |
D := D xor R; |
end |
else |
begin |
Inc(D, L); |
B := B xor R; |
end; |
L := B + K[2]; |
B := B shl 13 or B shr 19; |
R := B * K[3]; |
R := R shl 5 or R shr 27; |
Inc(D, L shl R or L shr (32 - R)); |
L := Mars_Data[L and $1FF] xor R; |
R := R shl 5 or R shr 27; |
L := L xor R; |
L := L shl R or L shr (32 - R); |
if I <= 1 then |
begin |
Inc(C, L); |
A := A xor R; |
end |
else |
begin |
Inc(A, L); |
C := C xor R; |
end; |
L := C + K[4]; |
C := C shl 13 or C shr 19; |
R := C * K[5]; |
R := R shl 5 or R shr 27; |
Inc(A, L shl R or L shr (32 - R)); |
L := Mars_Data[L and $1FF] xor R; |
R := R shl 5 or R shr 27; |
L := L xor R; |
L := L shl R or L shr (32 - R); |
if I <= 1 then |
begin |
Inc(D, L); |
B := B xor R; |
end |
else |
begin |
Inc(B, L); |
D := D xor R; |
end; |
L := D + K[6]; |
D := D shl 13 or D shr 19; |
R := D * K[7]; |
R := R shl 5 or R shr 27; |
Inc(B, L shl R or L shr (32 - R)); |
L := Mars_Data[L and $1FF] xor R; |
R := R shl 5 or R shr 27; |
L := L xor R; |
L := L shl R or L shr (32 - R); |
if I <= 1 then |
begin |
Inc(A, L); |
C := C xor R; |
end |
else |
begin |
Inc(C, L); |
A := A xor R; |
end; |
K := @K[8]; |
end; |
for I := 0 to 1 do |
begin |
B := B xor Mars_Data[A and $FF + 256]; |
Dec(C, Mars_Data[A shr 24]); |
D := D - Mars_Data[A shr 16 and $FF + 256] xor Mars_Data[A shr 8 and $FF]; |
A := A shl 24 or A shr 8; |
C := C xor Mars_Data[B and $FF + 256]; |
Dec(D, Mars_Data[B shr 24]); |
A := A - Mars_Data[B shr 16 and $FF + 256] xor Mars_Data[B shr 8 and $FF]; |
B := B shl 24 or B shr 8; |
Dec(C, B); |
D := D xor Mars_Data[C and $FF + 256]; |
Dec(A, Mars_Data[C shr 24]); |
B := B - Mars_Data[C shr 16 and $FF + 256] xor Mars_Data[C shr 8 and $FF]; |
C := C shl 24 or C shr 8; |
Dec(D, A); |
A := A xor Mars_Data[D and $FF + 256]; |
Dec(B, Mars_Data[D shr 24]); |
C := C - Mars_Data[D shr 16 and $FF + 256] xor Mars_Data[D shr 8 and $FF]; |
D := D shl 24 or D shr 8; |
end; |
PUInt32Array(Dest)[0] := A - K[0]; |
PUInt32Array(Dest)[1] := B - K[1]; |
PUInt32Array(Dest)[2] := C - K[2]; |
PUInt32Array(Dest)[3] := D - K[3]; |
end; |
procedure TCipher_Mars.DoDecode(Source, Dest: Pointer; Size: Integer); |
var |
K: PUInt32Array; |
I, L, R, A, B, C, D: UInt32; |
begin |
Assert(Size = Context.BlockSize); |
K := @PUInt32Array(FAdditionalBuffer)[28]; |
A := PUInt32Array(Source)[0] + K[8]; |
B := PUInt32Array(Source)[1] + K[9]; |
C := PUInt32Array(Source)[2] + K[10]; |
D := PUInt32Array(Source)[3] + K[11]; |
for I := 0 to 1 do |
begin |
D := D shr 24 or D shl 8; |
C := C xor Mars_Data[D shr 8 and $FF] + Mars_Data[D shr 16 and $FF + 256]; |
Inc(B, Mars_Data[D shr 24]); |
A := A xor Mars_Data[D and $FF + 256]; |
Inc(D, A); |
C := C shr 24 or C shl 8; |
B := B xor Mars_Data[C shr 8 and $FF] + Mars_Data[C shr 16 and $FF + 256]; |
Inc(A, Mars_Data[C shr 24]); |
D := D xor Mars_Data[C and $FF + 256]; |
Inc(C, B); |
B := B shr 24 or B shl 8; |
A := A xor Mars_Data[B shr 8 and $FF] + Mars_Data[B shr 16 and $FF + 256]; |
Inc(D, Mars_Data[B shr 24]); |
C := C xor Mars_Data[B and $FF + 256]; |
A := A shr 24 or A shl 8; |
D := D xor Mars_Data[A shr 8 and $FF] + Mars_Data[A shr 16 and $FF + 256]; |
Inc(C, Mars_Data[A shr 24]); |
B := B xor Mars_Data[A and $FF + 256]; |
end; |
for I := 0 to 3 do |
begin |
R := D * K[7]; |
R := R shl 5 or R shr 27; |
D := D shr 13 or D shl 19; |
L := D + K[6]; |
Dec(B, L shl R or L shr (32 - R)); |
L := Mars_Data[L and $1FF] xor R; |
R := R shl 5 or R shr 27; |
L := L xor R; |
L := L shl R or L shr (32 - R); |
if I <= 1 then |
begin |
Dec(C, L); |
A := A xor R; |
end |
else |
begin |
Dec(A, L); |
C := C xor R; |
end; |
R := C * K[5]; |
R := R shl 5 or R shr 27; |
C := C shr 13 or C shl 19; |
L := C + K[4]; |
Dec(A, L shl R or L shr (32 - R)); |
L := Mars_Data[L and $1FF] xor R; |
R := R shl 5 or R shr 27; |
L := L xor R; |
L := L shl R or L shr (32 - R); |
if I <= 1 then |
begin |
Dec(B, L); |
D := D xor R; |
end |
else |
begin |
Dec(D, L); |
B := B xor R; |
end; |
R := B * K[3]; |
R := R shl 5 or R shr 27; |
B := B shr 13 or B shl 19; |
L := B + K[2]; |
Dec(D, L shl R or L shr (32 - R)); |
L := Mars_Data[L and $1FF] xor R; |
R := R shl 5 or R shr 27; |
L := L xor R; |
L := L shl R or L shr (32 - R); |
if I <= 1 then |
begin |
Dec(A, L); |
C := C xor R; |
end |
else |
begin |
Dec(C, L); |
A := A xor R; |
end; |
R := A * K[1]; |
R := R shl 5 or R shr 27; |
A := A shr 13 or A shl 19; |
L := A + K[0]; |
Dec(C, L shl R or L shr (32 - R)); |
L := Mars_Data[L and $1FF] xor R; |
R := R shl 5 or R shr 27; |
L := L xor R; |
L := L shl R or L shr (32 - R); |
if I <= 1 then |
begin |
Dec(D, L); |
B := B xor R; |
end |
else |
begin |
Dec(B, L); |
D := D xor R; |
end; |
Dec(PUInt32(K), 8); |
end; |
for I := 0 to 1 do |
begin |
D := D shl 24 or D shr 8; |
C := C xor Mars_Data[D shr 24 + 256]; |
Dec(B, Mars_Data[D shr 16 and $FF]); |
A := A - Mars_Data[D shr 8 and $FF + 256] xor Mars_Data[D and $FF]; |
C := C shl 24 or C shr 8; |
B := B xor Mars_Data[C shr 24 + 256]; |
Dec(A, Mars_Data[C shr 16 and $FF]); |
D := D - Mars_Data[C shr 8 and $FF + 256] xor Mars_Data[C and $FF]; |
Dec(B, C); |
B := B shl 24 or B shr 8; |
A := A xor Mars_Data[B shr 24 + 256]; |
Dec(D, Mars_Data[B shr 16 and $FF]); |
C := C - Mars_Data[B shr 8 and $FF + 256] xor Mars_Data[B and $FF]; |
Dec(A, D); |
A := A shl 24 or A shr 8; |
D := D xor Mars_Data[A shr 24 + 256]; |
Dec(C, Mars_Data[A shr 16 and $FF]); |
B := B - Mars_Data[A shr 8 and $FF + 256] xor Mars_Data[A and $FF]; |
end; |
PUInt32Array(Dest)[0] := A - K[4]; |
PUInt32Array(Dest)[1] := B - K[5]; |
PUInt32Array(Dest)[2] := C - K[6]; |
PUInt32Array(Dest)[3] := D - K[7]; |
end; |
{ TCipher_RC4 } |
class function TCipher_RC4.Context: TCipherContext; |
begin |
Result.KeySize := 256; |
Result.BlockSize := 1; |
Result.BufferSize := 16; |
Result.AdditionalBufferSize := 256 + 2; |
Result.NeedsAdditionalBufferBackup := true; |
Result.MinRounds := 1; |
Result.MaxRounds := 1; |
Result.CipherType := [ctSymmetric, ctStream]; |
end; |
procedure TCipher_RC4.DoInit(const Key; Size: Integer); |
var |
K: array[0..255] of Byte; |
D: PUInt8Array; |
I, J, T: Byte; |
begin |
D := FAdditionalBuffer; |
for I := 0 to 255 do |
begin |
D[I] := I; |
if Size > 0 then |
K[I] := TByteArray(Key)[I mod Size]; |
end; |
J := 0; |
for I := 0 to 255 do |
begin |
J := J + D[I] + K[I]; |
T := D[I]; |
D[I] := D[J]; |
D[J] := T; |
end; |
D[256] := 0; |
D[257] := 0; |
ProtectBuffer(K, SizeOf(K)); |
inherited; |
end; |
procedure TCipher_RC4.DoEncode(Source, Dest: Pointer; Size: Integer); |
var |
D: PUInt8Array; |
S: Integer; |
T, I, J: Byte; |
begin |
D := FAdditionalBuffer; |
I := D[256]; |
J := D[257]; |
for S := 0 to Size - 1 do |
begin |
Inc(I); |
T := D[I]; |
Inc(J, T); |
D[I] := D[J]; |
D[J] := T; |
PUInt8Array(Dest)[S] := PUInt8Array(Source)[S] xor D[Byte(D[I] + T)]; |
end; |
D[256] := I; |
D[257] := J; |
end; |
procedure TCipher_RC4.DoDecode(Source, Dest: Pointer; Size: Integer); |
begin |
DoEncode(Source, Dest, Size); |
end; |
{ TCipher_RC6 } |
class function TCipher_RC6.Context: TCipherContext; |
begin |
Result.KeySize := 256; |
Result.BlockSize := 16; |
Result.BufferSize := 16; |
Result.AdditionalBufferSize := 272; |
Result.NeedsAdditionalBufferBackup := False; |
Result.MinRounds := 16; |
Result.MaxRounds := 24; |
Result.CipherType := [ctSymmetric, ctBlock]; |
end; |
procedure TCipher_RC6.SetRounds(Value: Integer); |
begin |
if Value < Context.MinRounds then |
Value := Context.MinRounds |
else |
if Value > Context.MaxRounds then |
Value := Context.MaxRounds; |
if Value <> FRounds then |
begin |
if not (FState in [csNew, csInitialized, csDone]) then |
Done; |
FRounds := Value; |
end; |
end; |
procedure TCipher_RC6.DoInit(const Key; Size: Integer); |
var |
K: array[0..63] of UInt32; |
D: PUInt32Array; |
I, J, L, A, B, Z, T: UInt32; |
begin |
LimitRounds; |
D := FAdditionalBuffer; |
FillChar(K, SizeOf(K), 0); |
Move(Key, K, Size); |
L := Size shr 2; |
if Size and 3 <> 0 then |
Inc(L); |
if L <= 0 then |
L := 1; |
J := $B7E15163; |
for I := 0 to (FRounds + 2) * 2 do |
begin |
D[I] := J; |
Inc(J, $9E3779B9); |
end; |
if L > UInt32(FRounds + 2) * 2 then |
Z := L * 3 |
else |
Z := (FRounds + 2) * 6; |
I := 0; |
J := 0; |
A := 0; |
B := 0; |
for Z := Z downto 1 do |
begin |
A := A + B + D[I]; |
A := A shl 3 or A shr 29; |
D[I] := A; |
T := A + B; |
B := T + K[J]; |
B := B shl T or B shr (32 - T); |
K[J] := B; |
I := (I + 1) mod (UInt32(FRounds + 2) * 2); |
J := (J + 1) mod L; |
end; |
ProtectBuffer(K, SizeOf(K)); |
inherited; |
end; |
procedure TCipher_RC6.LimitRounds; |
begin |
if FRounds = 0 then |
FRounds := 20 |
else |
if FRounds < 16 then |
FRounds := 16 |
else |
if FRounds > 24 then |
FRounds := 24; |
end; |
procedure TCipher_RC6.DoEncode(Source, Dest: Pointer; Size: Integer); |
{$IFDEF X86ASM} |
asm |
PUSH EBX |
PUSH ESI |
PUSH EDI |
PUSH EBP |
PUSH ECX |
MOV EBP,[EAX].TCipher_RC6.FRounds // Rounds |
MOV ESI,[EAX].TCipher_RC6.FAdditionalBuffer // Key |
MOV EAX,[EDX + 0] // A |
MOV EBX,[EDX + 4] // B |
MOV EDI,[EDX + 8] // C |
MOV EDX,[EDX + 12] // D |
ADD EBX,[ESI + 0] // Inc(B, K[0]) |
ADD EDX,[ESI + 4] // Inc(D, K[1]) |
ADD ESI,8 // Inc(PInteger(K), 2) |
@@1: LEA ECX,[EBX * 2 + 1] // ECX := B * 2 + 1 |
IMUL ECX,EBX // ECX := ECX * B |
ROL ECX,5 // T := ROL(B * (B * 2 + 1), 5) |
PUSH ECX // save T |
XOR EAX,ECX // A := A xor T |
LEA ECX,[EDX * 2 + 1] // ECX := D * 2 + 1 |
IMUL ECX,EDX // ECX := ECX * D |
ROL ECX,5 // U := ROL(D * (D * 2 + 1), 5) |
XOR EDI,ECX // C := C xor U |
ROL EAX,CL // A := ROL(A xor T, U) |
POP ECX // restore T |
ADD EAX,[ESI + 0] // Inc(A, K[0]) |
ROL EDI,CL // C := ROL(C xor U, T) |
MOV ECX,EAX // T := A |
ADD EDI,[ESI + 4] // Inc(C, K[1]) |
MOV EAX,EBX // A := B |
MOV EBX,EDI // B := C |
MOV EDI,EDX // C := D |
DEC EBP |
MOV EDX,ECX // D := T; |
LEA ESI,[ESI + 8] // Inc(PInteger(K), 2) |
JNZ @@1 |
ADD EAX,[ESI + 0] // Inc(A, K[0]) |
ADD EDI,[ESI + 4] // Inc(C, K[1]) |
POP ECX |
MOV [ECX + 0],EAX // A |
MOV [ECX + 4],EBX // B |
MOV [ECX + 8],EDI // C |
MOV [ECX + 12],EDX // D |
POP EBP |
POP EDI |
POP ESI |
POP EBX |
end; |
{$ELSE !X86ASM} |
var |
K: PUInt32Array; |
I, T, U, A, B, C, D: UInt32; |
begin |
Assert(Size = Context.BlockSize); |
K := Pointer(FAdditionalBuffer); |
A := PUInt32Array(Source)[0]; |
B := PUInt32Array(Source)[1] + K[0]; |
C := PUInt32Array(Source)[2]; |
D := PUInt32Array(Source)[3] + K[1]; |
for I := 1 to FRounds do |
begin |
K := @K[2]; |
T := B * (B + B + 1); |
T := T shl 5 or T shr 27; |
U := D * (D + D + 1); |
U := U shl 5 or U shr 27; |
A := A xor T; |
A := A shl U or A shr (32 - U) + K[0]; |
C := C xor U; |
C := C shl T or C shr (32 - T) + K[1]; |
T := A; A := B; B := C; C := D; D := T; |
end; |
PUInt32Array(Dest)[0] := A + K[2]; |
PUInt32Array(Dest)[1] := B; |
PUInt32Array(Dest)[2] := C + K[3]; |
PUInt32Array(Dest)[3] := D; |
end; |
{$ENDIF !X86ASM} |
procedure TCipher_RC6.DoDecode(Source, Dest: Pointer; Size: Integer); |
{$IFDEF X86ASM} |
asm |
PUSH EBX |
PUSH ESI |
PUSH EDI |
PUSH EBP |
PUSH ECX |
MOV EBP,[EAX].TCipher_RC6.FRounds // Rounds |
MOV ESI,[EAX].TCipher_RC6.FAdditionalBuffer // Key |
LEA ESI,[ESI + EBP * 8] // Key[FRounds * 2] |
MOV EAX,[EDX + 0] // A |
MOV EBX,[EDX + 4] // B |
MOV EDI,[EDX + 8] // C |
MOV EDX,[EDX + 12] // D |
SUB EDI,[ESI + 12] // Dec(C, K[3]) |
SUB EAX,[ESI + 8] // Dec(A, K[2]) |
@@1: MOV ECX,EAX // T := A |
SUB EDX,[ESI + 0] // Dec(A, K[0]) |
MOV EAX,EDX // A := D |
MOV EDX,EDI // D := C |
SUB EBX,[ESI + 4] // Dec(C, K[1]) |
MOV EDI,EBX // C := B |
MOV EBX,ECX // B := T; |
LEA ECX,[EDX * 2 + 1] // ECX := D * 2 + 1 |
IMUL ECX,EDX // ECX := ECX * D |
ROL ECX,5 // U := ROL(D * (D * 2 + 1), 5) |
PUSH ECX // save U |
ROR EAX,CL // A := ROR(A - K[0], U) |
LEA ECX,[EBX * 2 + 1] // ECX := B * 2 + 1 |
IMUL ECX,EBX // ECX := ECX * B |
ROL ECX,5 // T := ROL(B * (B * 2 + 1), 5) |
XOR EAX,ECX // A := A xor T |
ROR EDI,CL // C := ROR(C - K[1], T) |
POP ECX // restore U |
XOR EDI,ECX // C := C xor U |
DEC EBP |
LEA ESI,[ESI - 8] // Dec(PInteger(K), 2) |
JNZ @@1 |
SUB EBX,[ESI + 0] // Dec(B, K[0]) |
SUB EDX,[ESI + 4] // Inc(D, K[1]) |
POP ECX |
MOV [ECX + 0],EAX // A |
MOV [ECX + 4],EBX // B |
MOV [ECX + 8],EDI // C |
MOV [ECX + 12],EDX // D |
POP EBP |
POP EDI |
POP ESI |
POP EBX |
end; |
{$ELSE !X86ASM} |
var |
I, U, T, A, B, C, D: UInt32; |
K: PUInt32Array; |
begin |
Assert(Size = Context.BlockSize); |
K := @PUInt32Array(FAdditionalBuffer)[FRounds * 2]; |
A := PUInt32Array(Source)[0] - K[2]; |
B := PUInt32Array(Source)[1]; |
C := PUInt32Array(Source)[2] - K[3]; |
D := PUInt32Array(Source)[3]; |
for I := 1 to FRounds do |
begin |
T := A; A := D; D := C; C := B; B := T; |
U := D * (D + D + 1); |
U := U shl 5 or U shr 27; |
T := B * (B + B + 1); |
T := T shl 5 or T shr 27; |
C := C - K[1]; |
C := C shr T or C shl (32 - T) xor U; |
A := A - K[0]; |
A := A shr U or A shl (32 - U) xor T; |
Dec(PUInt32(K), 2); |
end; |
PUInt32Array(Dest)[0] := A; |
PUInt32Array(Dest)[1] := B - K[0]; |
PUInt32Array(Dest)[2] := C; |
PUInt32Array(Dest)[3] := D - K[1]; |
end; |
{$ENDIF !X86ASM} |
{ TCipher_Rijndael } |
class function TCipher_Rijndael.Context: TCipherContext; |
const |
// don't change this! |
Rijndael_Blocks = 4; |
Rijndael_Rounds = 14; |
begin |
Result.KeySize := 32; |
Result.BlockSize := Rijndael_Blocks * 4; |
Result.BufferSize := Rijndael_Blocks * 4; |
Result.AdditionalBufferSize := (Rijndael_Rounds + 1) * Rijndael_Blocks * SizeOf(UInt32) * 2; |
Result.NeedsAdditionalBufferBackup := False; |
Result.MinRounds := 1; |
Result.MaxRounds := 1; |
Result.CipherType := [ctSymmetric, ctBlock]; |
end; |
procedure TCipher_Rijndael.DoInit(const Key; Size: Integer); |
{$REGION OldKeyShedule} |
{ |
// Old Rijndael Key Scheduling: |
procedure BuildEncodeKey; |
const |
RND_Data: array[0..29] of Byte = ( |
$01, $02, $04, $08, $10, $20, $40, $80, $1B, $36, $6C, $D8, $AB, $4D, $9A, |
$2F, $5E, $BC, $63, $C6, $97, $35, $6A, $D4, $B3, $7D, $FA, $EF, $C5, $91 |
); |
var |
T, R: Integer; |
procedure NextRounds; |
var |
J: Integer; |
begin |
J := 0; |
while (J < FRounds - 6) and (R <= FRounds) do |
begin |
while (J < FRounds - 6) and (T < Rijndael_Blocks) do |
begin |
PUInt32Array(FBuffer)[R * Rijndael_Blocks + T] := K[J]; |
Inc(J); |
Inc(T); |
end; |
if T = Rijndael_Blocks then |
begin |
T := 0; |
Inc(R); |
end; |
end; |
end; |
var |
RND: PByte; |
B: PByte; |
I: Integer; |
begin |
R := 0; |
T := 0; |
RND := @RND_Data; |
NextRounds; |
while R <= FRounds do |
begin |
B := @K; |
B^ := B^ xor Rijndael_S[0, K[FRounds - 7] shr 8 and $FF] xor RND^; Inc(B); |
B^ := B^ xor Rijndael_S[0, K[FRounds - 7] shr 16 and $FF]; Inc(B); |
B^ := B^ xor Rijndael_S[0, K[FRounds - 7] shr 24]; Inc(B); |
B^ := B^ xor Rijndael_S[0, K[FRounds - 7] and $FF]; |
Inc(RND); |
if FRounds = 14 then |
begin |
for I := 1 to 7 do |
K[I] := K[I] xor K[I - 1]; |
B := @K[4]; |
B^ := B^ xor Rijndael_S[0, K[3] and $FF]; Inc(B); |
B^ := B^ xor Rijndael_S[0, K[3] shr 8 and $FF]; Inc(B); |
B^ := B^ xor Rijndael_S[0, K[3] shr 16 and $FF]; Inc(B); |
B^ := B^ xor Rijndael_S[0, K[3] shr 24]; |
for I := 5 to 7 do |
K[I] := K[I] xor K[I - 1]; |
end |
else |
for I := 1 to FRounds - 7 do |
K[I] := K[I] xor K[I - 1]; |
NextRounds; |
end; |
end; |
procedure BuildDecodeKey; |
var |
I: Integer; |
D: PUInt32; |
begin |
D := Pointer(PAnsiChar(FBuffer) + FBufferSize shr 1); // for Pointer Math |
Move(FBuffer^, D^, FBufferSize shr 1); |
Inc(D, 4); |
for I := 0 to FRounds * 4 - 5 do |
begin |
D^ := Rijndael_Key[D^ and $FF] xor |
(Rijndael_Key[D^ shr 8 and $FF] shl 8 or Rijndael_Key[D^ shr 8 and $FF] shr 24) xor |
(Rijndael_Key[D^ shr 16 and $FF] shl 16 or Rijndael_Key[D^ shr 16 and $FF] shr 16) xor |
(Rijndael_Key[D^ shr 24] shl 24 or Rijndael_Key[D^ shr 24] shr 8); |
Inc(D); |
end; |
end; } |
{$ENDREGION} |
begin |
if Size <= 16 then |
FRounds := 10 |
else |
if Size <= 24 then |
FRounds := 12 |
else |
FRounds := 14; |
FillChar(FAdditionalBuffer^, 32, 0); |
Move(Key, FAdditionalBuffer^, Size); |
BuildEncodeKey(Size); |
BuildDecodeKey; |
inherited; |
end; |
procedure TCipher_Rijndael.BuildEncodeKey(KeySize:Integer); |
var |
I: Integer; |
T: UInt32; |
P: PUInt32Array; |
begin |
P := FAdditionalBuffer; |
if KeySize <= 16 then |
begin |
for I := 0 to 9 do |
begin |
T := P[3]; |
P[4] := Rijndael_S[0, T shr 8 and $FF] xor |
Rijndael_S[0, T shr 16 and $FF] shl 8 xor |
Rijndael_S[0, T shr 24 ] shl 16 xor |
Rijndael_S[0, T and $FF] shl 24 xor P[0] xor RijndaelEncryptionSheduleConst[I]; |
P[5] := P[1] xor P[4]; |
P[6] := P[2] xor P[5]; |
P[7] := P[3] xor P[6]; |
P := @P[4]; |
end; |
end |
else |
if KeySize <= 24 then |
begin |
for I := 0 to 7 do |
begin |
T := P[5]; |
P[6] := Rijndael_S[0, T shr 8 and $FF] xor |
Rijndael_S[0, T shr 16 and $FF] shl 8 xor |
Rijndael_S[0, T shr 24 ] shl 16 xor |
Rijndael_S[0, T and $FF] shl 24 xor P[0] xor RijndaelEncryptionSheduleConst[I]; |
P[7] := P[1] xor P[6]; |
P[8] := P[2] xor P[7]; |
P[9] := P[3] xor P[8]; |
if I = 7 then |
Break; |
P[10] := P[4] xor P[9]; |
P[11] := P[5] xor P[10]; |
P := @P[6]; |
end; |
end |
else |
begin |
for I :=0 to 6 do |
begin |
T := P[7]; |
P[8] := Rijndael_S[0, T shr 8 and $FF] xor |
Rijndael_S[0, T shr 16 and $FF] shl 8 xor |
Rijndael_S[0, T shr 24 ] shl 16 xor |
Rijndael_S[0, T and $FF] shl 24 xor P[0] xor RijndaelEncryptionSheduleConst[I]; |
P[9] := P[1] xor P[8]; |
P[10] := P[2] xor P[9]; |
P[11] := P[3] xor P[10]; |
if I = 6 then |
Break; |
T := P[11]; |
P[12] := Rijndael_S[0, T and $FF] xor |
Rijndael_S[0, T shr 8 and $FF] shl 8 xor |
Rijndael_S[0, T shr 16 and $FF] shl 16 xor |
Rijndael_S[0, T shr 24 ] shl 24 xor P[4]; |
P[13] := P[5] xor P[12]; |
P[14] := P[6] xor P[13]; |
P[15] := P[7] xor P[14]; |
P := @P[8]; |
end; |
end; |
end; |
procedure TCipher_Rijndael.BuildDecodeKey; |
var |
P: PUInt32; |
I: Integer; |
begin |
P := Pointer(PByte(FAdditionalBuffer) + FAdditionalBufferSize shr 1); // for Pointer Math |
Move(FAdditionalBuffer^, P^, FAdditionalBufferSize shr 1); |
Inc(P, 4); |
for I := 0 to FRounds * 4 - 5 do |
begin |
P^ := Rijndael_T[4, Rijndael_S[0, P^ and $FF]] xor |
Rijndael_T[5, Rijndael_S[0, P^ shr 8 and $FF]] xor |
Rijndael_T[6, Rijndael_S[0, P^ shr 16 and $FF]] xor |
Rijndael_T[7, Rijndael_S[0, P^ shr 24 ]]; |
Inc(P); |
end; |
end; |
procedure TCipher_Rijndael.DoEncode(Source, Dest: Pointer; Size: Integer); |
var |
P: PUInt32Array; |
I: Integer; |
A2, B2, C2, D2: UInt32; |
A1, B1, C1, D1: UInt32; |
begin |
Assert(Size = Context.BlockSize); |
P := FAdditionalBuffer; |
A1 := PUInt32Array(Source)[0]; |
B1 := PUInt32Array(Source)[1]; |
C1 := PUInt32Array(Source)[2]; |
D1 := PUInt32Array(Source)[3]; |
for I := 2 to FRounds do |
begin |
A2 := A1 xor P[0]; |
B2 := B1 xor P[1]; |
C2 := C1 xor P[2]; |
D2 := D1 xor P[3]; |
A1 := Rijndael_T[0, A2 and $FF] xor |
Rijndael_T[1, B2 shr 8 and $FF] xor |
Rijndael_T[2, C2 shr 16 and $FF] xor |
Rijndael_T[3, D2 shr 24 ]; |
B1 := Rijndael_T[0, B2 and $FF] xor |
Rijndael_T[1, C2 shr 8 and $FF] xor |
Rijndael_T[2, D2 shr 16 and $FF] xor |
Rijndael_T[3, A2 shr 24 ]; |
C1 := Rijndael_T[0, C2 and $FF] xor |
Rijndael_T[1, D2 shr 8 and $FF] xor |
Rijndael_T[2, A2 shr 16 and $FF] xor |
Rijndael_T[3, B2 shr 24 ]; |
D1 := Rijndael_T[0, D2 and $FF] xor |
Rijndael_T[1, A2 shr 8 and $FF] xor |
Rijndael_T[2, B2 shr 16 and $FF] xor |
Rijndael_T[3, C2 shr 24 ]; |
P := @P[4]; |
end; |
A2 := A1 xor P[0]; |
B2 := B1 xor P[1]; |
C2 := C1 xor P[2]; |
D2 := D1 xor P[3]; |
PUInt32Array(Dest)[0] := (Rijndael_S[0, A2 and $FF] or |
Rijndael_S[0, B2 shr 8 and $FF] shl 8 or |
Rijndael_S[0, C2 shr 16 and $FF] shl 16 or |
Rijndael_S[0, D2 shr 24 ] shl 24) xor P[4]; |
PUInt32Array(Dest)[1] := (Rijndael_S[0, B2 and $FF] or |
Rijndael_S[0, C2 shr 8 and $FF] shl 8 or |
Rijndael_S[0, D2 shr 16 and $FF] shl 16 or |
Rijndael_S[0, A2 shr 24 ] shl 24) xor P[5]; |
PUInt32Array(Dest)[2] := (Rijndael_S[0, C2 and $FF] or |
Rijndael_S[0, D2 shr 8 and $FF] shl 8 or |
Rijndael_S[0, A2 shr 16 and $FF] shl 16 or |
Rijndael_S[0, B2 shr 24 ] shl 24) xor P[6]; |
PUInt32Array(Dest)[3] := (Rijndael_S[0, D2 and $FF] or |
Rijndael_S[0, A2 shr 8 and $FF] shl 8 or |
Rijndael_S[0, B2 shr 16 and $FF] shl 16 or |
Rijndael_S[0, C2 shr 24 ] shl 24) xor P[7]; |
end; |
procedure TCipher_Rijndael.DoDecode(Source, Dest: Pointer; Size: Integer); |
var |
P: PUInt32Array; |
I: Integer; |
A2, B2, C2, D2: UInt32; |
A1, B1, C1, D1: UInt32; |
begin |
Assert(Size = Context.BlockSize); |
P := Pointer(PByte(FAdditionalBuffer) + FAdditionalBufferSize shr 1 + FRounds * 16); // for Pointer Math |
A1 := PUInt32Array(Source)[0]; |
B1 := PUInt32Array(Source)[1]; |
C1 := PUInt32Array(Source)[2]; |
D1 := PUInt32Array(Source)[3]; |
for I := 2 to FRounds do |
begin |
A2 := A1 xor P[0]; |
B2 := B1 xor P[1]; |
C2 := C1 xor P[2]; |
D2 := D1 xor P[3]; |
A1 := Rijndael_T[4, A2 and $FF] xor |
Rijndael_T[5, D2 shr 8 and $FF] xor |
Rijndael_T[6, C2 shr 16 and $FF] xor |
Rijndael_T[7, B2 shr 24 ]; |
B1 := Rijndael_T[4, B2 and $FF] xor |
Rijndael_T[5, A2 shr 8 and $FF] xor |
Rijndael_T[6, D2 shr 16 and $FF] xor |
Rijndael_T[7, C2 shr 24 ]; |
C1 := Rijndael_T[4, C2 and $FF] xor |
Rijndael_T[5, B2 shr 8 and $FF] xor |
Rijndael_T[6, A2 shr 16 and $FF] xor |
Rijndael_T[7, D2 shr 24 ]; |
D1 := Rijndael_T[4, D2 and $FF] xor |
Rijndael_T[5, C2 shr 8 and $FF] xor |
Rijndael_T[6, B2 shr 16 and $FF] xor |
Rijndael_T[7, A2 shr 24 ]; |
Dec(PUInt32(P), 4); |
end; |
A2 := A1 xor P[0]; |
B2 := B1 xor P[1]; |
C2 := C1 xor P[2]; |
D2 := D1 xor P[3]; |
Dec(PUInt32(P), 4); |
PUInt32Array(Dest)[0] := (Rijndael_S[1, A2 and $FF] or |
Rijndael_S[1, D2 shr 8 and $FF] shl 8 or |
Rijndael_S[1, C2 shr 16 and $FF] shl 16 or |
Rijndael_S[1, B2 shr 24] shl 24) xor P[0]; |
PUInt32Array(Dest)[1] := (Rijndael_S[1, B2 and $FF] or |
Rijndael_S[1, A2 shr 8 and $FF] shl 8 or |
Rijndael_S[1, D2 shr 16 and $FF] shl 16 or |
Rijndael_S[1, C2 shr 24] shl 24) xor P[1]; |
PUInt32Array(Dest)[2] := (Rijndael_S[1, C2 and $FF] or |
Rijndael_S[1, B2 shr 8 and $FF] shl 8 or |
Rijndael_S[1, A2 shr 16 and $FF] shl 16 or |
Rijndael_S[1, D2 shr 24] shl 24) xor P[2]; |
PUInt32Array(Dest)[3] := (Rijndael_S[1, D2 and $FF] or |
Rijndael_S[1, C2 shr 8 and $FF] shl 8 or |
Rijndael_S[1, B2 shr 16 and $FF] shl 16 or |
Rijndael_S[1, A2 shr 24] shl 24) xor P[3]; |
end; |
{ TCipher_AES128 } |
class function TCipher_AES128.Context: TCipherContext; |
const |
// don't change this! |
Rijndael_Blocks = 4; |
Rijndael_Rounds = 14; |
begin |
Result.KeySize := 16; |
Result.BlockSize := Rijndael_Blocks * 4; |
Result.BufferSize := Rijndael_Blocks * 4; |
Result.AdditionalBufferSize := (Rijndael_Rounds + 1) * Rijndael_Blocks * SizeOf(UInt32) * 2; |
Result.NeedsAdditionalBufferBackup := False; |
Result.MinRounds := 1; |
Result.MaxRounds := 1; |
Result.CipherType := [ctSymmetric, ctBlock]; |
end; |
procedure TCipher_AES128.DoInit(const Key; Size: Integer); |
begin |
// number of rounds is fixed for 128 bit and if a size > 16 is given the |
// inherited call should raise the "key material too large" exception. |
// but that has still to be tested! |
FRounds := 10; |
FillChar(FAdditionalBuffer^, 32, 0); |
Move(Key, FAdditionalBuffer^, Size); |
BuildEncodeKey(Size); |
BuildDecodeKey; |
inherited; |
end; |
{ TCipher_AES192 } |
class function TCipher_AES192.Context: TCipherContext; |
const |
// don't change this! |
Rijndael_Blocks = 4; |
Rijndael_Rounds = 14; |
begin |
Result.KeySize := 24; |
Result.BlockSize := Rijndael_Blocks * 4; |
Result.BufferSize := Rijndael_Blocks * 4; |
Result.AdditionalBufferSize := (Rijndael_Rounds + 1) * Rijndael_Blocks * SizeOf(UInt32) * 2; |
Result.NeedsAdditionalBufferBackup := False; |
Result.MinRounds := 1; |
Result.MaxRounds := 1; |
Result.CipherType := [ctSymmetric, ctBlock]; |
end; |
procedure TCipher_AES192.DoInit(const Key; Size: Integer); |
begin |
// number of rounds is fixed for 192 bit and if a size > 24 is given the |
// inherited call should raise the "key material too large" exception. |
// but that has still to be tested! |
FRounds := 12; |
FillChar(FAdditionalBuffer^, 32, 0); |
Move(Key, FAdditionalBuffer^, Size); |
BuildEncodeKey(Size); |
BuildDecodeKey; |
inherited; |
end; |
{ TCipher_AES256 } |
class function TCipher_AES256.Context: TCipherContext; |
const |
// don't change this! |
Rijndael_Blocks = 4; |
Rijndael_Rounds = 14; |
begin |
Result.KeySize := 32; |
Result.BlockSize := Rijndael_Blocks * 4; |
Result.BufferSize := Rijndael_Blocks * 4; |
Result.AdditionalBufferSize := (Rijndael_Rounds + 1) * Rijndael_Blocks * SizeOf(UInt32) * 2; |
Result.NeedsAdditionalBufferBackup := False; |
Result.MinRounds := 1; |
Result.MaxRounds := 1; |
Result.CipherType := [ctSymmetric, ctBlock]; |
end; |
procedure TCipher_AES256.DoInit(const Key; Size: Integer); |
begin |
// number of rounds is fixed for 256 bit and if a size > 32 is given the |
// inherited call should raise the "key material too large" exception. |
// but that has still to be tested! |
FRounds := 14; |
FillChar(FAdditionalBuffer^, 32, 0); |
Move(Key, FAdditionalBuffer^, Size); |
BuildEncodeKey(Size); |
BuildDecodeKey; |
inherited; |
end; |
{ TCipher_Square } |
class function TCipher_Square.Context: TCipherContext; |
begin |
Result.KeySize := 16; |
Result.BlockSize := 16; |
Result.BufferSize := 16; |
Result.AdditionalBufferSize := 9 * 4 * 2 * SizeOf(UInt32); |
Result.NeedsAdditionalBufferBackup := False; |
Result.MinRounds := 1; |
Result.MaxRounds := 1; |
Result.CipherType := [ctSymmetric, ctBlock]; |
end; |
procedure TCipher_Square.DoInit(const Key; Size: Integer); |
type |
PSquare_Key = ^TSquare_Key; |
TSquare_Key = array[0..8, 0..3] of UInt32; |
var |
E, D: PSquare_Key; |
S, T, R: UInt32; |
I, J: Integer; |
begin |
E := FAdditionalBuffer; |
D := FAdditionalBuffer; Inc(D); |
Move(Key, E^, Size); |
for I := 1 to 8 do |
begin |
T := E[I - 1, 3]; |
T := T shr 8 or T shl 24; |
E[I, 0] := E[I - 1, 0] xor T xor 1 shl (I - 1); |
E[I, 1] := E[I - 1, 1] xor E[I, 0]; |
E[I, 2] := E[I - 1, 2] xor E[I, 1]; |
E[I, 3] := E[I - 1, 3] xor E[I, 2]; |
D[8 - I, 0] := E[I, 0]; |
D[8 - I, 1] := E[I, 1]; |
D[8 - I, 2] := E[I, 2]; |
D[8 - I, 3] := E[I, 3]; |
for J := 0 to 3 do |
begin |
R := E[I - 1, J]; |
S := Square_PHI[R and $FF]; |
T := Square_PHI[R shr 8 and $FF]; |
T := T shl 8 or T shr 24; |
S := S xor T; |
T := Square_PHI[R shr 16 and $FF]; |
T := T shl 16 or T shr 16; |
S := S xor T; |
T := Square_PHI[R shr 24]; |
T := T shl 24 or T shr 8; |
S := S xor T; |
E[I - 1, J] := S; |
end; |
end; |
D[8] := E[0]; |
inherited; |
end; |
procedure TCipher_Square.DoEncode(Source, Dest: Pointer; Size: Integer); |
var |
Key: PUInt32Array; |
A, B, C, D: UInt32; |
AA, BB, CC: UInt32; |
I: Integer; |
begin |
Key := FAdditionalBuffer; |
A := PUInt32Array(Source)[0] xor Key[0]; |
B := PUInt32Array(Source)[1] xor Key[1]; |
C := PUInt32Array(Source)[2] xor Key[2]; |
D := PUInt32Array(Source)[3] xor Key[3]; |
Key := @Key[4]; |
for I := 0 to 6 do |
begin |
AA := Square_TE[0, A and $FF] xor |
Square_TE[1, B and $FF] xor |
Square_TE[2, C and $FF] xor |
Square_TE[3, D and $FF] xor Key[0]; |
BB := Square_TE[0, A shr 8 and $FF] xor |
Square_TE[1, B shr 8 and $FF] xor |
Square_TE[2, C shr 8 and $FF] xor |
Square_TE[3, D shr 8 and $FF] xor Key[1]; |
CC := Square_TE[0, A shr 16 and $FF] xor |
Square_TE[1, B shr 16 and $FF] xor |
Square_TE[2, C shr 16 and $FF] xor |
Square_TE[3, D shr 16 and $FF] xor Key[2]; |
D := Square_TE[0, A shr 24 ] xor |
Square_TE[1, B shr 24 ] xor |
Square_TE[2, C shr 24 ] xor |
Square_TE[3, D shr 24 ] xor Key[3]; |
A := AA; B := BB; C := CC; |
Key := @Key[4]; |
end; |
PUInt32Array(Dest)[0] := UInt32(Square_SE[A and $FF]) xor |
UInt32(Square_SE[B and $FF]) shl 8 xor |
UInt32(Square_SE[C and $FF]) shl 16 xor |
UInt32(Square_SE[D and $FF]) shl 24 xor Key[0]; |
PUInt32Array(Dest)[1] := UInt32(Square_SE[A shr 8 and $FF]) xor |
UInt32(Square_SE[B shr 8 and $FF]) shl 8 xor |
UInt32(Square_SE[C shr 8 and $FF]) shl 16 xor |
UInt32(Square_SE[D shr 8 and $FF]) shl 24 xor Key[1]; |
PUInt32Array(Dest)[2] := UInt32(Square_SE[A shr 16 and $FF]) xor |
UInt32(Square_SE[B shr 16 and $FF]) shl 8 xor |
UInt32(Square_SE[C shr 16 and $FF]) shl 16 xor |
UInt32(Square_SE[D shr 16 and $FF]) shl 24 xor Key[2]; |
PUInt32Array(Dest)[3] := UInt32(Square_SE[A shr 24 ]) xor |
UInt32(Square_SE[B shr 24 ]) shl 8 xor |
UInt32(Square_SE[C shr 24 ]) shl 16 xor |
UInt32(Square_SE[D shr 24 ]) shl 24 xor Key[3]; |
end; |
procedure TCipher_Square.DoDecode(Source, Dest: Pointer; Size: Integer); |
var |
Key: PUInt32Array; |
A, B, C, D: UInt32; |
AA, BB, CC: UInt32; |
I: Integer; |
begin |
Key := @PUInt32Array(FAdditionalBuffer)[9 * 4]; |
A := PUInt32Array(Source)[0] xor Key[0]; |
B := PUInt32Array(Source)[1] xor Key[1]; |
C := PUInt32Array(Source)[2] xor Key[2]; |
D := PUInt32Array(Source)[3] xor Key[3]; |
Key := @Key[4]; |
for I := 0 to 6 do |
begin |
AA := Square_TD[0, A and $FF] xor |
Square_TD[1, B and $FF] xor |
Square_TD[2, C and $FF] xor |
Square_TD[3, D and $FF] xor Key[0]; |
BB := Square_TD[0, A shr 8 and $FF] xor |
Square_TD[1, B shr 8 and $FF] xor |
Square_TD[2, C shr 8 and $FF] xor |
Square_TD[3, D shr 8 and $FF] xor Key[1]; |
CC := Square_TD[0, A shr 16 and $FF] xor |
Square_TD[1, B shr 16 and $FF] xor |
Square_TD[2, C shr 16 and $FF] xor |
Square_TD[3, D shr 16 and $FF] xor Key[2]; |
D := Square_TD[0, A shr 24 ] xor |
Square_TD[1, B shr 24 ] xor |
Square_TD[2, C shr 24 ] xor |
Square_TD[3, D shr 24 ] xor Key[3]; |
A := AA; B := BB; C := CC; |
Key := @Key[4]; |
end; |
PUInt32Array(Dest)[0] := UInt32(Square_SD[A and $FF]) xor |
UInt32(Square_SD[B and $FF]) shl 8 xor |
UInt32(Square_SD[C and $FF]) shl 16 xor |
UInt32(Square_SD[D and $FF]) shl 24 xor Key[0]; |
PUInt32Array(Dest)[1] := UInt32(Square_SD[A shr 8 and $FF]) xor |
UInt32(Square_SD[B shr 8 and $FF]) shl 8 xor |
UInt32(Square_SD[C shr 8 and $FF]) shl 16 xor |
UInt32(Square_SD[D shr 8 and $FF]) shl 24 xor Key[1]; |
PUInt32Array(Dest)[2] := UInt32(Square_SD[A shr 16 and $FF]) xor |
UInt32(Square_SD[B shr 16 and $FF]) shl 8 xor |
UInt32(Square_SD[C shr 16 and $FF]) shl 16 xor |
UInt32(Square_SD[D shr 16 and $FF]) shl 24 xor Key[2]; |
PUInt32Array(Dest)[3] := UInt32(Square_SD[A shr 24 ]) xor |
UInt32(Square_SD[B shr 24 ]) shl 8 xor |
UInt32(Square_SD[C shr 24 ]) shl 16 xor |
UInt32(Square_SD[D shr 24 ]) shl 24 xor Key[3]; |
end; |
{ TCipher_SCOP } |
class function TCipher_SCOP.Context: TCipherContext; |
begin |
Result.KeySize := 48; |
Result.BlockSize := 4; |
Result.BufferSize := 32; |
Result.AdditionalBufferSize := 384 * 4 + 3 * SizeOf(UInt32); |
Result.NeedsAdditionalBufferBackup := True; |
Result.MinRounds := 1; |
Result.MaxRounds := 1; |
Result.CipherType := [ctSymmetric, ctStream]; |
end; |
procedure TCipher_SCOP.DoInit(const Key; Size: Integer); |
var |
Init_State: packed record |
Coef: array[0..7, 0..3] of Byte; |
X: array[0..3] of UInt32; |
end; |
procedure ExpandKey; |
var |
P: PUInt8Array; |
I, C: Integer; |
begin |
C := 1; |
P := @Init_State; |
Move(Key, P^, Size); |
for I := Size to 47 do |
P[I] := P[I - Size] + P[I - Size + 1]; |
for I := 0 to 31 do |
if P[I] = 0 then |
begin |
P[I] := C; |
Inc(C); |
end; |
end; |
procedure GP8(Data: PUInt32Array); |
var |
I, I2: Integer; |
NewX: array[0..3] of UInt32; |
X1, X2, X3, X4: UInt32; |
Y1, Y2: UInt32; |
begin |
I := 0; |
I2 := 0; |
while I < 8 do |
begin |
X1 := Init_State.X[I2] shr 16; |
X2 := X1 * X1; |
X3 := X2 * X1; |
X4 := X3 * X1; |
Y1 := Init_State.Coef[I][0] * X4 + |
Init_State.Coef[I][1] * X3 + |
Init_State.Coef[I][2] * X2 + |
Init_State.Coef[I][3] * X1 + 1; |
X1 := Init_State.X[I2] and $FFFF; |
X2 := X1 * X1; |
X3 := X2 * X1; |
X4 := X3 * X1; |
Y2 := Init_State.Coef[I + 1][0] * X4 + |
Init_State.Coef[I + 1][1] * X3 + |
Init_State.Coef[I + 1][2] * X2 + |
Init_State.Coef[I + 1][3] * X1 + 1; |
Data[I2] := Y1 shl 16 or Y2 and $FFFF; |
NewX[I2] := Y1 and $FFFF0000 or Y2 shr 16; |
Inc(I2); |
Inc(I, 2); |
end; |
Init_State.X[0] := NewX[0] shr 16 or NewX[3] shl 16; |
Init_State.X[1] := NewX[0] shl 16 or NewX[1] shr 16; |
Init_State.X[2] := NewX[1] shl 16 or NewX[2] shr 16; |
Init_State.X[3] := NewX[2] shl 16 or NewX[3] shr 16; |
end; |
var |
I, J: Integer; |
T: array[0..3] of UInt32; |
P: PUInt32Array; |
begin |
FillChar(Init_State, SizeOf(Init_State), 0); |
FillChar(T, SizeOf(T), 0); |
P := Pointer(PByte(FAdditionalBuffer) + 12); // for Pointer Math |
ExpandKey; |
for I := 0 to 7 do |
GP8(@T); |
for I := 0 to 11 do |
begin |
for J := 0 to 7 do |
GP8(@P[I * 32 + J * 4]); |
GP8(@T); |
end; |
GP8(@T); |
I := T[3] and $7F; |
P[I] := P[I] or 1; |
P := FAdditionalBuffer; |
P[0] := T[3] shr 24 and $FF; |
P[1] := T[3] shr 16 and $FF; |
P[2] := T[3] shr 8 and $FF; |
ProtectBuffer(Init_State, SizeOf(Init_State)); |
inherited; |
end; |
procedure TCipher_SCOP.DoEncode(Source, Dest: Pointer; Size: Integer); |
var |
I, J: Byte; |
T2, T3, T1: UInt32; |
P: PUInt32Array; |
W: Integer; |
begin |
P := FAdditionalBuffer; |
I := P[0]; |
J := P[1]; |
T3 := P[2]; |
for W := 0 to Size div 4 - 1 do |
begin |
T1 := P[J + 3 + 128]; Inc(J, T3); |
T2 := P[J + 3 + 128]; |
PUInt32Array(Dest)[W] := PUInt32Array(Source)[W] + T1 + T2; |
T3 := T2 + P[I + 3]; Inc(I); |
P[J + 3 + 128] := T3; |
Inc(J, T2); |
end; |
P[0] := I; |
P[1] := J; |
P[2] := T3; |
end; |
procedure TCipher_SCOP.DoDecode(Source, Dest: Pointer; Size: Integer); |
var |
I, J: Byte; |
T1, T2, T3: UInt32; |
P: PUInt32Array; |
W: Integer; |
begin |
P := FAdditionalBuffer; |
I := P[0]; |
J := P[1]; |
T3 := P[2]; |
for W := 0 to Size div 4 - 1 do |
begin |
T1 := P[J + 3 + 128]; Inc(J, T3); |
T2 := P[J + 3 + 128]; |
PUInt32Array(Dest)[W] := PUInt32Array(Source)[W] - T1 - T2; |
T3 := T2 + P[I + 3]; |
Inc(I); |
P[J + 3 + 128] := T3; |
Inc(J, T2); |
end; |
P[0] := I; |
P[1] := J; |
P[2] := T3; |
end; |
{ TCipher_SCOP_DEC52 } |
class function TCipher_SCOP_DEC52.Context: TCipherContext; |
begin |
Result.KeySize := 48; |
Result.BlockSize := 4; |
Result.BufferSize := 32; |
Result.AdditionalBufferSize := 384 * 4 + 3 * SizeOf(UInt32); |
Result.NeedsAdditionalBufferBackup := True; |
Result.MinRounds := 1; |
Result.MaxRounds := 1; |
Result.CipherType := [ctSymmetric, ctStream]; |
end; |
procedure TCipher_SCOP_DEC52.DoInit(const Key; Size: Integer); |
var |
Init_State: packed record |
Coef: array[0..7, 0..3] of Byte; |
X: array[0..3] of UInt32; |
end; |
procedure ExpandKey; |
var |
P: PUInt8Array; |
I, C: Integer; |
begin |
C := 1; |
P := @Init_State; |
Move(Key, P^, Size); |
for I := Size to 47 do |
P[I] := P[I - Size] + P[I - Size + 1]; |
for I := 0 to 31 do |
if P[I] = 0 then |
begin |
P[I] := C; |
Inc(C); |
end; |
end; |
procedure GP8(Data: PUInt32Array); |
var |
I, I2: Integer; |
NewX: array[0..3] of UInt32; |
X1, X2, X3, X4: UInt32; |
Y1, Y2: UInt32; |
begin |
I := 0; |
I2 := 0; |
while I < 8 do |
begin |
X1 := Init_State.X[I2] shr 16; |
X2 := X1 * X1; |
X3 := X2 * X1; |
X4 := X3 * X1; |
Y1 := Init_State.Coef[I][0] * X4 + |
Init_State.Coef[I][1] * X3 + |
Init_State.Coef[I][2] * X2 + |
Init_State.Coef[I][3] * X1 + 1; |
X1 := Init_State.X[I2] and $FFFF; |
X2 := X1 * X1; |
X3 := X2 * X1; |
X4 := X3 * X1; |
Y2 := Init_State.Coef[I + 1][0] * X4 + |
Init_State.Coef[I + 2][1] * X3 + |
Init_State.Coef[I + 3][2] * X2 + |
Init_State.Coef[I + 4][3] * X1 + 1; |
Data[I2] := Y1 shl 16 or Y2 and $FFFF; |
NewX[I2] := Y1 and $FFFF0000 or Y2 shr 16; |
Inc(I2); |
Inc(I, 2); |
end; |
Init_State.X[0] := NewX[0] shr 16 or NewX[3] shl 16; |
Init_State.X[1] := NewX[0] shl 16 or NewX[1] shr 16; |
Init_State.X[2] := NewX[1] shl 16 or NewX[2] shr 16; |
Init_State.X[3] := NewX[2] shl 16 or NewX[3] shr 16; |
end; |
var |
I, J: Integer; |
T: array[0..3] of Integer; |
P: PUInt32Array; |
begin |
FillChar(Init_State, SizeOf(Init_State), 0); |
FillChar(T, SizeOf(T), 0); |
P := Pointer(PByte(FAdditionalBuffer) + 12); // for Pointer Math |
ExpandKey; |
for I := 0 to 7 do |
GP8(@T); |
for I := 0 to 11 do |
begin |
for J := 0 to 7 do |
GP8(@P[I * 32 + J * 4]); |
GP8(@T); |
end; |
GP8(@T); |
I := T[3] and $7F; |
P[I + 3] := P[I + 3] or 1; |
P := FAdditionalBuffer; |
P[0] := T[3] shr 24 and $FF; |
P[1] := T[3] shr 16 and $FF; |
P[2] := T[3] shr 8 and $FF; |
ProtectBuffer(Init_State, SizeOf(Init_State)); |
inherited; |
end; |
procedure TCipher_SCOP_DEC52.DoEncode(Source, Dest: Pointer; Size: Integer); |
var |
I, J: Byte; |
T2, T3, T1: UInt32; |
P: PUInt32Array; |
W: Integer; |
begin |
P := FAdditionalBuffer; |
I := P[0]; |
J := P[1]; |
T3 := P[2]; |
for W := 0 to Size div 4 - 1 do |
begin |
T1 := P[J + 3 + 128]; Inc(J, T3); |
T2 := P[J + 3 + 128]; |
PUInt32Array(Dest)[W] := PUInt32Array(Source)[W] + T1 + T2; |
T3 := T2 + P[I + 3]; Inc(I); |
P[J + 3 + 128] := T3; |
Inc(J, T2); |
end; |
P[0] := I; |
P[1] := J; |
P[2] := T3; |
end; |
procedure TCipher_SCOP_DEC52.DoDecode(Source, Dest: Pointer; Size: Integer); |
var |
I, J: Byte; |
T1, T2, T3: UInt32; |
P: PUInt32Array; |
W: Integer; |
begin |
P := FAdditionalBuffer; |
I := P[0]; |
J := P[1]; |
T3 := P[2]; |
for W := 0 to Size div 4 - 1 do |
begin |
T1 := P[J + 3 + 128]; Inc(J, T3); |
T2 := P[J + 3 + 128]; |
PUInt32Array(Dest)[W] := PUInt32Array(Source)[W] - T1 - T2; |
T3 := T2 + P[I + 3]; |
Inc(I); |
P[J + 3 + 128] := T3; |
Inc(J, T2); |
end; |
P[0] := I; |
P[1] := J; |
P[2] := T3; |
end; |
{ TCipher_Sapphire } |
type |
PSapphireKey = ^TSapphireKey; |
TSapphireKey = packed record |
Cards: array[0..255] of UInt32; |
Rotor: UInt32; |
Ratchet: UInt32; |
Avalanche: UInt32; |
Plain: UInt32; |
Cipher: UInt32; |
end; |
class function TCipher_Sapphire.Context: TCipherContext; |
begin |
Result.KeySize := 1024; |
Result.BlockSize := 1; |
Result.BufferSize := 32; |
Result.AdditionalBufferSize := SizeOf(TSapphireKey); |
Result.NeedsAdditionalBufferBackup := True; |
Result.MinRounds := 1; |
Result.MaxRounds := 1; |
Result.CipherType := [ctSymmetric, ctStream]; |
end; |
procedure TCipher_Sapphire.DoInit(const Key; Size: Integer); |
var |
Sum: Byte; |
P: Integer; |
function KeyRand(Max: UInt32): Byte; |
var |
I, M: UInt32; |
begin |
Result := 0; |
if Max = 0 then |
Exit; |
I := 0; |
M := 1; |
while M < Max do |
Inc(M, M or 1); |
repeat |
Inc(Sum, TByteArray(Key)[P]); |
Inc(P); |
if P >= Size then |
begin |
P := 0; |
Inc(Sum, Size); |
end; |
Result := M and Sum; |
Inc(I); |
if I > 11 then |
Result := Result mod Max; |
until Result <= Max; |
end; |
var |
I, S, T: Integer; |
SKey : PSapphireKey; |
begin |
SKey := PSapphireKey(FAdditionalBuffer); |
if Size <= 0 then |
begin |
SKey.Rotor := 1; |
SKey.Ratchet := 3; |
SKey.Avalanche := 5; |
SKey.Plain := 7; |
SKey.Cipher := 11; |
for I := 0 to 255 do |
SKey.Cards[I] := 255 - I; |
end |
else |
begin |
for I := 0 to 255 do |
SKey.Cards[I] := I; |
P := 0; |
Sum := 0; |
for I := 255 downto 1 do |
begin |
S := KeyRand(I); |
T := SKey.Cards[I]; |
SKey.Cards[I] := SKey.Cards[S]; |
SKey.Cards[S] := T; |
end; |
SKey.Rotor := SKey.Cards[1]; |
SKey.Ratchet := SKey.Cards[3]; |
SKey.Avalanche := SKey.Cards[5]; |
SKey.Plain := SKey.Cards[7]; |
SKey.Cipher := SKey.Cards[Sum]; |
end; |
inherited; |
end; |
procedure TCipher_Sapphire.DoEncode(Source, Dest: Pointer; Size: Integer); |
var |
T: UInt32; |
I: Integer; |
SKey: PSapphireKey; |
begin |
SKey := PSapphireKey(FAdditionalBuffer); |
for I := 0 to Size - 1 do |
begin |
SKey.Ratchet := (SKey.Ratchet + SKey.Cards[SKey.Rotor]) and $FF; |
SKey.Rotor := (SKey.Rotor + 1) and $FF; |
T := SKey.Cards[SKey.Cipher]; |
SKey.Cards[SKey.Cipher] := SKey.Cards[SKey.Ratchet]; |
SKey.Cards[SKey.Ratchet] := SKey.Cards[SKey.Plain]; |
SKey.Cards[SKey.Plain] := SKey.Cards[SKey.Rotor]; |
SKey.Cards[SKey.Rotor] := T; |
SKey.Avalanche := (SKey.Avalanche + SKey.Cards[T]) and $FF; |
T := (SKey.Cards[SKey.Plain] + SKey.Cards[SKey.Cipher] + SKey.Cards[SKey.Avalanche]) and $FF; |
SKey.Plain := PUInt8Array(Source)[I]; |
SKey.Cipher := SKey.Plain xor SKey.Cards[SKey.Cards[T]] xor |
SKey.Cards[(SKey.Cards[SKey.Ratchet] + |
SKey.Cards[SKey.Rotor]) and $FF]; |
PUInt8Array(Dest)[I] := SKey.Cipher; |
end; |
end; |
procedure TCipher_Sapphire.DoDecode(Source, Dest: Pointer; Size: Integer); |
var |
T: UInt32; |
I: Integer; |
SKey: PSapphireKey; |
begin |
SKey := PSapphireKey(FAdditionalBuffer); |
for I := 0 to Size - 1 do |
begin |
SKey.Ratchet := (SKey.Ratchet + SKey.Cards[SKey.Rotor]) and $FF; |
SKey.Rotor := (SKey.Rotor + 1) and $FF; |
T := SKey.Cards[SKey.Cipher]; |
SKey.Cards[SKey.Cipher] := SKey.Cards[SKey.Ratchet]; |
SKey.Cards[SKey.Ratchet] := SKey.Cards[SKey.Plain]; |
SKey.Cards[SKey.Plain] := SKey.Cards[SKey.Rotor]; |
SKey.Cards[SKey.Rotor] := T; |
SKey.Avalanche := (SKey.Avalanche + SKey.Cards[T]) and $FF; |
T := (SKey.Cards[SKey.Plain] + SKey.Cards[SKey.Cipher] + SKey.Cards[SKey.Avalanche]) and $FF; |
SKey.Cipher := PUInt8Array(Source)[I]; |
SKey.Plain := SKey.Cipher xor SKey.Cards[SKey.Cards[T]] xor |
SKey.Cards[(SKey.Cards[SKey.Ratchet] + |
SKey.Cards[SKey.Rotor]) and $FF]; |
PUInt8Array(Dest)[I] := SKey.Plain; |
end; |
end; |
{ DES basics } |
procedure DES_Func(Source, Dest, Key: PUInt32Array); |
var |
L, R, X, Y, I: UInt32; |
begin |
L := SwapUInt32(Source[0]); |
R := SwapUInt32(Source[1]); |
X := (L shr 4 xor R) and $0F0F0F0F; R := R xor X; L := L xor X shl 4; |
X := (L shr 16 xor R) and $0000FFFF; R := R xor X; L := L xor X shl 16; |
X := (R shr 2 xor L) and $33333333; L := L xor X; R := R xor X shl 2; |
X := (R shr 8 xor L) and $00FF00FF; L := L xor X; R := R xor X shl 8; |
R := R shl 1 or R shr 31; |
X := (L xor R) and $AAAAAAAA; |
R := R xor X; |
L := L xor X; |
L := L shl 1 or L shr 31; |
for I := 0 to 7 do |
begin |
X := (R shl 28 or R shr 4) xor Key[0]; |
Y := R xor Key[1]; |
L := L xor (DES_Data[0, X and $3F] or DES_Data[1, X shr 8 and $3F] or |
DES_Data[2, X shr 16 and $3F] or DES_Data[3, X shr 24 and $3F] or |
DES_Data[4, Y and $3F] or DES_Data[5, Y shr 8 and $3F] or |
DES_Data[6, Y shr 16 and $3F] or DES_Data[7, Y shr 24 and $3F]); |
X := (L shl 28 or L shr 4) xor Key[2]; |
Y := L xor Key[3]; |
R := R xor (DES_Data[0, X and $3F] or DES_Data[1, X shr 8 and $3F] or |
DES_Data[2, X shr 16 and $3F] or DES_Data[3, X shr 24 and $3F] or |
DES_Data[4, Y and $3F] or DES_Data[5, Y shr 8 and $3F] or |
DES_Data[6, Y shr 16 and $3F] or DES_Data[7, Y shr 24 and $3F]); |
Key := @Key[4]; |
end; |
R := R shl 31 or R shr 1; |
X := (L xor R) and $AAAAAAAA; |
R := R xor X; |
L := L xor X; |
L := L shl 31 or L shr 1; |
X := (L shr 8 xor R) and $00FF00FF; R := R xor X; L := L xor X shl 8; |
X := (L shr 2 xor R) and $33333333; R := R xor X; L := L xor X shl 2; |
X := (R shr 16 xor L) and $0000FFFF; L := L xor X; R := R xor X shl 16; |
X := (R shr 4 xor L) and $0F0F0F0F; L := L xor X; R := R xor X shl 4; |
Dest[0] := SwapUInt32(R); |
Dest[1] := SwapUInt32(L); |
end; |
procedure TCipher_DESBase.DoInitKey(const Data: array of Byte; Key: PUInt32Array; Reverse: Boolean); |
const |
ROT: array[0..15] of Byte = (1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28); |
var |
I, J, L, M, N: UInt32; |
PC_M, PC_R: array[0..55] of Byte; |
K: array[0..31] of UInt32; |
begin |
FillChar(K, SizeOf(K), 0); |
for I := 0 to 55 do |
if Data[DES_PC1[I] shr 3] and ($80 shr (DES_PC1[I] and $07)) <> 0 then |
PC_M[I] := 1 |
else |
PC_M[I] := 0; |
for I := 0 to 15 do |
begin |
if Reverse then |
M := (15 - I) shl 1 |
else |
M := I shl 1; |
N := M + 1; |
for J := 0 to 27 do |
begin |
L := J + ROT[I]; |
if L < 28 then |
PC_R[J] := PC_M[L] |
else |
PC_R[J] := PC_M[L - 28]; |
end; |
for J := 28 to 55 do |
begin |
L := J + ROT[I]; |
if L < 56 then |
PC_R[J] := PC_M[L] |
else |
PC_R[J] := PC_M[L - 28]; |
end; |
L := $1000000; |
for J := 0 to 23 do |
begin |
L := L shr 1; |
if PC_R[DES_PC2[J ]] <> 0 then |
K[M] := K[M] or L; |
if PC_R[DES_PC2[J + 24]] <> 0 then |
K[N] := K[N] or L; |
end; |
end; |
for I := 0 to 15 do |
begin |
M := I shl 1; |
N := M + 1; |
Key[0] := K[M] and $00FC0000 shl 6 or |
K[M] and $00000FC0 shl 10 or |
K[N] and $00FC0000 shr 10 or |
K[N] and $00000FC0 shr 6; |
Key[1] := K[M] and $0003F000 shl 12 or |
K[M] and $0000003F shl 16 or |
K[N] and $0003F000 shr 4 or |
K[N] and $0000003F; |
Key := @Key[2]; |
end; |
ProtectBuffer(K, SizeOf(K)); |
ProtectBuffer(PC_M, SizeOf(PC_M)); |
ProtectBuffer(PC_R, SizeOf(PC_R)); |
end; |
{ TCipher_1DES } |
class function TCipher_1DES.Context: TCipherContext; |
begin |
Result.KeySize := 8; |
Result.BlockSize := 8; |
Result.BufferSize := 8; |
Result.AdditionalBufferSize := 32 * 4 * 2; |
Result.NeedsAdditionalBufferBackup := False; |
Result.MinRounds := 1; |
Result.MaxRounds := 1; |
Result.CipherType := [ctSymmetric, ctBlock]; |
end; |
procedure TCipher_1DES.DoInit(const Key; Size: Integer); |
var |
K: array[0..7] of Byte; |
begin |
FillChar(K, SizeOf(K), 0); |
Move(Key, K, Size); |
DoInitKey(K, FAdditionalBuffer, False); |
DoInitKey(K, @PUInt32Array(FAdditionalBuffer)[32], True); |
ProtectBuffer(K, SizeOf(K)); |
inherited; |
end; |
procedure TCipher_1DES.DoEncode(Source, Dest: Pointer; Size: Integer); |
begin |
Assert(Size = Context.BlockSize); |
DES_Func(Source, Dest, FAdditionalBuffer); |
end; |
procedure TCipher_1DES.DoDecode(Source, Dest: Pointer; Size: Integer); |
begin |
Assert(Size = Context.BlockSize); |
DES_Func(Source, Dest, @PUInt32Array(FAdditionalBuffer)[32]); |
end; |
{ TCipher_2DES } |
class function TCipher_2DES.Context: TCipherContext; |
begin |
Result.KeySize := 16; |
Result.BlockSize := 8; |
Result.BufferSize := 8; |
Result.AdditionalBufferSize := 32 * 4 * 2 * 2; |
Result.NeedsAdditionalBufferBackup := False; |
Result.MinRounds := 1; |
Result.MaxRounds := 1; |
Result.CipherType := [ctSymmetric, ctBlock]; |
end; |
procedure TCipher_2DES.DoInit(const Key; Size: Integer); |
var |
K: array[0..15] of Byte; |
P: PUInt32Array; |
begin |
FillChar(K, SizeOf(K), 0); |
Move(Key, K, Size); |
P := FAdditionalBuffer; |
DoInitKey(K[0], @P[ 0], False); |
DoInitKey(K[8], @P[32], True); |
DoInitKey(K[0], @P[64], True); |
DoInitKey(K[8], @P[96], False); |
ProtectBuffer(K, SizeOf(K)); |
inherited; |
end; |
procedure TCipher_2DES.DoEncode(Source, Dest: Pointer; Size: Integer); |
begin |
Assert(Size = Context.BlockSize); |
DES_Func(Source, Dest, FAdditionalBuffer); |
DES_Func(Source, Dest, @PUInt32Array(FAdditionalBuffer)[32]); |
DES_Func(Source, Dest, FAdditionalBuffer); |
end; |
procedure TCipher_2DES.DoDecode(Source, Dest: Pointer; Size: Integer); |
begin |
Assert(Size = Context.BlockSize); |
DES_Func(Source, Dest, @PUInt32Array(FAdditionalBuffer)[64]); |
DES_Func(Source, Dest, @PUInt32Array(FAdditionalBuffer)[96]); |
DES_Func(Source, Dest, @PUInt32Array(FAdditionalBuffer)[64]); |
end; |
{ TCipher_3DES } |
class function TCipher_3DES.Context: TCipherContext; |
begin |
Result.KeySize := 24; |
Result.BlockSize := 8; |
Result.BufferSize := 8; |
Result.AdditionalBufferSize := 32 * 4 * 2 * 3; |
Result.NeedsAdditionalBufferBackup := False; |
Result.MinRounds := 1; |
Result.MaxRounds := 1; |
Result.CipherType := [ctSymmetric, ctBlock]; |
end; |
procedure TCipher_3DES.DoInit(const Key; Size: Integer); |
var |
K: array[0..23] of Byte; |
P: PUInt32Array; |
begin |
FillChar(K, SizeOf(K), 0); |
Move(Key, K, Size); |
P := FAdditionalBuffer; |
DoInitKey(K[ 0], @P[ 0], False); |
DoInitKey(K[ 8], @P[ 32], True); |
DoInitKey(K[16], @P[ 64], False); |
DoInitKey(K[16], @P[ 96], True); |
DoInitKey(K[ 8], @P[128], False); |
DoInitKey(K[ 0], @P[160], True); |
ProtectBuffer(K, SizeOf(K)); |
inherited; |
end; |
procedure TCipher_3DES.DoEncode(Source, Dest: Pointer; Size: Integer); |
begin |
Assert(Size = Context.BlockSize); |
DES_Func(Source, Dest, @PUInt32Array(FAdditionalBuffer)[ 0]); |
DES_Func(Source, Dest, @PUInt32Array(FAdditionalBuffer)[32]); |
DES_Func(Source, Dest, @PUInt32Array(FAdditionalBuffer)[64]); |
end; |
procedure TCipher_3DES.DoDecode(Source, Dest: Pointer; Size: Integer); |
begin |
Assert(Size = Context.BlockSize); |
DES_Func(Source, Dest, @PUInt32Array(FAdditionalBuffer)[96]); |
DES_Func(Source, Dest, @PUInt32Array(FAdditionalBuffer)[128]); |
DES_Func(Source, Dest, @PUInt32Array(FAdditionalBuffer)[160]); |
end; |
{ TCipher_2DDES } |
class function TCipher_2DDES.Context: TCipherContext; |
begin |
Result := inherited Context; |
Result.BlockSize := 16; |
Result.BufferSize := 16; |
Result.MinRounds := 1; |
Result.MaxRounds := 1; |
Result.CipherType := [ctSymmetric, ctBlock]; |
end; |
procedure TCipher_2DDES.DoEncode(Source, Dest: Pointer; Size: Integer); |
var |
T: UInt32; |
begin |
Assert(Size = Context.BlockSize); |
DES_Func(@PUInt32Array(Source)[0], @PUInt32Array(Dest)[0], FAdditionalBuffer); |
DES_Func(@PUInt32Array(Source)[2], @PUInt32Array(Dest)[2], FAdditionalBuffer); |
T := PUInt32Array(Dest)[1]; |
PUInt32Array(Dest)[1] := PUInt32Array(Dest)[2]; |
PUInt32Array(Dest)[2] := T; |
DES_Func(@PUInt32Array(Dest)[0], @PUInt32Array(Dest)[0], @PUInt32Array(FAdditionalBuffer)[32]); |
DES_Func(@PUInt32Array(Dest)[2], @PUInt32Array(Dest)[2], @PUInt32Array(FAdditionalBuffer)[32]); |
T := PUInt32Array(Dest)[1]; |
PUInt32Array(Dest)[1] := PUInt32Array(Dest)[2]; |
PUInt32Array(Dest)[2] := T; |
DES_Func(@PUInt32Array(Dest)[0], @PUInt32Array(Dest)[0], FAdditionalBuffer); |
DES_Func(@PUInt32Array(Dest)[2], @PUInt32Array(Dest)[2], FAdditionalBuffer); |
end; |
procedure TCipher_2DDES.DoDecode(Source, Dest: Pointer; Size: Integer); |
var |
T: UInt32; |
begin |
Assert(Size = Context.BlockSize); |
DES_Func(@PUInt32Array(Source)[0], @PUInt32Array(Dest)[0], @PUInt32Array(FAdditionalBuffer)[64]); |
DES_Func(@PUInt32Array(Source)[2], @PUInt32Array(Dest)[2], @PUInt32Array(FAdditionalBuffer)[64]); |
T := PUInt32Array(Dest)[1]; |
PUInt32Array(Dest)[1] := PUInt32Array(Dest)[2]; |
PUInt32Array(Dest)[2] := T; |
DES_Func(@PUInt32Array(Dest)[0], @PUInt32Array(Dest)[0], @PUInt32Array(FAdditionalBuffer)[96]); |
DES_Func(@PUInt32Array(Dest)[2], @PUInt32Array(Dest)[2], @PUInt32Array(FAdditionalBuffer)[96]); |
T := PUInt32Array(Dest)[1]; |
PUInt32Array(Dest)[1] := PUInt32Array(Dest)[2]; |
PUInt32Array(Dest)[2] := T; |
DES_Func(@PUInt32Array(Dest)[0], @PUInt32Array(Dest)[0], @PUInt32Array(FAdditionalBuffer)[64]); |
DES_Func(@PUInt32Array(Dest)[2], @PUInt32Array(Dest)[2], @PUInt32Array(FAdditionalBuffer)[64]); |
end; |
{ TCipher_3DDES } |
class function TCipher_3DDES.Context: TCipherContext; |
begin |
Result := inherited Context; |
Result.BlockSize := 16; |
Result.BufferSize := 16; |
Result.MinRounds := 1; |
Result.MaxRounds := 1; |
Result.CipherType := [ctSymmetric, ctBlock]; |
end; |
procedure TCipher_3DDES.DoEncode(Source, Dest: Pointer; Size: Integer); |
var |
T: UInt32; |
begin |
Assert(Size = Context.BlockSize); |
DES_Func(@PUInt32Array(Source)[0], @PUInt32Array(Dest)[0], FAdditionalBuffer); |
DES_Func(@PUInt32Array(Source)[2], @PUInt32Array(Dest)[2], FAdditionalBuffer); |
T := PUInt32Array(Dest)[1]; |
PUInt32Array(Dest)[1] := PUInt32Array(Dest)[2]; |
PUInt32Array(Dest)[2] := T; |
DES_Func(@PUInt32Array(Dest)[0], @PUInt32Array(Dest)[0], @PUInt32Array(FAdditionalBuffer)[32]); |
DES_Func(@PUInt32Array(Dest)[2], @PUInt32Array(Dest)[2], @PUInt32Array(FAdditionalBuffer)[32]); |
T := PUInt32Array(Dest)[1]; |
PUInt32Array(Dest)[1] := PUInt32Array(Dest)[2]; |
PUInt32Array(Dest)[2] := T; |
DES_Func(@PUInt32Array(Dest)[0], @PUInt32Array(Dest)[0], @PUInt32Array(FAdditionalBuffer)[64]); |
DES_Func(@PUInt32Array(Dest)[2], @PUInt32Array(Dest)[2], @PUInt32Array(FAdditionalBuffer)[64]); |
end; |
procedure TCipher_3DDES.DoDecode(Source, Dest: Pointer; Size: Integer); |
var |
T: UInt32; |
begin |
Assert(Size = Context.BlockSize); |
DES_Func(@PUInt32Array(Source)[0], @PUInt32Array(Dest)[0], @PUInt32Array(FAdditionalBuffer)[96]); |
DES_Func(@PUInt32Array(Source)[2], @PUInt32Array(Dest)[2], @PUInt32Array(FAdditionalBuffer)[96]); |
T := PUInt32Array(Dest)[1]; |
PUInt32Array(Dest)[1] := PUInt32Array(Dest)[2]; |
PUInt32Array(Dest)[2] := T; |
DES_Func(@PUInt32Array(Dest)[0], @PUInt32Array(Dest)[0], @PUInt32Array(FAdditionalBuffer)[128]); |
DES_Func(@PUInt32Array(Dest)[2], @PUInt32Array(Dest)[2], @PUInt32Array(FAdditionalBuffer)[128]); |
T := PUInt32Array(Dest)[1]; |
PUInt32Array(Dest)[1] := PUInt32Array(Dest)[2]; |
PUInt32Array(Dest)[2] := T; |
DES_Func(@PUInt32Array(Dest)[0], @PUInt32Array(Dest)[0], @PUInt32Array(FAdditionalBuffer)[160]); |
DES_Func(@PUInt32Array(Dest)[2], @PUInt32Array(Dest)[2], @PUInt32Array(FAdditionalBuffer)[160]); |
end; |
{ TCipher_3TDES } |
class function TCipher_3TDES.Context: TCipherContext; |
begin |
Result := inherited Context; |
Result.BlockSize := 24; |
Result.BufferSize := 24; |
Result.MinRounds := 1; |
Result.MaxRounds := 1; |
Result.CipherType := [ctSymmetric, ctBlock]; |
end; |
procedure TCipher_3TDES.DoEncode(Source, Dest: Pointer; Size: Integer); |
var |
T: UInt32; |
begin |
Assert(Size = Context.BlockSize); |
DES_Func(@PUInt32Array(Source)[0], @PUInt32Array(Dest)[0], FAdditionalBuffer); |
DES_Func(@PUInt32Array(Source)[2], @PUInt32Array(Dest)[2], FAdditionalBuffer); |
DES_Func(@PUInt32Array(Source)[4], @PUInt32Array(Dest)[4], FAdditionalBuffer); |
T := PUInt32Array(Dest)[1]; |
PUInt32Array(Dest)[1] := PUInt32Array(Dest)[2]; |
PUInt32Array(Dest)[2] := T; |
T := PUInt32Array(Dest)[3]; |
PUInt32Array(Dest)[3] := PUInt32Array(Dest)[4]; |
PUInt32Array(Dest)[4] := T; |
DES_Func(@PUInt32Array(Dest)[0], @PUInt32Array(Dest)[0], @PUInt32Array(FAdditionalBuffer)[32]); |
DES_Func(@PUInt32Array(Dest)[2], @PUInt32Array(Dest)[2], @PUInt32Array(FAdditionalBuffer)[32]); |
DES_Func(@PUInt32Array(Dest)[4], @PUInt32Array(Dest)[4], @PUInt32Array(FAdditionalBuffer)[32]); |
T := PUInt32Array(Dest)[1]; |
PUInt32Array(Dest)[1] := PUInt32Array(Dest)[2]; |
PUInt32Array(Dest)[2] := T; |
T := PUInt32Array(Dest)[3]; |
PUInt32Array(Dest)[3] := PUInt32Array(Dest)[4]; |
PUInt32Array(Dest)[4] := T; |
DES_Func(@PUInt32Array(Dest)[0], @PUInt32Array(Dest)[0], @PUInt32Array(FAdditionalBuffer)[64]); |
DES_Func(@PUInt32Array(Dest)[2], @PUInt32Array(Dest)[2], @PUInt32Array(FAdditionalBuffer)[64]); |
DES_Func(@PUInt32Array(Dest)[4], @PUInt32Array(Dest)[4], @PUInt32Array(FAdditionalBuffer)[64]); |
end; |
procedure TCipher_3TDES.DoDecode(Source, Dest: Pointer; Size: Integer); |
var |
T: UInt32; |
begin |
Assert(Size = Context.BlockSize); |
DES_Func(@PUInt32Array(Source)[0], @PUInt32Array(Dest)[0], @PUInt32Array(FAdditionalBuffer)[96]); |
DES_Func(@PUInt32Array(Source)[2], @PUInt32Array(Dest)[2], @PUInt32Array(FAdditionalBuffer)[96]); |
DES_Func(@PUInt32Array(Source)[4], @PUInt32Array(Dest)[4], @PUInt32Array(FAdditionalBuffer)[96]); |
T := PUInt32Array(Dest)[1]; |
PUInt32Array(Dest)[1] := PUInt32Array(Dest)[2]; |
PUInt32Array(Dest)[2] := T; |
T := PUInt32Array(Dest)[3]; |
PUInt32Array(Dest)[3] := PUInt32Array(Dest)[4]; |
PUInt32Array(Dest)[4] := T; |
DES_Func(@PUInt32Array(Dest)[0], @PUInt32Array(Dest)[0], @PUInt32Array(FAdditionalBuffer)[128]); |
DES_Func(@PUInt32Array(Dest)[2], @PUInt32Array(Dest)[2], @PUInt32Array(FAdditionalBuffer)[128]); |
DES_Func(@PUInt32Array(Dest)[4], @PUInt32Array(Dest)[4], @PUInt32Array(FAdditionalBuffer)[128]); |
T := PUInt32Array(Dest)[1]; |
PUInt32Array(Dest)[1] := PUInt32Array(Dest)[2]; |
PUInt32Array(Dest)[2] := T; |
T := PUInt32Array(Dest)[3]; |
PUInt32Array(Dest)[3] := PUInt32Array(Dest)[4]; |
PUInt32Array(Dest)[4] := T; |
DES_Func(@PUInt32Array(Dest)[0], @PUInt32Array(Dest)[0], @PUInt32Array(FAdditionalBuffer)[160]); |
DES_Func(@PUInt32Array(Dest)[2], @PUInt32Array(Dest)[2], @PUInt32Array(FAdditionalBuffer)[160]); |
DES_Func(@PUInt32Array(Dest)[4], @PUInt32Array(Dest)[4], @PUInt32Array(FAdditionalBuffer)[160]); |
end; |
{ TCipher_3Way } |
type |
P3Way_Key = ^T3Way_Key; |
T3Way_Key = packed record |
E_Key: array[0..2] of UInt32; |
E_Data: array[0..11] of UInt32; |
D_Key: array[0..2] of UInt32; |
D_Data: array[0..11] of UInt32; |
end; |
class function TCipher_3Way.Context: TCipherContext; |
begin |
Result.KeySize := 12; |
Result.BlockSize := 12; |
Result.BufferSize := 12; |
Result.AdditionalBufferSize := SizeOf(T3Way_Key); |
Result.NeedsAdditionalBufferBackup := False; |
Result.MinRounds := 1; |
Result.MaxRounds := 1; |
Result.CipherType := [ctSymmetric, ctBlock]; |
end; |
procedure TCipher_3Way.DoInit(const Key; Size: Integer); |
procedure RANDGenerate(Start: UInt32; var P: array of UInt32); |
var |
I: Integer; |
begin |
for I := 0 to 11 do |
begin |
P[I] := Start; |
Start := Start shl 1; |
if Start and $10000 <> 0 then |
Start := Start xor $11011; |
end; |
end; |
var |
A0, A1, A2: UInt32; |
B0, B1, B2: UInt32; |
P3WayKey: P3Way_Key; |
begin |
P3WayKey := P3Way_Key(FAdditionalBuffer); |
Move(Key, P3WayKey.E_Key, Size); |
Move(Key, P3WayKey.D_Key, Size); |
RANDGenerate($0B0B, P3WayKey.E_Data); |
RANDGenerate($B1B1, P3WayKey.D_Data); |
A0 := P3WayKey.D_Key[0]; |
A1 := P3WayKey.D_Key[1]; |
A2 := P3WayKey.D_Key[2]; |
B0 := A0 xor A0 shr 16 xor A1 shl 16 xor A1 shr 16 xor A2 shl 16 xor |
A1 shr 24 xor A2 shl 8 xor A2 shr 8 xor A0 shl 24 xor |
A2 shr 16 xor A0 shl 16 xor A2 shr 24 xor A0 shl 8; |
B1 := A1 xor A1 shr 16 xor A2 shl 16 xor A2 shr 16 xor A0 shl 16 xor |
A2 shr 24 xor A0 shl 8 xor A0 shr 8 xor A1 shl 24 xor |
A0 shr 16 xor A1 shl 16 xor A0 shr 24 xor A1 shl 8; |
B2 := A2 xor A2 shr 16 xor A0 shl 16 xor A0 shr 16 xor A1 shl 16 xor |
A0 shr 24 xor A1 shl 8 xor A1 shr 8 xor A2 shl 24 xor |
A1 shr 16 xor A2 shl 16 xor A1 shr 24 xor A2 shl 8; |
P3WayKey.D_Key[2] := ReverseBits(B0); |
P3WayKey.D_Key[1] := ReverseBits(B1); |
P3WayKey.D_Key[0] := ReverseBits(B2); |
inherited; |
end; |
procedure TCipher_3Way.DoEncode(Source, Dest: Pointer; Size: Integer); |
var |
I: Integer; |
A0, A1, A2: UInt32; |
B0, B1, B2: UInt32; |
K0, K1, K2: UInt32; |
E: PUInt32; |
P3WayKey: P3Way_Key; |
begin |
Assert(Size = Context.BlockSize); |
P3WayKey := P3Way_Key(FAdditionalBuffer); |
K0 := P3WayKey.E_Key[0]; |
K1 := P3WayKey.E_Key[1]; |
K2 := P3WayKey.E_Key[2]; |
E := @P3WayKey.E_Data; |
A0 := PUInt32Array(Source)[0]; |
A1 := PUInt32Array(Source)[1]; |
A2 := PUInt32Array(Source)[2]; |
for I := 0 to 10 do |
begin |
A0 := A0 xor K0 xor E^ shl 16; |
A1 := A1 xor K1; |
A2 := A2 xor K2 xor E^; |
Inc(E); |
B0 := A0 xor A0 shr 16 xor A1 shl 16 xor A1 shr 16 xor A2 shl 16 xor |
A1 shr 24 xor A2 shl 8 xor A2 shr 8 xor A0 shl 24 xor |
A2 shr 16 xor A0 shl 16 xor A2 shr 24 xor A0 shl 8; |
B1 := A1 xor A1 shr 16 xor A2 shl 16 xor A2 shr 16 xor A0 shl 16 xor |
A2 shr 24 xor A0 shl 8 xor A0 shr 8 xor A1 shl 24 xor |
A0 shr 16 xor A1 shl 16 xor A0 shr 24 xor A1 shl 8; |
B2 := A2 xor A2 shr 16 xor A0 shl 16 xor A0 shr 16 xor A1 shl 16 xor |
A0 shr 24 xor A1 shl 8 xor A1 shr 8 xor A2 shl 24 xor |
A1 shr 16 xor A2 shl 16 xor A1 shr 24 xor A2 shl 8; |
B0 := B0 shr 10 or B0 shl 22; |
B2 := B2 shl 1 or B2 shr 31; |
A0 := B0 xor (B1 or not B2); |
A1 := B1 xor (B2 or not B0); |
A2 := B2 xor (B0 or not B1); |
A0 := A0 shl 1 or A0 shr 31; |
A2 := A2 shr 10 or A2 shl 22; |
end; |
A0 := A0 xor K0 xor E^ shl 16; |
A1 := A1 xor K1; |
A2 := A2 xor K2 xor E^; |
PUInt32Array(Dest)[0] := A0 xor A0 shr 16 xor A1 shl 16 xor A1 shr 16 xor A2 shl 16 xor |
A1 shr 24 xor A2 shl 8 xor A2 shr 8 xor A0 shl 24 xor |
A2 shr 16 xor A0 shl 16 xor A2 shr 24 xor A0 shl 8; |
PUInt32Array(Dest)[1] := A1 xor A1 shr 16 xor A2 shl 16 xor A2 shr 16 xor A0 shl 16 xor |
A2 shr 24 xor A0 shl 8 xor A0 shr 8 xor A1 shl 24 xor |
A0 shr 16 xor A1 shl 16 xor A0 shr 24 xor A1 shl 8; |
PUInt32Array(Dest)[2] := A2 xor A2 shr 16 xor A0 shl 16 xor A0 shr 16 xor A1 shl 16 xor |
A0 shr 24 xor A1 shl 8 xor A1 shr 8 xor A2 shl 24 xor |
A1 shr 16 xor A2 shl 16 xor A1 shr 24 xor A2 shl 8; |
end; |
procedure TCipher_3Way.DoDecode(Source, Dest: Pointer; Size: Integer); |
var |
I: Integer; |
A0, A1, A2: UInt32; |
B0, B1, B2: UInt32; |
K0, K1, K2: UInt32; |
E: PUInt32; |
P3WayKey: P3Way_Key; |
begin |
Assert(Size = Context.BlockSize); |
P3WayKey := P3Way_Key(FAdditionalBuffer); |
K0 := P3WayKey.D_Key[0]; |
K1 := P3WayKey.D_Key[1]; |
K2 := P3WayKey.D_Key[2]; |
E := @P3WayKey.D_Data; |
A0 := ReverseBits(PUInt32Array(Source)[2]); |
A1 := ReverseBits(PUInt32Array(Source)[1]); |
A2 := ReverseBits(PUInt32Array(Source)[0]); |
for I := 0 to 10 do |
begin |
A0 := A0 xor K0 xor E^ shl 16; |
A1 := A1 xor K1; |
A2 := A2 xor K2 xor E^; |
Inc(E); |
B0 := A0 xor A0 shr 16 xor A1 shl 16 xor A1 shr 16 xor A2 shl 16 xor |
A1 shr 24 xor A2 shl 8 xor A2 shr 8 xor A0 shl 24 xor |
A2 shr 16 xor A0 shl 16 xor A2 shr 24 xor A0 shl 8; |
B1 := A1 xor A1 shr 16 xor A2 shl 16 xor A2 shr 16 xor A0 shl 16 xor |
A2 shr 24 xor A0 shl 8 xor A0 shr 8 xor A1 shl 24 xor |
A0 shr 16 xor A1 shl 16 xor A0 shr 24 xor A1 shl 8; |
B2 := A2 xor A2 shr 16 xor A0 shl 16 xor A0 shr 16 xor A1 shl 16 xor |
A0 shr 24 xor A1 shl 8 xor A1 shr 8 xor A2 shl 24 xor |
A1 shr 16 xor A2 shl 16 xor A1 shr 24 xor A2 shl 8; |
B0 := B0 shr 10 or B0 shl 22; |
B2 := B2 shl 1 or B2 shr 31; |
A0 := B0 xor (B1 or not B2); |
A1 := B1 xor (B2 or not B0); |
A2 := B2 xor (B0 or not B1); |
A0 := A0 shl 1 or A0 shr 31; |
A2 := A2 shr 10 or A2 shl 22; |
end; |
A0 := A0 xor K0 xor E^ shl 16; |
A1 := A1 xor K1; |
A2 := A2 xor K2 xor E^; |
B0 := A0 xor A0 shr 16 xor A1 shl 16 xor A1 shr 16 xor A2 shl 16 xor |
A1 shr 24 xor A2 shl 8 xor A2 shr 8 xor A0 shl 24 xor |
A2 shr 16 xor A0 shl 16 xor A2 shr 24 xor A0 shl 8; |
B1 := A1 xor A1 shr 16 xor A2 shl 16 xor A2 shr 16 xor A0 shl 16 xor |
A2 shr 24 xor A0 shl 8 xor A0 shr 8 xor A1 shl 24 xor |
A0 shr 16 xor A1 shl 16 xor A0 shr 24 xor A1 shl 8; |
B2 := A2 xor A2 shr 16 xor A0 shl 16 xor A0 shr 16 xor A1 shl 16 xor |
A0 shr 24 xor A1 shl 8 xor A1 shr 8 xor A2 shl 24 xor |
A1 shr 16 xor A2 shl 16 xor A1 shr 24 xor A2 shl 8; |
PUInt32Array(Dest)[2] := ReverseBits(B0); |
PUInt32Array(Dest)[1] := ReverseBits(B1); |
PUInt32Array(Dest)[0] := ReverseBits(B2); |
end; |
{ TCipher_Cast128 } |
class function TCipher_Cast128.Context: TCipherContext; |
begin |
Result.KeySize := 16; |
Result.BlockSize := 8; |
Result.BufferSize := 8; |
Result.AdditionalBufferSize := 128; |
Result.NeedsAdditionalBufferBackup := false; |
Result.MinRounds := 12; |
Result.MaxRounds := 16; |
Result.CipherType := [ctSymmetric, ctBlock]; |
end; |
procedure TCipher_Cast128.DoInit(const Key; Size: Integer); |
var |
Z, X, T: array[0..3] of UInt32; |
K: PUInt32Array; |
I: UInt32; |
begin |
// as per rfc2144 the number of rounds is 12 for key sizes <= 80 bit, |
// otherwise 16 |
if Size <= 10 then |
FRounds := 12 |
else |
FRounds := 16; |
K := FAdditionalBuffer; |
FillChar(X, SizeOf(X), 0); |
Move(Key, X, Size); |
SwapUInt32Buffer(X, X, 4); |
I := 0; |
while I < 32 do |
begin |
if I and 4 = 0 then |
begin |
Z[0] := X[0] xor Cast128_Key[0, X[3] shr 16 and $FF] xor |
Cast128_Key[1, X[3] and $FF] xor |
Cast128_Key[2, X[3] shr 24] xor |
Cast128_Key[3, X[3] shr 8 and $FF] xor |
Cast128_Key[2, X[2] shr 24]; |
T[0] := Z[0]; |
Z[1] := X[2] xor Cast128_Key[0, Z[0] shr 24] xor |
Cast128_Key[1, Z[0] shr 8 and $FF] xor |
Cast128_Key[2, Z[0] shr 16 and $FF] xor |
Cast128_Key[3, Z[0] and $FF] xor |
Cast128_Key[3, X[2] shr 8 and $FF]; |
T[1] := Z[1]; |
Z[2] := X[3] xor Cast128_Key[0, Z[1] and $FF] xor |
Cast128_Key[1, Z[1] shr 8 and $FF] xor |
Cast128_Key[2, Z[1] shr 16 and $FF] xor |
Cast128_Key[3, Z[1] shr 24] xor |
Cast128_Key[0, X[2] shr 16 and $FF]; |
T[2] := Z[2]; |
Z[3] := X[1] xor Cast128_Key[0, Z[2] shr 8 and $FF] xor |
Cast128_Key[1, Z[2] shr 16 and $FF] xor |
Cast128_Key[2, Z[2] and $FF] xor |
Cast128_Key[3, Z[2] shr 24] xor |
Cast128_Key[1, X[2] and $FF]; |
T[3] := Z[3]; |
end |
else |
begin |
X[0] := Z[2] xor Cast128_Key[0, Z[1] shr 16 and $FF] xor |
Cast128_Key[1, Z[1] and $FF] xor |
Cast128_Key[2, Z[1] shr 24] xor |
Cast128_Key[3, Z[1] shr 8 and $FF] xor |
Cast128_Key[2, Z[0] shr 24]; |
T[0] := X[0]; |
X[1] := Z[0] xor Cast128_Key[0, X[0] shr 24] xor |
Cast128_Key[1, X[0] shr 8 and $FF] xor |
Cast128_Key[2, X[0] shr 16 and $FF] xor |
Cast128_Key[3, X[0] and $FF] xor |
Cast128_Key[3, Z[0] shr 8 and $FF]; |
T[1] := X[1]; |
X[2] := Z[1] xor Cast128_Key[0, X[1] and $FF] xor |
Cast128_Key[1, X[1] shr 8 and $FF] xor |
Cast128_Key[2, X[1] shr 16 and $FF] xor |
Cast128_Key[3, X[1] shr 24] xor |
Cast128_Key[0, Z[0] shr 16 and $FF]; |
T[2] := X[2]; |
X[3] := Z[3] xor Cast128_Key[0, X[2] shr 8 and $FF] xor |
Cast128_Key[1, X[2] shr 16 and $FF] xor |
Cast128_Key[2, X[2] and $FF] xor |
Cast128_Key[3, X[2] shr 24] xor |
Cast128_Key[1, Z[0] and $FF]; |
T[3] := X[3]; |
end; |
case I and 12 of |
0,12: |
begin |
K[I + 0] := Cast128_Key[0, T[2] shr 24] xor |
Cast128_Key[1, T[2] shr 16 and $FF] xor |
Cast128_Key[2, T[1] and $FF] xor |
Cast128_Key[3, T[1] shr 8 and $FF]; |
K[I + 1] := Cast128_Key[0, T[2] shr 8 and $FF] xor |
Cast128_Key[1, T[2] and $FF] xor |
Cast128_Key[2, T[1] shr 16 and $FF] xor |
Cast128_Key[3, T[1] shr 24]; |
K[I + 2] := Cast128_Key[0, T[3] shr 24] xor |
Cast128_Key[1, T[3] shr 16 and $FF] xor |
Cast128_Key[2, T[0] and $FF] xor |
Cast128_Key[3, T[0] shr 8 and $FF]; |
K[I + 3] := Cast128_Key[0, T[3] shr 8 and $FF] xor |
Cast128_Key[1, T[3] and $FF] xor |
Cast128_Key[2, T[0] shr 16 and $FF] xor |
Cast128_Key[3, T[0] shr 24]; |
end; |
4,8: |
begin |
K[I + 0] := Cast128_Key[0, T[0] and $FF] xor |
Cast128_Key[1, T[0] shr 8 and $FF] xor |
Cast128_Key[2, T[3] shr 24] xor |
Cast128_Key[3, T[3] shr 16 and $FF]; |
K[I + 1] := Cast128_Key[0, T[0] shr 16 and $FF] xor |
Cast128_Key[1, T[0] shr 24] xor |
Cast128_Key[2, T[3] shr 8 and $FF] xor |
Cast128_Key[3, T[3] and $FF]; |
K[I + 2] := Cast128_Key[0, T[1] and $FF] xor |
Cast128_Key[1, T[1] shr 8 and $FF] xor |
Cast128_Key[2, T[2] shr 24] xor |
Cast128_Key[3, T[2] shr 16 and $FF]; |
K[I + 3] := Cast128_Key[0, T[1] shr 16 and $FF] xor |
Cast128_Key[1, T[1] shr 24] xor |
Cast128_Key[2, T[2] shr 8 and $FF] xor |
Cast128_Key[3, T[2] and $FF]; |
end; |
end; |
case I and 12 of |
0: begin |
K[I + 0] := K[I + 0] xor Cast128_Key[0, Z[0] shr 8 and $FF]; |
K[I + 1] := K[I + 1] xor Cast128_Key[1, Z[1] shr 8 and $FF]; |
K[I + 2] := K[I + 2] xor Cast128_Key[2, Z[2] shr 16 and $FF]; |
K[I + 3] := K[I + 3] xor Cast128_Key[3, Z[3] shr 24]; |
end; |
4: begin |
K[I + 0] := K[I + 0] xor Cast128_Key[0, X[2] shr 24]; |
K[I + 1] := K[I + 1] xor Cast128_Key[1, X[3] shr 16 and $FF]; |
K[I + 2] := K[I + 2] xor Cast128_Key[2, X[0] and $FF]; |
K[I + 3] := K[I + 3] xor Cast128_Key[3, X[1] and $FF]; |
end; |
8: begin |
K[I + 0] := K[I + 0] xor Cast128_Key[0, Z[2] shr 16 and $FF]; |
K[I + 1] := K[I + 1] xor Cast128_Key[1, Z[3] shr 24]; |
K[I + 2] := K[I + 2] xor Cast128_Key[2, Z[0] shr 8 and $FF]; |
K[I + 3] := K[I + 3] xor Cast128_Key[3, Z[1] shr 8 and $FF]; |
end; |
12: begin |
K[I + 0] := K[I + 0] xor Cast128_Key[0, X[0] and $FF]; |
K[I + 1] := K[I + 1] xor Cast128_Key[1, X[1] and $FF]; |
K[I + 2] := K[I + 2] xor Cast128_Key[2, X[2] shr 24]; |
K[I + 3] := K[I + 3] xor Cast128_Key[3, X[3] shr 16 and $FF]; |
end; |
end; |
if I >= 16 then |
begin |
K[I + 0] := K[I + 0] and $1F; |
K[I + 1] := K[I + 1] and $1F; |
K[I + 2] := K[I + 2] and $1F; |
K[I + 3] := K[I + 3] and $1F; |
end; |
Inc(I, 4); |
end; |
ProtectBuffer(X, SizeOf(X)); |
ProtectBuffer(Z, SizeOf(Z)); |
ProtectBuffer(T, SizeOf(T)); |
inherited; |
end; |
procedure TCipher_Cast128.DoEncode(Source, Dest: Pointer; Size: Integer); |
var |
T, I, A, B: UInt32; |
K: PUInt32Array; |
begin |
Assert(Size = Context.BlockSize); |
K := FAdditionalBuffer; |
A := SwapUInt32(PUInt32Array(Source)[0]); |
B := SwapUInt32(PUInt32Array(Source)[1]); |
for I := 0 to 2 do |
begin |
T := K[0] + B; |
T := T shl K[16] or T shr (32 - K[16]); |
A := A xor (Cast128_Data[0, T shr 24] xor |
Cast128_Data[1, T shr 16 and $FF] - |
Cast128_Data[2, T shr 8 and $FF] + |
Cast128_Data[3, T and $FF]); |
T := K[1] xor A; |
T := T shl K[17] or T shr (32 - K[17]); |
B := B xor (Cast128_Data[0, T shr 24] - |
Cast128_Data[1, T shr 16 and $FF] + |
Cast128_Data[2, T shr 8 and $FF] xor |
Cast128_Data[3, T and $FF]); |
T := K[2] - B; |
T := T shl K[18] or T shr (32 - K[18]); |
A := A xor (Cast128_Data[0, T shr 24] + |
Cast128_Data[1, T shr 16 and $FF] xor |
Cast128_Data[2, T shr 8 and $FF] - |
Cast128_Data[3, T and $FF]); |
T := K[3] + A; |
T := T shl K[19] or T shr (32 - K[19]); |
B := B xor (Cast128_Data[0, T shr 24] xor |
Cast128_Data[1, T shr 16 and $FF] - |
Cast128_Data[2, T shr 8 and $FF] + |
Cast128_Data[3, T and $FF]); |
if I = 2 then |
Break; |
T := K[4] xor B; |
T := T shl K[20] or T shr (32 - K[20]); |
A := A xor (Cast128_Data[0, T shr 24] - |
Cast128_Data[1, T shr 16 and $FF] + |
Cast128_Data[2, T shr 8 and $FF] xor |
Cast128_Data[3, T and $FF]); |
T := K[5] - A; |
T := T shl K[21] or T shr (32 - K[21]); |
B := B xor (Cast128_Data[0, T shr 24] + |
Cast128_Data[1, T shr 16 and $FF] xor |
Cast128_Data[2, T shr 8 and $FF] - |
Cast128_Data[3, T and $FF]); |
if (I = 1) and (FRounds <= 12) then |
Break; |
K := @K[6]; |
end; |
PUInt32Array(Dest)[0] := SwapUInt32(B); |
PUInt32Array(Dest)[1] := SwapUInt32(A); |
end; |
procedure TCipher_Cast128.DoDecode(Source, Dest: Pointer; Size: Integer); |
var |
T, I, A, B: UInt32; |
K: PUInt32Array; |
JumpStart: Boolean; |
begin |
Assert(Size = Context.BlockSize); |
JumpStart := False; |
K := @PUInt32Array(FAdditionalBuffer)[12]; |
B := SwapUInt32(PUInt32Array(Source)[0]); |
A := SwapUInt32(PUInt32Array(Source)[1]); |
I := 2; |
if FRounds <= 12 then |
Dec(PUInt32(K), 6) |
else |
JumpStart := True; |
while I > 0 do |
begin |
if not JumpStart then |
begin |
Dec(I); |
T := K[5] - A; |
T := T shl K[21] or T shr (32 - K[21]); |
B := B xor (Cast128_Data[0, T shr 24] + |
Cast128_Data[1, T shr 16 and $FF] xor |
Cast128_Data[2, T shr 8 and $FF] - |
Cast128_Data[3, T and $FF]); |
T := K[4] xor B; |
T := T shl K[20] or T shr (32 - K[20]); |
A := A xor (Cast128_Data[0, T shr 24] - |
Cast128_Data[1, T shr 16 and $FF] + |
Cast128_Data[2, T shr 8 and $FF] xor |
Cast128_Data[3, T and $FF]); |
end |
else |
JumpStart := False; |
T := K[3] + A; |
T := T shl K[19] or T shr (32 - K[19]); |
B := B xor (Cast128_Data[0, T shr 24] xor |
Cast128_Data[1, T shr 16 and $FF] - |
Cast128_Data[2, T shr 8 and $FF] + |
Cast128_Data[3, T and $FF]); |
T := K[2] - B; |
T := T shl K[18] or T shr (32 - K[18]); |
A := A xor (Cast128_Data[0, T shr 24] + |
Cast128_Data[1, T shr 16 and $FF] xor |
Cast128_Data[2, T shr 8 and $FF] - |
Cast128_Data[3, T and $FF]); |
T := K[1] xor A; |
T := T shl K[17] or T shr (32 - K[17]); |
B := B xor (Cast128_Data[0, T shr 24] - |
Cast128_Data[1, T shr 16 and $FF] + |
Cast128_Data[2, T shr 8 and $FF] xor |
Cast128_Data[3, T and $FF]); |
T := K[0] + B; |
T := T shl K[16] or T shr (32 - K[16]); |
A := A xor (Cast128_Data[0, T shr 24] xor |
Cast128_Data[1, T shr 16 and $FF] - |
Cast128_Data[2, T shr 8 and $FF] + |
Cast128_Data[3, T and $FF]); |
Dec(PUInt32(K), 6); |
end; |
PUInt32Array(Dest)[0] := SwapUInt32(A); |
PUInt32Array(Dest)[1] := SwapUInt32(B); |
end; |
{ TCipher_Gost } |
class function TCipher_Gost.Context: TCipherContext; |
begin |
Result.KeySize := 32; |
Result.BlockSize := 8; |
Result.BufferSize := 8; |
Result.AdditionalBufferSize := 32; |
Result.NeedsAdditionalBufferBackup := false; |
Result.MinRounds := 1; |
Result.MaxRounds := 1; |
Result.CipherType := [ctSymmetric, ctBlock]; |
end; |
procedure TCipher_Gost.DoInit(const Key; Size: Integer); |
begin |
Move(Key, FAdditionalBuffer^, Size); |
inherited; |
end; |
procedure TCipher_Gost.DoEncode(Source, Dest: Pointer; Size: Integer); |
var |
I, A, B, T: UInt32; |
K: PUInt32Array; |
begin |
Assert(Size = Context.BlockSize); |
K := FAdditionalBuffer; |
A := PUInt32Array(Source)[0]; |
B := PUInt32Array(Source)[1]; |
for I := 0 to 11 do |
begin |
if I and 3 = 0 then |
K := FAdditionalBuffer; |
T := A + K[0]; |
B := B xor Gost_Data[0, T and $FF] xor |
Gost_Data[1, T shr 8 and $FF] xor |
Gost_Data[2, T shr 16 and $FF] xor |
Gost_Data[3, T shr 24 ]; |
T := B + K[1]; |
A := A xor Gost_Data[0, T and $FF] xor |
Gost_Data[1, T shr 8 and $FF] xor |
Gost_Data[2, T shr 16 and $FF] xor |
Gost_Data[3, T shr 24 ]; |
K := @K[2]; |
end; |
K := @PUInt32Array(FAdditionalBuffer)[6]; |
for I := 0 to 3 do |
begin |
T := A + K[1]; |
B := B xor Gost_Data[0, T and $FF] xor |
Gost_Data[1, T shr 8 and $FF] xor |
Gost_Data[2, T shr 16 and $FF] xor |
Gost_Data[3, T shr 24 ]; |
T := B + K[0]; |
A := A xor Gost_Data[0, T and $FF] xor |
Gost_Data[1, T shr 8 and $FF] xor |
Gost_Data[2, T shr 16 and $FF] xor |
Gost_Data[3, T shr 24 ]; |
Dec(PUInt32(K), 2); |
end; |
PUInt32Array(Dest)[0] := B; |
PUInt32Array(Dest)[1] := A; |
end; |
procedure TCipher_Gost.DoDecode(Source, Dest: Pointer; Size: Integer); |
var |
I, A, B, T: UInt32; |
K: PUInt32Array; |
begin |
Assert(Size = Context.BlockSize); |
A := PUInt32Array(Source)[0]; |
B := PUInt32Array(Source)[1]; |
K := FAdditionalBuffer; |
for I := 0 to 3 do |
begin |
T := A + K[0]; |
B := B xor Gost_Data[0, T and $FF] xor |
Gost_Data[1, T shr 8 and $FF] xor |
Gost_Data[2, T shr 16 and $FF] xor |
Gost_Data[3, T shr 24]; |
T := B + K[1]; |
A := A xor Gost_Data[0, T and $FF] xor |
Gost_Data[1, T shr 8 and $FF] xor |
Gost_Data[2, T shr 16 and $FF] xor |
Gost_Data[3, T shr 24]; |
K := @K[2]; |
end; |
for I := 0 to 11 do |
begin |
if I and 3 = 0 then |
K := @PUInt32Array(FAdditionalBuffer)[6]; |
T := A + K[1]; |
B := B xor Gost_Data[0, T and $FF] xor |
Gost_Data[1, T shr 8 and $FF] xor |
Gost_Data[2, T shr 16 and $FF] xor |
Gost_Data[3, T shr 24]; |
T := B + K[0]; |
A := A xor Gost_Data[0, T and $FF] xor |
Gost_Data[1, T shr 8 and $FF] xor |
Gost_Data[2, T shr 16 and $FF] xor |
Gost_Data[3, T shr 24]; |
Dec(PUInt32(K), 2); |
end; |
PUInt32Array(Dest)[0] := B; |
PUInt32Array(Dest)[1] := A; |
end; |
{ TCipher_Misty } |
class function TCipher_Misty.Context: TCipherContext; |
begin |
Result.KeySize := 16; |
Result.BlockSize := 8; |
Result.BufferSize := 8; |
Result.AdditionalBufferSize := 128; |
Result.NeedsAdditionalBufferBackup := False; |
Result.MinRounds := 1; |
Result.MaxRounds := 1; |
Result.CipherType := [ctSymmetric, ctBlock]; |
end; |
function Misty_I(Value, Key: UInt32): UInt32; |
begin |
Result := Misty_Data9[Value shr 7 and $1FF] xor (Value and $7F); |
Value := (Misty_Data7[Value and $7F] xor Result and $7F) xor (Key shr 9 and $7F); |
Result := Misty_Data9[Result xor (Key and $1FF)] xor Value or Value shl 9; |
end; |
function Misty_O(Value, K: UInt32; Key: PUInt32Array): UInt32; |
begin |
Result := Misty_I((Value shr 16) xor Key[K], Key[(K + 5) and 7 + 8]) xor (Value and $FFFF); |
Value := Misty_I((Value and $FFFF) xor Key[(K + 2) and 7], Key[(K + 1) and 7 + 8]) xor Result; |
Result := Misty_I(Result xor Key[(K + 7) and 7], Key[(K + 3) and 7 + 8]) xor Value; |
Result := Result or (Value xor Key[(K + 4) and 7]) shl 16; |
end; |
function Misty_E(Value, K: UInt32; Key: PUInt32Array): UInt32; |
begin |
Result := Value shr 16; |
Value := Value and $FFFF; |
if K and 1 <> 0 then |
begin |
K := K shr 1; |
Value := Value xor (Result and Key[(K + 2) and 7 + 8]); |
Result := Result xor (Value or Key[(K + 4) and 7]); |
end |
else |
begin |
K := K shr 1; |
Value := Value xor (Result and Key[K]); |
Result := Result xor (Value or Key[(K + 6) and 7 + 8]); |
end; |
Result:= (Result shl 16) or Value; |
end; |
function Misty_D(Value, K: UInt32; Key: PUInt32Array): UInt32; |
begin |
Result := Value shr 16; |
Value := Value and $FFFF; |
if K and 1 <> 0 then |
begin |
K := K shr 1; |
Result := Result xor (Value or Key[(K + 4) and 7]); |
Value := Value xor (Result and Key[(K + 2) and 7 + 8]); |
end |
else |
begin |
K := K shr 1; |
Result := Result xor (Value or Key[(K + 6) and 7 + 8]); |
Value := Value xor (Result and Key[K]); |
end; |
Result:= (Result shl 16) or Value; |
end; |
procedure TCipher_Misty.DoInit(const Key; Size: Integer); |
var |
K: array[0..15] of Byte; |
D: PUInt32Array; |
I: Integer; |
begin |
FillChar(K, SizeOf(K), 0); |
Move(Key, K, Size); |
D := FAdditionalBuffer; |
for I := 0 to 7 do |
D[I] := K[I * 2] * 256 + K[I * 2 + 1]; |
for I := 0 to 7 do |
begin |
D[I + 8] := Misty_I(D[I], D[(I + 1) and 7]); |
D[I + 16] := D[I + 8] and $1FF; |
D[I + 24] := D[I + 8] shr 9; |
end; |
ProtectBuffer(K, SizeOf(K)); |
inherited; |
end; |
procedure TCipher_Misty.DoEncode(Source, Dest: Pointer; Size: Integer); |
var |
A, B: UInt32; |
begin |
Assert(Size = Context.BlockSize); |
A := PUInt32Array(Source)[0]; |
B := PUInt32Array(Source)[1]; |
A := Misty_E(A, 0, FAdditionalBuffer); |
B := Misty_E(B, 1, FAdditionalBuffer) xor Misty_O(A, 0, FAdditionalBuffer); |
A := A xor Misty_O(B, 1, FAdditionalBuffer); |
A := Misty_E(A, 2, FAdditionalBuffer); |
B := Misty_E(B, 3, FAdditionalBuffer) xor Misty_O(A, 2, FAdditionalBuffer); |
A := A xor Misty_O(B, 3, FAdditionalBuffer); |
A := Misty_E(A, 4, FAdditionalBuffer); |
B := Misty_E(B, 5, FAdditionalBuffer) xor Misty_O(A, 4, FAdditionalBuffer); |
A := A xor Misty_O(B, 5, FAdditionalBuffer); |
A := Misty_E(A, 6, FAdditionalBuffer); |
B := Misty_E(B, 7, FAdditionalBuffer) xor Misty_O(A, 6, FAdditionalBuffer); |
A := A xor Misty_O(B, 7, FAdditionalBuffer); |
PUInt32Array(Dest)[0] := Misty_E(B, 9, FAdditionalBuffer); |
PUInt32Array(Dest)[1] := Misty_E(A, 8, FAdditionalBuffer); |
end; |
procedure TCipher_Misty.DoDecode(Source, Dest: Pointer; Size: Integer); |
var |
A, B: UInt32; |
begin |
Assert(Size = Context.BlockSize); |
B := Misty_D(PUInt32Array(Source)[0], 9, FAdditionalBuffer); |
A := Misty_D(PUInt32Array(Source)[1], 8, FAdditionalBuffer); |
A := A xor Misty_O(B, 7, FAdditionalBuffer); |
B := Misty_D(B xor Misty_O(A, 6, FAdditionalBuffer), 7, FAdditionalBuffer); |
A := Misty_D(A, 6, FAdditionalBuffer); |
A := A xor Misty_O(B, 5, FAdditionalBuffer); |
B := Misty_D(B xor Misty_O(A, 4, FAdditionalBuffer), 5, FAdditionalBuffer); |
A := Misty_D(A, 4, FAdditionalBuffer); |
A := A xor Misty_O(B, 3, FAdditionalBuffer); |
B := Misty_D(B xor Misty_O(A, 2, FAdditionalBuffer), 3, FAdditionalBuffer); |
A := Misty_D(A, 2, FAdditionalBuffer); |
A := A xor Misty_O(B, 1, FAdditionalBuffer); |
PUInt32Array(Dest)[0] := Misty_D(A, 0, FAdditionalBuffer); |
PUInt32Array(Dest)[1] := Misty_D(B xor Misty_O(A, 0, FAdditionalBuffer), 1, FAdditionalBuffer); |
end; |
{ TCipher_NewDES } |
procedure NewDES_Func(Source, Dest, Key: PUInt8Array); |
var |
I: Integer; |
A, B, C, D, E, F, G, H: Byte; |
begin |
A := Source[0]; |
B := Source[1]; |
C := Source[2]; |
D := Source[3]; |
E := Source[4]; |
F := Source[5]; |
G := Source[6]; |
H := Source[7]; |
for I := 0 to 7 do |
begin |
E := E xor NewDES_Data[A xor Key[0]]; |
F := F xor NewDES_Data[B xor Key[1]]; |
G := G xor NewDES_Data[C xor Key[2]]; |
H := H xor NewDES_Data[D xor Key[3]]; |
B := B xor NewDES_Data[E xor Key[4]]; |
C := C xor NewDES_Data[F xor E]; |
D := D xor NewDES_Data[G xor Key[5]]; |
A := A xor NewDES_Data[H xor Key[6]]; |
Key := @Key[7]; |
end; |
E := E xor NewDES_Data[A xor Key[0]]; |
F := F xor NewDES_Data[B xor Key[1]]; |
G := G xor NewDES_Data[C xor Key[2]]; |
H := H xor NewDES_Data[D xor Key[3]]; |
Dest[0] := A; |
Dest[1] := B; |
Dest[2] := C; |
Dest[3] := D; |
Dest[4] := E; |
Dest[5] := F; |
Dest[6] := G; |
Dest[7] := H; |
end; |
class function TCipher_NewDES.Context: TCipherContext; |
begin |
Result.KeySize := 15; |
Result.BlockSize := 8; |
Result.BufferSize := 8; |
Result.AdditionalBufferSize := 60 * 2; |
Result.NeedsAdditionalBufferBackup := true; |
Result.MinRounds := 1; |
Result.MaxRounds := 1; |
Result.CipherType := [ctSymmetric, ctBlock]; |
end; |
procedure TCipher_NewDES.DoInit(const Key; Size: Integer); |
var |
K: array[0..14] of Byte; |
E: PUInt8Array; |
I: Integer; |
begin |
FillChar(K, SizeOf(K), 0); |
Move(Key, K, Size); |
E := FAdditionalBuffer; |
Move(K, E[ 0], 15); |
Move(K, E[15], 15); |
Move(K, E[30], 15); |
Move(K, E[45], 15); |
E := @E[60]; |
I := 11; |
repeat |
E[0] := K[I]; I := (I + 1) mod 15; |
E[1] := K[I]; I := (I + 1) mod 15; |
E[2] := K[I]; I := (I + 1) mod 15; |
E[3] := K[I]; I := (I + 9) mod 15; |
if I = 12 then |
Break; |
E[4] := K[I]; Inc(I); |
E[5] := K[I]; Inc(I); |
E[6] := K[I]; I := (I + 9) mod 15; |
E := @E[7]; |
until False; |
ProtectBuffer(K, SizeOf(K)); |
inherited; |
end; |
procedure TCipher_NewDES.DoEncode(Source, Dest: Pointer; Size: Integer); |
begin |
Assert(Size = Context.BlockSize); |
NewDES_Func(Source, Dest, FAdditionalBuffer); |
end; |
procedure TCipher_NewDES.DoDecode(Source, Dest: Pointer; Size: Integer); |
begin |
Assert(Size = Context.BlockSize); |
NewDES_Func(Source, Dest, @PUInt8Array(FAdditionalBuffer)[60]); |
end; |
{ TCipher_Q128 } |
class function TCipher_Q128.Context: TCipherContext; |
begin |
Result.KeySize := 16; |
Result.BlockSize := 16; |
Result.BufferSize := 16; |
Result.AdditionalBufferSize := 256; |
Result.NeedsAdditionalBufferBackup := false; |
Result.MinRounds := 1; |
Result.MaxRounds := 1; |
Result.CipherType := [ctSymmetric, ctBlock]; |
end; |
procedure TCipher_Q128.DoInit(const Key; Size: Integer); |
var |
K: array[0..3] of UInt32; |
D: PUInt32Array; |
I: Integer; |
begin |
FillChar(K, SizeOf(K), 0); |
Move(Key, K, Size); |
D := FAdditionalBuffer; |
for I := 19 downto 1 do |
begin |
K[1] := K[1] xor Q128_Data[K[0] and $03FF]; K[0] := K[0] shr 10 or K[0] shl 22; |
K[2] := K[2] xor Q128_Data[K[1] and $03FF]; K[1] := K[1] shr 10 or K[1] shl 22; |
K[3] := K[3] xor Q128_Data[K[2] and $03FF]; K[2] := K[2] shr 10 or K[2] shl 22; |
K[0] := K[0] xor Q128_Data[K[3] and $03FF]; K[3] := K[3] shr 10 or K[3] shl 22; |
if I <= 16 then |
begin |
D[0] := K[0]; |
D[1] := K[1]; |
D[2] := K[2]; |
D[3] := K[3]; |
D := @D[4]; |
end; |
end; |
ProtectBuffer(K, SizeOf(K)); |
inherited; |
end; |
procedure TCipher_Q128.DoEncode(Source, Dest: Pointer; Size: Integer); |
{$IFDEF X86ASM} |
asm |
PUSH ESI |
PUSH EDI |
PUSH EBX |
PUSH EBP |
PUSH ECX |
MOV EDI,[EAX].TCipher_Q128.FAdditionalBuffer |
MOV EAX,[EDX + 0] // B0 |
MOV EBX,[EDX + 4] // B1 |
MOV ECX,[EDX + 8] // B2 |
MOV EDX,[EDX + 12] // B3 |
MOV EBP,16 |
@@1: MOV ESI,EAX |
ROL ESI,10 |
AND EAX,03FFh |
MOV EAX,[EAX * 4 + OFFSET Q128_DATA] |
ADD EAX,[EDI + 0] |
XOR EAX,EBX |
MOV EBX,EAX |
ROL EBX,10 |
AND EAX,03FFh |
MOV EAX,[EAX * 4 + OFFSET Q128_DATA] |
ADD EAX,[EDI + 4] |
XOR EAX,ECX |
MOV ECX,EAX |
ROL ECX,10 |
AND EAX,03FFh |
MOV EAX,[EAX * 4 + OFFSET Q128_DATA] |
ADD EAX,[EDI + 8] |
XOR EAX,EDX |
MOV EDX,EAX |
ROL EDX,10 |
AND EAX,03FFh |
MOV EAX,[EAX * 4 + OFFSET Q128_DATA] |
ADD EAX,[EDI + 12] |
XOR EAX,ESI |
DEC EBP |
LEA EDI,[EDI + 16] |
JNZ @@1 |
POP ESI |
MOV [ESI + 0],EAX // B0 |
MOV [ESI + 4],EBX // B1 |
MOV [ESI + 8],ECX // B2 |
MOV [ESI + 12],EDX // B3 |
POP EBP |
POP EBX |
POP EDI |
POP ESI |
end; |
{$ELSE !X86ASM} |
var |
D: PUInt32Array; |
B0, B1, B2, B3, I: UInt32; |
begin |
Assert(Size = Context.BlockSize); |
D := Pointer(FAdditionalBuffer); |
B0 := PUInt32Array(Source)[0]; |
B1 := PUInt32Array(Source)[1]; |
B2 := PUInt32Array(Source)[2]; |
B3 := PUInt32Array(Source)[3]; |
for I := 0 to 15 do |
begin |
B1 := B1 xor (Q128_Data[B0 and $03FF] + D[0]); B0 := B0 shl 10 or B0 shr 22; |
B2 := B2 xor (Q128_Data[B1 and $03FF] + D[1]); B1 := B1 shl 10 or B1 shr 22; |
B3 := B3 xor (Q128_Data[B2 and $03FF] + D[2]); B2 := B2 shl 10 or B2 shr 22; |
B0 := B0 xor (Q128_Data[B3 and $03FF] + D[3]); B3 := B3 shl 10 or B3 shr 22; |
D := @D[4]; |
end; |
PUInt32Array(Dest)[0] := B0; |
PUInt32Array(Dest)[1] := B1; |
PUInt32Array(Dest)[2] := B2; |
PUInt32Array(Dest)[3] := B3; |
end; |
{$ENDIF !X86ASM} |
procedure TCipher_Q128.DoDecode(Source, Dest: Pointer; Size: Integer); |
{$IFDEF X86ASM} |
asm |
PUSH ESI |
PUSH EDI |
PUSH EBX |
PUSH EBP |
PUSH ECX |
MOV EDI,[EAX].TCipher_Q128.FAdditionalBuffer |
LEA EDI,[EDI + 64 * 4] |
MOV ESI,[EDX + 0] // B0 |
MOV EBX,[EDX + 4] // B1 |
MOV ECX,[EDX + 8] // B2 |
MOV EDX,[EDX + 12] // B3 |
MOV EBP,16 |
@@1: SUB EDI,16 |
ROR EDX,10 |
MOV EAX,EDX |
AND EAX,03FFh |
MOV EAX,[EAX * 4 + OFFSET Q128_DATA] |
ADD EAX,[EDI + 12] |
XOR ESI,EAX |
ROR ECX,10 |
MOV EAX,ECX |
AND EAX,03FFh |
MOV EAX,[EAX * 4 + OFFSET Q128_DATA] |
ADD EAX,[EDI + 8] |
XOR EDX,EAX |
ROR EBX,10 |
MOV EAX,EBX |
AND EAX,03FFh |
MOV EAX,[EAX * 4 + OFFSET Q128_DATA] |
ADD EAX,[EDI + 4] |
XOR ECX,EAX |
ROR ESI,10 |
MOV EAX,ESI |
AND EAX,03FFh |
MOV EAX,[EAX * 4 + OFFSET Q128_DATA] |
ADD EAX,[EDI] |
XOR EBX,EAX |
DEC EBP |
JNZ @@1 |
POP EAX |
MOV [EAX + 0],ESI // B0 |
MOV [EAX + 4],EBX // B1 |
MOV [EAX + 8],ECX // B2 |
MOV [EAX + 12],EDX // B3 |
POP EBP |
POP EBX |
POP EDI |
POP ESI |
end; |
{$ELSE !X86ASM} |
var |
D: PUInt32Array; |
B0, B1, B2, B3, I: UInt32; |
begin |
Assert(Size = Context.BlockSize); |
D := @PUInt32Array(FAdditionalBuffer)[60]; |
B0 := PUInt32Array(Source)[0]; |
B1 := PUInt32Array(Source)[1]; |
B2 := PUInt32Array(Source)[2]; |
B3 := PUInt32Array(Source)[3]; |
for I := 0 to 15 do |
begin |
B3 := B3 shr 10 or B3 shl 22; B0 := B0 xor (Q128_Data[B3 and $03FF] + D[3]); |
B2 := B2 shr 10 or B2 shl 22; B3 := B3 xor (Q128_Data[B2 and $03FF] + D[2]); |
B1 := B1 shr 10 or B1 shl 22; B2 := B2 xor (Q128_Data[B1 and $03FF] + D[1]); |
B0 := B0 shr 10 or B0 shl 22; B1 := B1 xor (Q128_Data[B0 and $03FF] + D[0]); |
Dec(PUInt32(D), 4); |
end; |
PUInt32Array(Dest)[0] := B0; |
PUInt32Array(Dest)[1] := B1; |
PUInt32Array(Dest)[2] := B2; |
PUInt32Array(Dest)[3] := B3; |
end; |
{$ENDIF !X86ASM} |
{ TCipher_RC2 } |
class function TCipher_RC2.Context: TCipherContext; |
begin |
Result.KeySize := 128; |
Result.BlockSize := 8; |
Result.BufferSize := 8; |
Result.AdditionalBufferSize := 128; |
Result.NeedsAdditionalBufferBackup := False; |
Result.MinRounds := 1; |
Result.MaxRounds := 1; |
Result.CipherType := [ctSymmetric, ctBlock]; |
end; |
procedure TCipher_RC2.DoInit(const Key; Size: Integer); |
// New keyscheduling according to RFC2268 and it's testcases. The V3 keysetup |
// was using an older, inferior version. Special thanks to Brendan Bosnan for |
// pointing that out. |
var |
I, L, Mask, KeyEffectiveBits: Integer; |
K: PUInt8Array; |
begin |
if Size <= 0 then |
Exit; |
KeyEffectiveBits := Size * 8; |
L := KeyEffectiveBits and 7; |
if L = 0 then |
Mask := $FF |
else |
Mask := $FF shr (8 - L); |
L := (KeyEffectiveBits + 7) shr 3; |
K := FAdditionalBuffer; |
Move(Key, K[0], Size); |
for I := Size to 127 do |
K[I] := RC2_Data[(K[I - Size] + K[I - 1]) and $FF]; |
K[128 - L] := RC2_Data[K[128 - L] and Mask]; |
for I := 127 - L downto 0 do |
K[I] := RC2_Data[K[I + 1] xor K[I + L]]; |
inherited; |
end; |
procedure TCipher_RC2.DoEncode(Source, Dest: Pointer; Size: Integer); |
var |
I: Integer; |
K: PWordArray; |
A, B, C, D: Word; |
begin |
Assert(Size = Context.BlockSize); |
K := FAdditionalBuffer; |
A := PWordArray(Source)[0]; |
B := PWordArray(Source)[1]; |
C := PWordArray(Source)[2]; |
D := PWordArray(Source)[3]; |
for I := 0 to 15 do |
begin |
Inc(A, (B and not D) + (C and D) + K[I * 4 + 0]); A := A shl 1 or A shr 15; |
Inc(B, (C and not A) + (D and A) + K[I * 4 + 1]); B := B shl 2 or B shr 14; |
Inc(C, (D and not B) + (A and B) + K[I * 4 + 2]); C := C shl 3 or C shr 13; |
Inc(D, (A and not C) + (B and C) + K[I * 4 + 3]); D := D shl 5 or D shr 11; |
if I in [4, 10] then |
begin |
Inc(A, K[D and $3F]); |
Inc(B, K[A and $3F]); |
Inc(C, K[B and $3F]); |
Inc(D, K[C and $3F]); |
end; |
end; |
PWordArray(Dest)[0] := A; |
PWordArray(Dest)[1] := B; |
PWordArray(Dest)[2] := C; |
PWordArray(Dest)[3] := D; |
end; |
procedure TCipher_RC2.DoDecode(Source, Dest: Pointer; Size: Integer); |
var |
I: Integer; |
K: PWordArray; |
A, B, C, D: Word; |
begin |
Assert(Size = Context.BlockSize); |
K := FAdditionalBuffer; |
A := PWordArray(Source)[0]; |
B := PWordArray(Source)[1]; |
C := PWordArray(Source)[2]; |
D := PWordArray(Source)[3]; |
for I := 15 downto 0 do |
begin |
D := D shr 5 or D shl 11 - (A and not C) - (B and C) - K[I * 4 + 3]; |
C := C shr 3 or C shl 13 - (D and not B) - (A and B) - K[I * 4 + 2]; |
B := B shr 2 or B shl 14 - (C and not A) - (D and A) - K[I * 4 + 1]; |
A := A shr 1 or A shl 15 - (B and not D) - (C and D) - K[I * 4 + 0]; |
if I in [5, 11] then |
begin |
Dec(D, K[C and $3F]); |
Dec(C, K[B and $3F]); |
Dec(B, K[A and $3F]); |
Dec(A, K[D and $3F]); |
end; |
end; |
PWordArray(Dest)[0] := A; |
PWordArray(Dest)[1] := B; |
PWordArray(Dest)[2] := C; |
PWordArray(Dest)[3] := D; |
end; |
{ TCipher_RC5 } |
class function TCipher_RC5.Context: TCipherContext; |
begin |
Result.KeySize := 256; |
Result.BlockSize := 8; |
Result.BufferSize := 8; |
Result.AdditionalBufferSize := 136; |
Result.NeedsAdditionalBufferBackup := false; |
Result.MinRounds := 0; |
Result.MaxRounds := 256; |
Result.CipherType := [ctSymmetric, ctBlock]; |
end; |
procedure TCipher_RC5.SetRounds(Value: Integer); |
begin |
if Value <> FRounds then |
begin |
if not (FState in [csNew, csInitialized, csDone]) then |
Done; |
if Value < 0 then |
Value := 12; |
if (Value > Context.MaxRounds) then |
Value := Context.MaxRounds; |
FRounds := Value; |
end; |
end; |
procedure TCipher_RC5.DoInit(const Key; Size: Integer); |
var |
K: array[0..63] of UInt32; |
L, Z, I, J: Integer; |
D: PUInt32Array; |
A, B, T: UInt32; |
begin |
if FRounds <= 0 then |
FRounds := 12; |
FillChar(K, SizeOf(K), 0); |
Move(Key, K, Size); |
D := FAdditionalBuffer; |
L := (Size + 3) shr 2; |
if L <= 0 then |
L := 1; |
T := $B7E15163; |
for I := 0 to (FRounds + 1) * 2 do |
begin |
D[I] := T; |
Inc(T, $9E3779B9); |
end; |
if L > (FRounds + 1) * 2 then |
Z := L * 3 |
else |
Z := (FRounds + 1) * 6; |
I := 0; |
J := 0; |
A := 0; |
B := 0; |
for Z := Z downto 1 do |
begin |
A := D[I] + A + B; |
A := A shl 3 or A shr 29; |
D[I] := A; |
T := A + B; |
B := K[J] + T; |
B := B shl T or B shr (32 - T); |
K[J] := B; |
I := (I + 1) mod ((FRounds + 1) * 2); |
J := (J + 1) mod L; |
end; |
ProtectBuffer(K, SizeOf(K)); |
inherited; |
end; |
procedure TCipher_RC5.DoEncode(Source, Dest: Pointer; Size: Integer); |
var |
K: PUInt32Array; |
I: Integer; |
A, B: UInt32; |
begin |
Assert(Size = Context.BlockSize); |
K := FAdditionalBuffer; |
A := PUInt32Array(Source)[0] + K[0]; |
B := PUInt32Array(Source)[1] + K[1]; |
for I := 1 to FRounds do |
begin |
A := A xor B; A := A shl B or A shr (32 - B) + K[I * 2 + 0]; |
B := B xor A; B := B shl A or B shr (32 - A) + K[I * 2 + 1]; |
end; |
PUInt32Array(Dest)[0] := A; |
PUInt32Array(Dest)[1] := B; |
end; |
procedure TCipher_RC5.DoDecode(Source, Dest: Pointer; Size: Integer); |
var |
K: PUInt32Array; |
I: Integer; |
A, B: UInt32; |
begin |
Assert(Size = Context.BlockSize); |
K := @PUInt32Array(FAdditionalBuffer)[0]; |
A := PUInt32Array(Source)[0]; |
B := PUInt32Array(Source)[1]; |
for I := FRounds downto 1 do |
begin |
B := B - K[I * 2 + 1]; B := B shr A or B shl (32 - A) xor A; |
A := A - K[I * 2 + 0]; A := A shr B or A shl (32 - B) xor B; |
end; |
PUInt32Array(Dest)[0] := A - K[0]; |
PUInt32Array(Dest)[1] := B - K[1]; |
end; |
{ TCipher_SAFER } |
class function TCipher_SAFER.Context: TCipherContext; |
begin |
Result.KeySize := 16; |
Result.BlockSize := 8; |
Result.BufferSize := 8; |
Result.AdditionalBufferSize := 768; |
Result.NeedsAdditionalBufferBackup := false; |
Result.MinRounds := 4; |
Result.MaxRounds := 13; |
Result.CipherType := [ctSymmetric, ctBlock]; |
end; |
procedure TCipher_SAFER.SetRounds(Value: Integer); |
begin |
if not (FState in [csNew, csInitialized, csDone]) then |
Done; |
if (Value < 4) or (Value > 13) then |
case FVersion of // Default Rounds |
svK40, svSK40: Value := 5; |
svK64, svSK64: Value := 6; |
svK128, svSK128: Value := 10; |
else |
Value := 8; |
end; |
FRounds := Value; |
end; |
procedure TCipher_SAFER.SetVersion(Value: TSAFERVersion); |
begin |
if Value <> FVersion then |
begin |
if not (FState in [csNew, csInitialized, csDone]) then |
Done; |
FVersion := Value; |
SetRounds(0); |
end; |
end; |
procedure TCipher_SAFER.DoInit(const Key; Size: Integer); |
procedure InitTab; |
var |
I, E: Integer; |
Exp: PUInt8Array; |
Log: PUInt8Array; |
begin |
Exp := FAdditionalBuffer; |
Log := @Exp[256]; |
E := 1; |
for I := 0 to 255 do |
begin |
Exp[I] := E and $FF; |
Log[E and $FF] := I; |
E := (E * 45) mod 257; |
end; |
end; |
procedure InitKey; |
var |
D: PByte; |
Exp: PUInt8Array; |
Strong: Boolean; |
K: array[Boolean, 0..8] of Byte; |
I, J: Integer; |
begin |
Strong := FVersion in [svSK40, svSK64, svSK128]; |
Exp := FAdditionalBuffer; |
D := @Exp[512]; |
FillChar(K, SizeOf(K), 0); |
// Setup Key A |
I := Size; |
if I > 8 then |
I := 8; |
Move(Key, K[False], I); |
// Setup the Key for K-40, SK-40 |
if FVersion in [svK40, svSK40] then |
begin |
K[False, 5] := K[False, 0] xor K[False, 2] xor 129; |
K[False, 6] := K[False, 0] xor K[False, 3] xor K[False, 4] xor 66; |
K[False, 7] := K[False, 1] xor K[False, 2] xor K[False, 4] xor 36; |
K[False, 8] := K[False, 1] xor K[False, 3] xor 24; |
Move(K[False], K[True], SizeOf(K[False])); |
end |
else |
begin |
if Size > 8 then |
begin |
I := Size - 8; |
if I > 8 then |
I := 8; |
Move(TByteArray(Key)[8], K[True], I); |
end |
else |
Move(K[False], K[True], 9); |
for I := 0 to 7 do |
begin |
K[False, 8] := K[False, 8] xor K[False, I]; |
K[True, 8] := K[True, 8] xor K[True, I]; |
end; |
end; |
// Setup the KeyData |
Move(K[True], D^, 8); |
Inc(D, 8); |
for I := 0 to 8 do |
K[False, I] := K[False, I] shr 3 or K[False, I] shl 5; |
for I := 1 to FRounds do |
begin |
for J := 0 to 8 do |
begin |
K[False, J] := K[False, J] shl 6 or K[False, J] shr 2; |
K[True, J] := K[True, J] shl 6 or K[True, J] shr 2; |
end; |
for J := 0 to 7 do |
begin |
if Strong then |
D^ := K[False, (J + I * 2 - 1) mod 9] + Exp[Exp[18 * I + J + 1]] |
else |
D^ := K[False, J] + Exp[Exp[18 * I + J + 1]]; |
Inc(D); |
end; |
for J := 0 to 7 do |
begin |
if Strong then |
D^ := K[True, (J + I * 2) mod 9] + Exp[Exp[18 * I + J + 10]] |
else |
D^ := K[True, J] + Exp[Exp[18 * I + J + 10]]; |
Inc(D); |
end; |
end; |
ProtectBuffer(K, SizeOf(K)); |
end; |
begin |
if (FRounds < 4) or (FRounds > 13) then |
case FVersion of |
svK40, svSK40: FRounds := 5; |
svK64, svSK64: FRounds := 6; |
svK128, svSK128: FRounds := 10; |
else |
FRounds := 8; |
end; |
InitTab; |
InitKey; |
inherited; |
end; |
procedure TCipher_SAFER.DoEncode(Source, Dest: Pointer; Size: Integer); |
var |
Exp, Log, Key: PUInt8Array; |
I: Integer; |
A, B, C, D, E, F, G, H, T: Byte; |
begin |
Assert(Size = Context.BlockSize); |
Exp := FAdditionalBuffer; |
Log := @Exp[256]; |
Key := @Exp[512]; |
A := PUInt8Array(Source)[0]; |
B := PUInt8Array(Source)[1]; |
C := PUInt8Array(Source)[2]; |
D := PUInt8Array(Source)[3]; |
E := PUInt8Array(Source)[4]; |
F := PUInt8Array(Source)[5]; |
G := PUInt8Array(Source)[6]; |
H := PUInt8Array(Source)[7]; |
for I := 0 to FRounds - 1 do |
begin |
A := A xor Key[0]; |
B := B + Key[1]; |
C := C + Key[2]; |
D := D xor Key[3]; |
E := E xor Key[4]; |
F := F + Key[5]; |
G := G + Key[6]; |
H := H xor Key[7]; |
A := Exp[A] + Key[8]; |
B := Log[B] xor Key[9]; |
C := Log[C] xor Key[10]; |
D := Exp[D] + Key[11]; |
E := Exp[E] + Key[12]; |
F := Log[F] xor Key[13]; |
G := Log[G] xor Key[14]; |
H := Exp[H] + Key[15]; |
Inc(B, A); Inc(A, B); |
Inc(D, C); Inc(C, D); |
Inc(F, E); Inc(E, F); |
Inc(H, G); Inc(G, H); |
Inc(C, A); Inc(A, C); |
Inc(G, E); Inc(E, G); |
Inc(D, B); Inc(B, D); |
Inc(H, F); Inc(F, H); |
Inc(E, A); Inc(A, E); |
Inc(F, B); Inc(B, F); |
Inc(G, C); Inc(C, G); |
Inc(H, D); Inc(D, H); |
T := B; B := E; E := C; C := T; |
T := D; D := F; F := G; G := T; |
Key := @Key[16]; |
end; |
PUInt8Array(Dest)[0] := A xor Key[0]; |
PUInt8Array(Dest)[1] := B + Key[1]; |
PUInt8Array(Dest)[2] := C + Key[2]; |
PUInt8Array(Dest)[3] := D xor Key[3]; |
PUInt8Array(Dest)[4] := E xor Key[4]; |
PUInt8Array(Dest)[5] := F + Key[5]; |
PUInt8Array(Dest)[6] := G + Key[6]; |
PUInt8Array(Dest)[7] := H xor Key[7]; |
end; |
procedure TCipher_SAFER.DoDecode(Source, Dest: Pointer; Size: Integer); |
var |
Exp, Log, Key: PUInt8Array; |
I: Integer; |
A, B, C, D, E, F, G, H, T: Byte; |
begin |
Assert(Size = Context.BlockSize); |
Exp := FAdditionalBuffer; |
Log := @Exp[256]; |
Key := @Exp[504 + 8 * (FRounds * 2 + 1)]; |
A := PUInt8Array(Source)[0] xor Key[0]; |
B := PUInt8Array(Source)[1] - Key[1]; |
C := PUInt8Array(Source)[2] - Key[2]; |
D := PUInt8Array(Source)[3] xor Key[3]; |
E := PUInt8Array(Source)[4] xor Key[4]; |
F := PUInt8Array(Source)[5] - Key[5]; |
G := PUInt8Array(Source)[6] - Key[6]; |
H := PUInt8Array(Source)[7] xor Key[7]; |
for I := 0 to FRounds - 1 do |
begin |
Dec(PByte(Key), 16); |
T := E; E := B; B := C; C := T; |
T := F; F := D; D := G; G := T; |
Dec(A, E); Dec(E, A); |
Dec(B, F); Dec(F, B); |
Dec(C, G); Dec(G, C); |
Dec(D, H); Dec(H, D); |
Dec(A, C); Dec(C, A); |
Dec(E, G); Dec(G, E); |
Dec(B, D); Dec(D, B); |
Dec(F, H); Dec(H, F); |
Dec(A, B); Dec(B, A); |
Dec(C, D); Dec(D, C); |
Dec(E, F); Dec(F, E); |
Dec(G, H); Dec(H, G); |
H := H - Key[15]; |
G := G xor Key[14]; |
F := F xor Key[13]; |
E := E - Key[12]; |
D := D - Key[11]; |
C := C xor Key[10]; |
B := B xor Key[9]; |
A := A - Key[8]; |
H := Log[H] xor Key[7]; |
G := Exp[G] - Key[6]; |
F := Exp[F] - Key[5]; |
E := Log[E] xor Key[4]; |
D := Log[D] xor Key[3]; |
C := Exp[C] - Key[2]; |
B := Exp[B] - Key[1]; |
A := Log[A] xor Key[0]; |
end; |
PUInt8Array(Dest)[0] := A; |
PUInt8Array(Dest)[1] := B; |
PUInt8Array(Dest)[2] := C; |
PUInt8Array(Dest)[3] := D; |
PUInt8Array(Dest)[4] := E; |
PUInt8Array(Dest)[5] := F; |
PUInt8Array(Dest)[6] := G; |
PUInt8Array(Dest)[7] := H; |
end; |
{ TCipher_SharkBase } |
const |
SHARK_ROOT = $01F5; // GF(256) polynomial x^8 + x^7 + x^6 + x^5 + x^4 + x^2 + 1 |
SHARK_ROUNDS = 6; |
SHARK_ROUNDKEYS = SHARK_ROUNDS + 1; |
{$IFNDEF CPU64BITS} |
function TCipher_SharkBase.Shark(D: TLong64; K: PLong64): TLong64; |
var |
R, T: Integer; |
begin |
for R := 0 to 4 do |
begin |
D.L := D.L xor K.L; |
D.R := D.R xor K.R; |
Inc(K); |
T := Shark_CE[0, D.R shr 23 and $1FE] xor |
Shark_CE[1, D.R shr 15 and $1FE] xor |
Shark_CE[2, D.R shr 7 and $1FE] xor |
Shark_CE[3, D.R shl 1 and $1FE] xor |
Shark_CE[4, D.L shr 23 and $1FE] xor |
Shark_CE[5, D.L shr 15 and $1FE] xor |
Shark_CE[6, D.L shr 7 and $1FE] xor |
Shark_CE[7, D.L shl 1 and $1FE]; |
D.R := Shark_CE[0, D.R shr 23 and $1FE or 1] xor |
Shark_CE[1, D.R shr 15 and $1FE or 1] xor |
Shark_CE[2, D.R shr 7 and $1FE or 1] xor |
Shark_CE[3, D.R shl 1 and $1FE or 1] xor |
Shark_CE[4, D.L shr 23 and $1FE or 1] xor |
Shark_CE[5, D.L shr 15 and $1FE or 1] xor |
Shark_CE[6, D.L shr 7 and $1FE or 1] xor |
Shark_CE[7, D.L shl 1 and $1FE or 1]; |
D.L := T; |
end; |
D.L := D.L xor K.L; |
D.R := D.R xor K.R; |
Inc(K); |
D.L := UInt32(Shark_SE[D.L shr 24 and $FF]) shl 24 xor |
UInt32(Shark_SE[D.L shr 16 and $FF]) shl 16 xor |
UInt32(Shark_SE[D.L shr 8 and $FF]) shl 8 xor |
UInt32(Shark_SE[D.L and $FF]); |
D.R := UInt32(Shark_SE[D.R shr 24 and $FF]) shl 24 xor |
UInt32(Shark_SE[D.R shr 16 and $FF]) shl 16 xor |
UInt32(Shark_SE[D.R shr 8 and $FF]) shl 8 xor |
UInt32(Shark_SE[D.R and $FF]); |
Result.L := D.L xor K.L; |
Result.R := D.R xor K.R; |
end; |
{$ENDIF} |
{$IFNDEF CPU64BITS} |
function TCipher_SharkBase.Transform(A: TLong64; Log, ALog: TLogArray): TLong64; |
function Mul(A, B: Integer): Byte; |
begin |
// GF(256) multiplication via logarithm tables |
Result := ALog[(Log[A] + Log[B]) mod 255]; |
end; |
var |
I, J: Byte; |
K, T: array[0..7] of Byte; |
begin |
Move(A.R, K[0], 4); |
Move(A.L, K[4], 4); |
SwapUInt32Buffer(K, K, 2); |
for I := 0 to 7 do |
begin |
T[I] := Mul(Shark_I[I, 0], K[0]); |
for J := 1 to 7 do |
T[I] := T[I] xor Mul(Shark_I[I, J], K[J]); |
end; |
Result.L := T[0]; |
Result.R := 0; |
for I := 1 to 7 do |
begin |
Result.R := Result.R shl 8 or Result.L shr 24; |
Result.L := Result.L shl 8 xor T[I]; |
end; |
end; |
{$ELSE CPU64BITS} |
function TCipher_SharkBase.Transform(A: UInt64; Log, ALog: TLogArray): UInt64; |
function Mul(A, B: Integer): Byte; |
begin |
// GF(256) multiplication via logarithm tables |
Result := ALog[(Log[A] + Log[B]) mod 255]; |
end; |
var |
I, J: Byte; |
K, T: array[0..7] of Byte; |
begin |
for I := 0 to 7 do |
K[I] := A shr (56 - 8 * i); |
for I := 0 to 7 do |
begin |
T[I] := Mul(Shark_I[I, 0], K[0]); |
for J := 1 to 7 do |
T[I] := T[I] xor Mul(Shark_I[I, J], K[J]); |
end; |
Result := T[0]; |
for I := 1 to 7 do |
Result := (Result shl 8) xor T[I]; |
end; |
{$ENDIF} |
class function TCipher_SharkBase.Context: TCipherContext; |
begin |
Result.KeySize := 16; |
Result.BlockSize := 8; |
Result.BufferSize := 8; |
Result.AdditionalBufferSize := 112; |
Result.NeedsAdditionalBufferBackup := False; |
Result.MinRounds := 1; |
Result.MaxRounds := 1; |
Result.CipherType := [ctSymmetric, ctBlock]; |
end; |
procedure TCipher_SharkBase.DoEncode(Source, Dest: Pointer; Size: Integer); |
{$IFNDEF CPU64BITS} |
var |
I: Integer; |
T, L, R: UInt32; |
K: PUInt32Array; |
begin |
Assert(Size = Context.BlockSize); |
K := FAdditionalBuffer; |
L := PLong64(Source).L; |
R := PLong64(Source).R; |
for I := 0 to 4 do |
begin |
L := L xor K[I * 2 + 0]; |
R := R xor K[I * 2 + 1]; |
T := Shark_CE[0, R shr 23 and $1FE] xor |
Shark_CE[1, R shr 15 and $1FE] xor |
Shark_CE[2, R shr 7 and $1FE] xor |
Shark_CE[3, R shl 1 and $1FE] xor |
Shark_CE[4, L shr 23 and $1FE] xor |
Shark_CE[5, L shr 15 and $1FE] xor |
Shark_CE[6, L shr 7 and $1FE] xor |
Shark_CE[7, L shl 1 and $1FE]; |
R := Shark_CE[0, R shr 23 and $1FE or 1] xor |
Shark_CE[1, R shr 15 and $1FE or 1] xor |
Shark_CE[2, R shr 7 and $1FE or 1] xor |
Shark_CE[3, R shl 1 and $1FE or 1] xor |
Shark_CE[4, L shr 23 and $1FE or 1] xor |
Shark_CE[5, L shr 15 and $1FE or 1] xor |
Shark_CE[6, L shr 7 and $1FE or 1] xor |
Shark_CE[7, L shl 1 and $1FE or 1]; |
L := T; |
end; |
L := L xor K[10]; |
R := R xor K[11]; |
L := UInt32(Shark_SE[L shr 24 ]) shl 24 xor |
UInt32(Shark_SE[L shr 16 and $FF]) shl 16 xor |
UInt32(Shark_SE[L shr 8 and $FF]) shl 8 xor |
UInt32(Shark_SE[L and $FF]); |
R := UInt32(Shark_SE[R shr 24 ]) shl 24 xor |
UInt32(Shark_SE[R shr 16 and $FF]) shl 16 xor |
UInt32(Shark_SE[R shr 8 and $FF]) shl 8 xor |
UInt32(Shark_SE[R and $FF]); |
PLong64(Dest).L := L xor K[12]; |
PLong64(Dest).R := R xor K[13]; |
{$ELSE CPU64BITS} |
begin |
// 64 bit |
Assert(Size = Context.BufferSize); |
PUInt64(Dest)^ := SharkEncode(PUInt64(Source)^, FAdditionalBuffer); |
{$ENDIF} |
end; |
{$IFDEF CPU64BITS} |
function TCipher_SharkBase.SharkEncode(D: UInt64; K: PUInt64): UInt64; |
var |
R: Integer; |
begin |
for R := 1 to SHARK_ROUNDS - 1 do |
begin |
D := D xor K^; |
Inc(K); |
D := Shark_CE[0, D shr 56 and $FF] xor |
Shark_CE[1, D shr 48 and $FF] xor |
Shark_CE[2, D shr 40 and $FF] xor |
Shark_CE[3, D shr 32 and $FF] xor |
Shark_CE[4, D shr 24 and $FF] xor |
Shark_CE[5, D shr 16 and $FF] xor |
Shark_CE[6, D shr 8 and $FF] xor |
Shark_CE[7, D and $FF]; |
end; |
D := D xor K^; |
Inc(K); |
D := UInt64(Shark_SE[D shr 56 and $FF]) shl 56 xor |
UInt64(Shark_SE[D shr 48 and $FF]) shl 48 xor |
UInt64(Shark_SE[D shr 40 and $FF]) shl 40 xor |
UInt64(Shark_SE[D shr 32 and $FF]) shl 32 xor |
UInt64(Shark_SE[D shr 24 and $FF]) shl 24 xor |
UInt64(Shark_SE[D shr 16 and $FF]) shl 16 xor |
UInt64(Shark_SE[D shr 8 and $FF]) shl 8 xor |
UInt64(Shark_SE[D and $FF]); |
Result := D xor K^; |
end; |
{$ENDIF} |
{ TCipher_Shark } |
{$IFNDEF CPU64BITS} |
procedure TCipher_Shark.DoInit(const Key; Size: Integer); |
var |
Log, ALog: TLogArray; |
procedure InitLog; |
var |
I, J: Word; |
begin |
ALog[0] := 1; |
for I := 1 to 255 do |
begin |
J := ALog[I - 1] shl 1; |
if J and $100 <> 0 then |
J := J xor SHARK_ROOT; |
ALog[I] := J; |
end; |
Log[0] := 0; |
for I := 0 to 254 do |
Log[ALog[I]] := I; |
end; |
var |
T: array[0..6] of TLong64; |
A: array[0..6] of TLong64; |
K: array[0..15] of Byte; |
I, J, R: Byte; |
E, D: PLong64Array; |
L: TLong64; |
begin |
FillChar(K, SizeOf(K), 0); |
Move(Key, K, Size); |
InitLog; |
E := FAdditionalBuffer; |
D := @E[7]; |
Move(Shark_CE[0], T, SizeOf(T)); |
T[6] := Transform(T[6], Log, ALog); |
I := 0; |
for R := 0 to 6 do |
begin |
A[R].L := K[I and $F]; |
A[R].R := 0; |
Inc(I); |
for J := 1 to 7 do |
begin |
A[R].R := A[R].R shl 8 or A[R].L shr 24; |
A[R].L := A[R].L shl 8 or K[I and $F]; |
Inc(I); |
end; |
end; |
L.L := 0; |
L.R := 0; |
L := Shark(L, @T); |
E[0].L := A[0].L xor L.L; |
E[0].R := A[0].R xor L.R; |
for R := 1 to 6 do |
begin |
L := Shark(E[R - 1], @T); |
E[R].L := A[R].L xor L.L; |
E[R].R := A[R].R xor L.R; |
end; |
E[6] := Transform(E[6], Log, ALog); |
D[0] := E[6]; |
D[6] := E[0]; |
for R := 1 to 5 do |
D[R] := Transform(E[6-R], Log, ALog); |
ProtectBuffer(T, SizeOf(T)); |
ProtectBuffer(A, SizeOf(A)); |
ProtectBuffer(K, SizeOf(K)); |
inherited; |
end; |
{$ENDIF} |
{$IFNDEF CPU64BITS} |
procedure TCipher_SharkBase.DoDecode(Source, Dest: Pointer; Size: Integer); |
var |
I: Integer; |
T, R, L: UInt32; |
K: PUInt32Array; |
begin |
Assert(Size = Context.BlockSize); |
K := @PUInt32Array(FAdditionalBuffer)[14]; |
L := PLong64(Source).L; |
R := PLong64(Source).R; |
for I := 0 to 4 do |
begin |
L := L xor K[I * 2 + 0]; |
R := R xor K[I * 2 + 1]; |
T := Shark_CD[0, R shr 23 and $1FE] xor |
Shark_CD[1, R shr 15 and $1FE] xor |
Shark_CD[2, R shr 7 and $1FE] xor |
Shark_CD[3, R shl 1 and $1FE] xor |
Shark_CD[4, L shr 23 and $1FE] xor |
Shark_CD[5, L shr 15 and $1FE] xor |
Shark_CD[6, L shr 7 and $1FE] xor |
Shark_CD[7, L shl 1 and $1FE]; |
R := Shark_CD[0, R shr 23 and $1FE or 1] xor |
Shark_CD[1, R shr 15 and $1FE or 1] xor |
Shark_CD[2, R shr 7 and $1FE or 1] xor |
Shark_CD[3, R shl 1 and $1FE or 1] xor |
Shark_CD[4, L shr 23 and $1FE or 1] xor |
Shark_CD[5, L shr 15 and $1FE or 1] xor |
Shark_CD[6, L shr 7 and $1FE or 1] xor |
Shark_CD[7, L shl 1 and $1FE or 1]; |
L := T; |
end; |
L := L xor K[10]; |
R := R xor K[11]; |
L := UInt32(Shark_SD[L shr 24 ]) shl 24 xor |
UInt32(Shark_SD[L shr 16 and $FF]) shl 16 xor |
UInt32(Shark_SD[L shr 8 and $FF]) shl 8 xor |
UInt32(Shark_SD[L and $FF]); |
R := UInt32(Shark_SD[R shr 24 ]) shl 24 xor |
UInt32(Shark_SD[R shr 16 and $FF]) shl 16 xor |
UInt32(Shark_SD[R shr 8 and $FF]) shl 8 xor |
UInt32(Shark_SD[R and $FF]); |
PLong64(Dest).L := L xor K[12]; |
PLong64(Dest).R := R xor K[13]; |
end; |
{$ELSE CPU64BITS} |
procedure TCipher_Shark.DoInit(const Key; Size: Integer); |
var |
Log, ALog: TLogArray; |
procedure InitLog; |
var |
I, J: Word; |
begin |
// Generate GF(256) anti-logarithm and logarithm tables |
ALog[0] := 1; |
for I := 1 to 255 do |
begin |
J := ALog[I - 1] shl 1; |
if J and $100 <> 0 then |
J := J xor SHARK_ROOT; |
ALog[I] := J; |
end; |
Log[0] := 0; |
for I := 0 to 254 do |
Log[ALog[I]] := I; |
end; |
var |
T: array[0..SHARK_ROUNDS] of UInt64; |
A: array[0..SHARK_ROUNDKEYS-1] of UInt64; |
K: array[0..15] of Byte; |
I, J, R: Integer; |
E, D: PUInt64Array; |
begin |
FillChar(K, SizeOf(K), 0); |
Move(Key, K, Size); |
InitLog; |
E := FAdditionalBuffer; // encryption round key |
D := @E[SHARK_ROUNDS + 1]; // decryption round key |
Move(Shark_CE[0], T, SizeOf(T)); |
T[SHARK_ROUNDS] := Transform(T[SHARK_ROUNDS], Log, ALog); |
I := 0; |
for R := 0 to High(A) do |
begin |
A[R] := K[I and $F]; |
Inc(I); |
for J := 1 to 7 do |
begin |
A[R] := A[R] shl 8 or K[I and $F]; |
Inc(I); |
end; |
end; |
E[0] := A[0] xor SharkEncode(0, @T); |
for R := 1 to High(A) do |
E[R] := A[R] xor SharkEncode(E[R - 1], @T); |
E[SHARK_ROUNDS] := Transform(E[SHARK_ROUNDS], Log, ALog); |
D[0] := E[SHARK_ROUNDS]; |
D[SHARK_ROUNDS] := E[0]; |
for R := 1 to SHARK_ROUNDS - 1 do |
D[R] := Transform(E[SHARK_ROUNDS - R], Log, ALog); |
ProtectBuffer(T, SizeOf(T)); |
ProtectBuffer(A, SizeOf(A)); |
ProtectBuffer(K, SizeOf(K)); |
inherited; |
end; |
procedure TCipher_SharkBase.DoDecode(Source, Dest: Pointer; Size: Integer); |
var |
R: Integer; |
D: UInt64; |
K: PUInt64; |
begin |
Assert(Size = Context.BufferSize); |
D := PUInt64(Source)^; |
K := @PUInt64Array(FAdditionalBuffer)[SHARK_ROUNDS + 1]; // decryption round key |
for R := 1 to SHARK_ROUNDS - 1 do |
begin |
D := D xor K^; |
Inc(K); |
D := Shark_CD[0, D shr 56 and $FF] xor |
Shark_CD[1, D shr 48 and $FF] xor |
Shark_CD[2, D shr 40 and $FF] xor |
Shark_CD[3, D shr 32 and $FF] xor |
Shark_CD[4, D shr 24 and $FF] xor |
Shark_CD[5, D shr 16 and $FF] xor |
Shark_CD[6, D shr 8 and $FF] xor |
Shark_CD[7, D and $FF]; |
end; |
D := D xor K^; |
Inc(K); |
D := UInt64(Shark_SD[D shr 56 and $FF]) shl 56 xor |
UInt64(Shark_SD[D shr 48 and $FF]) shl 48 xor |
UInt64(Shark_SD[D shr 40 and $FF]) shl 40 xor |
UInt64(Shark_SD[D shr 32 and $FF]) shl 32 xor |
UInt64(Shark_SD[D shr 24 and $FF]) shl 24 xor |
UInt64(Shark_SD[D shr 16 and $FF]) shl 16 xor |
UInt64(Shark_SD[D shr 8 and $FF]) shl 8 xor |
UInt64(Shark_SD[D and $FF]); |
PUInt64(Dest)^ := D xor K^; |
end; |
{$ENDIF CPU64BITS} |
{ TCipher_Shark_DEC52 } |
procedure TCipher_Shark_DEC52.DoInit(const Key; Size: Integer); |
var |
Log, ALog: TLogArray; |
procedure InitLog; |
var |
I, J: Word; |
begin |
// Generate GF(256) anti-logarithm and logarithm tables |
ALog[0] := 1; |
for I := 1 to 255 do |
begin |
J := ALog[I - 1] shl 1; |
if J and $100 <> 0 then |
J := J xor SHARK_ROOT; |
ALog[I] := J; |
end; |
for I := 1 to 254 do |
Log[ALog[I]] := I; |
end; |
{$IFNDEF CPU64BITS} |
var |
T: array[0..SHARK_ROUNDS] of TLong64; |
A: array[0..SHARK_ROUNDS] of TLong64; |
K: array[0..15] of Byte; |
I, J, R: Byte; |
E, D: PLong64Array; |
L: TLong64; |
begin |
FillChar(K, SizeOf(K), 0); |
Move(Key, K, Size); |
InitLog; |
E := FAdditionalBuffer; |
D := @E[7]; |
Move(Shark_CE[0], T, SizeOf(T)); |
T[6] := Transform(T[6], Log, ALog); |
I := 0; |
for R := 0 to 6 do |
begin |
Inc(I); |
A[R].L := K[I and $F]; |
A[R].R := 0; |
for J := 1 to 7 do |
begin |
Inc(I); |
A[R].R := A[R].R shl 8 or A[R].L shr 24; |
A[R].L := A[R].L shl 8 or K[I and $F]; |
end; |
end; |
L.L := 0; |
L.R := 0; |
L := Shark(L, @T); |
E[0].L := A[0].L xor L.L; |
E[0].R := A[0].R xor L.R; |
for R := 1 to 6 do |
begin |
L := Shark(E[R - 1], @T); |
E[R].L := A[R].L xor L.L; |
E[R].R := A[R].R xor L.R; |
end; |
E[6] := Transform(E[6], Log, ALog); |
D[0] := E[6]; |
D[6] := E[0]; |
for R := 1 to 5 do |
D[R] := Transform(E[6-R], Log, ALog); |
ProtectBuffer(T, SizeOf(T)); |
ProtectBuffer(A, SizeOf(A)); |
ProtectBuffer(K, SizeOf(K)); |
inherited; |
{$ELSE} |
var |
T: array[0..SHARK_ROUNDS] of UInt64; |
A: array[0..SHARK_ROUNDKEYS-1] of UInt64; |
K: array[0..15] of Byte; |
I, J, R: Integer; |
E, D: PUInt64Array; |
begin |
FillChar(K, SizeOf(K), 0); |
Move(Key, K, Size); |
InitLog; |
E := FAdditionalBuffer; // encryption round key |
D := @E[SHARK_ROUNDS + 1]; // decryption round key |
Move(Shark_CE[0], T, SizeOf(T)); |
T[SHARK_ROUNDS] := Transform(T[SHARK_ROUNDS], Log, ALog); |
I := 0; |
for R := 0 to High(A) do |
begin |
Inc(I); |
A[R] := K[I and $F]; |
for J := 1 to 7 do |
begin |
Inc(I); |
A[R] := A[R] shl 8 or K[I and $F]; |
end; |
end; |
E[0] := A[0] xor SharkEncode(0, @T); |
for R := 1 to High(A) do |
E[R] := A[R] xor SharkEncode(E[R - 1], @T); |
E[SHARK_ROUNDS] := Transform(E[SHARK_ROUNDS], Log, ALog); |
D[0] := E[SHARK_ROUNDS]; |
D[SHARK_ROUNDS] := E[0]; |
for R := 1 to SHARK_ROUNDS - 1 do |
D[R] := Transform(E[SHARK_ROUNDS - R], Log, ALog); |
ProtectBuffer(T, SizeOf(T)); |
ProtectBuffer(A, SizeOf(A)); |
ProtectBuffer(K, SizeOf(K)); |
inherited; |
{$ENDIF} |
end; |
{ TCipher_Skipjack } |
class function TCipher_Skipjack.Context: TCipherContext; |
begin |
Result.KeySize := 10; |
Result.BlockSize := 8; |
Result.BufferSize := 8; |
Result.AdditionalBufferSize := $A00; |
Result.NeedsAdditionalBufferBackup := false; |
Result.MinRounds := 1; |
Result.MaxRounds := 1; |
Result.CipherType := [ctSymmetric, ctBlock]; |
end; |
procedure TCipher_Skipjack.DoInit(const Key; Size: Integer); |
var |
K: array[0..9] of Byte; |
D: PByte; |
I, J: Integer; |
begin |
FillChar(K, SizeOf(K), 0); |
Move(Key, K, Size); |
D := FAdditionalBuffer; |
for I := 0 to 9 do |
for J := 0 to 255 do |
begin |
D^ := Skipjack_Data[J xor K[I]]; |
Inc(D); |
end; |
ProtectBuffer(K, SizeOf(K)); |
inherited; |
end; |
procedure TCipher_Skipjack.DoEncode(Source, Dest: Pointer; Size: Integer); |
var |
Tab, Min: PSkipjackTab; |
Max: PByte; |
K, T, A, B, C, D: UInt32; |
begin |
Assert(Size = Context.BlockSize); |
Min := FAdditionalBuffer; |
Max := PByte(Min) + 9 * 256; // for Pointer Math |
Tab := Min; |
A := Swap(PWordArray(Source)[0]); |
B := Swap(PWordArray(Source)[1]); |
C := Swap(PWordArray(Source)[2]); |
D := Swap(PWordArray(Source)[3]); |
K := 0; |
repeat |
Inc(K); |
T := A; |
T := T xor Tab[T and $FF] shl 8; SkipjackIncCheck(Tab, Min, Max); |
T := T xor Tab[T shr 8]; SkipjackIncCheck(Tab, Min, Max); |
T := T xor Tab[T and $FF] shl 8; SkipjackIncCheck(Tab, Min, Max); |
T := T xor Tab[T shr 8]; SkipjackIncCheck(Tab, Min, Max); |
A := T xor D xor K; |
D := C; |
C := B; |
B := T; |
until K = 8; |
repeat |
Inc(K); |
T := A; |
A := D; |
D := C; |
C := T xor B xor K; |
T := T xor Tab[T and $FF] shl 8; SkipjackIncCheck(Tab, Min, Max); |
T := T xor Tab[T shr 8]; SkipjackIncCheck(Tab, Min, Max); |
T := T xor Tab[T and $FF] shl 8; SkipjackIncCheck(Tab, Min, Max); |
T := T xor Tab[T shr 8]; SkipjackIncCheck(Tab, Min, Max); |
B := T; |
until K = 16; |
repeat |
Inc(K); |
T := A; |
T := T xor Tab[T and $FF] shl 8; SkipjackIncCheck(Tab, Min, Max); |
T := T xor Tab[T shr 8]; SkipjackIncCheck(Tab, Min, Max); |
T := T xor Tab[T and $FF] shl 8; SkipjackIncCheck(Tab, Min, Max); |
T := T xor Tab[T shr 8]; SkipjackIncCheck(Tab, Min, Max); |
A := T xor D xor K; |
D := C; |
C := B; |
B := T; |
until K = 24; |
repeat |
Inc(K); |
T := A; |
A := D; |
D := C; |
C := T xor B xor K; |
T := T xor Tab[T and $FF] shl 8; SkipjackIncCheck(Tab, Min, Max); |
T := T xor Tab[T shr 8]; SkipjackIncCheck(Tab, Min, Max); |
T := T xor Tab[T and $FF] shl 8; SkipjackIncCheck(Tab, Min, Max); |
T := T xor Tab[T shr 8]; SkipjackIncCheck(Tab, Min, Max); |
B := T; |
until K = 32; |
PWordArray(Dest)[0] := Swap(A); |
PWordArray(Dest)[1] := Swap(B); |
PWordArray(Dest)[2] := Swap(C); |
PWordArray(Dest)[3] := Swap(D); |
end; |
procedure TCipher_Skipjack.SkipjackIncCheck(var ATab: PSkipjackTab; AMin: PSkipjackTab; AMax: PByte); |
begin |
Inc(ATab); |
if PByte(ATab) > AMax then |
ATab := AMin; |
end; |
procedure TCipher_Skipjack.DoDecode(Source, Dest: Pointer; Size: Integer); |
var |
Tab, Max: PSkipjackTab; |
Min: PByte; // for Pointer Math |
K, T, A, B, C, D: UInt32; |
begin |
Assert(Size = Context.BlockSize); |
Min := FAdditionalBuffer; |
Max := Pointer(Min + 9 * 256); |
Tab := Pointer(Min + 7 * 256); |
A := Swap(PWordArray(Source)[0]); // holds an Integer, Compiler makes faster Code |
B := Swap(PWordArray(Source)[1]); |
C := Swap(PWordArray(Source)[2]); |
D := Swap(PWordArray(Source)[3]); |
K := 32; |
repeat |
T := B; |
T := T xor Tab[T shr 8]; SkipjackDecCheck(Tab, Min, Max); |
T := T xor Tab[T and $FF] shl 8; SkipjackDecCheck(Tab, Min, Max); |
T := T xor Tab[T shr 8]; SkipjackDecCheck(Tab, Min, Max); |
T := T xor Tab[T and $FF] shl 8; SkipjackDecCheck(Tab, Min, Max); |
B := T xor C xor K; |
C := D; |
D := A; |
A := T; |
Dec(K); |
until K = 24; |
repeat |
T := B; |
B := C; |
C := D; |
D := T xor A xor K; |
T := T xor Tab[T shr 8]; SkipjackDecCheck(Tab, Min, Max); |
T := T xor Tab[T and $FF] shl 8; SkipjackDecCheck(Tab, Min, Max); |
T := T xor Tab[T shr 8]; SkipjackDecCheck(Tab, Min, Max); |
T := T xor Tab[T and $FF] shl 8; SkipjackDecCheck(Tab, Min, Max); |
A := T; |
Dec(K); |
until K = 16; |
repeat |
T := B; |
T := T xor Tab[T shr 8]; SkipjackDecCheck(Tab, Min, Max); |
T := T xor Tab[T and $FF] shl 8; SkipjackDecCheck(Tab, Min, Max); |
T := T xor Tab[T shr 8]; SkipjackDecCheck(Tab, Min, Max); |
T := T xor Tab[T and $FF] shl 8; SkipjackDecCheck(Tab, Min, Max); |
B := C xor T xor K; |
C := D; |
D := A; |
A := T; |
Dec(K); |
until K = 8; |
repeat |
T := B; |
B := C; |
C := D; |
D := T xor A xor K; |
T := T xor Tab[T shr 8]; SkipjackDecCheck(Tab, Min, Max); |
T := T xor Tab[T and $FF] shl 8; SkipjackDecCheck(Tab, Min, Max); |
T := T xor Tab[T shr 8]; SkipjackDecCheck(Tab, Min, Max); |
T := T xor Tab[T and $FF] shl 8; SkipjackDecCheck(Tab, Min, Max); |
A := T; |
Dec(K); |
until K = 0; |
PWordArray(Dest)[0] := Swap(A); |
PWordArray(Dest)[1] := Swap(B); |
PWordArray(Dest)[2] := Swap(C); |
PWordArray(Dest)[3] := Swap(D); |
end; |
procedure TCipher_Skipjack.SkipjackDecCheck(var ATab: PSkipjackTab; AMin: PByte; AMax: PSkipjackTab); |
begin |
Dec(ATab); |
// {$IFDEF DELPHIORBCB} |
// if ATab < AMin then |
// {$ELSE !DELPHIORBCB} |
{ TODO : Prüfen ob so korrekt, da ATab auf PByte umgestellt wurde} |
if PByte(ATab) < AMin then |
// {$ENDIF !DELPHIORBCB} |
ATab := AMax; |
end; |
{ TCipher_TEA } |
const |
TEA_Delta = $9E3779B9; // magic constant, decimal 2654435769 |
class function TCipher_TEA.Context: TCipherContext; |
begin |
Result.KeySize := 16; // 128 bits |
Result.BlockSize := 8; // 64 bits |
Result.BufferSize := 8; // 64 bits |
Result.AdditionalBufferSize := 32; // 256 bits |
Result.NeedsAdditionalBufferBackup := false; |
Result.MinRounds := 16; |
Result.MaxRounds := 256; |
Result.CipherType := [ctSymmetric, ctBlock]; |
end; |
procedure TCipher_TEA.SetRounds(Value: Integer); |
begin |
if not (FState in [csNew, csInitialized, csDone]) then |
Done; |
if Value < Context.MinRounds then |
Value := Context.MinRounds |
else |
if Value > Context.MaxRounds then |
Value := Context.MaxRounds; |
FRounds := Value; |
end; |
procedure TCipher_TEA.DoInit(const Key; Size: Integer); |
begin |
Move(Key, FAdditionalBuffer^, Size); |
SetRounds(FRounds); |
inherited; |
end; |
procedure TCipher_TEA.DoEncode(Source, Dest: Pointer; Size: Integer); |
var |
I: Integer; |
Sum, |
X, Y, A, B, C, D: UInt32; |
begin |
Assert(Size = Context.BlockSize); |
Sum := 0; |
A := PUInt32Array(FAdditionalBuffer)[0]; |
B := PUInt32Array(FAdditionalBuffer)[1]; |
C := PUInt32Array(FAdditionalBuffer)[2]; |
D := PUInt32Array(FAdditionalBuffer)[3]; |
X := PUInt32Array(Source)[0]; |
Y := PUInt32Array(Source)[1]; |
for I := 0 to FRounds - 1 do |
begin |
Inc(Sum, TEA_Delta); |
Inc(X, (((Y shl 4 + A) xor Y) + Sum) xor (Y shr 5 + B)); |
Inc(Y, (((X shl 4 + C) xor X) + Sum) xor (X shr 5 + D)); |
end; |
PUInt32Array(Dest)[0] := X; |
PUInt32Array(Dest)[1] := Y; |
end; |
procedure TCipher_TEA.DoDecode(Source, Dest: Pointer; Size: Integer); |
var |
I: Integer; |
Sum, |
X, Y, A, B, C, D: UInt32; |
begin |
Assert(Size = Context.BlockSize); |
Sum := TEA_Delta * UInt32(FRounds); |
A := PUInt32Array(FAdditionalBuffer)[0]; |
B := PUInt32Array(FAdditionalBuffer)[1]; |
C := PUInt32Array(FAdditionalBuffer)[2]; |
D := PUInt32Array(FAdditionalBuffer)[3]; |
X := PUInt32Array(Source)[0]; |
Y := PUInt32Array(Source)[1]; |
for I := 0 to FRounds - 1 do |
begin |
Dec(Y, (X shl 4 + C) xor X + Sum xor (X shr 5 + D)); |
Dec(X, (Y shl 4 + A) xor Y + Sum xor (Y shr 5 + B)); |
Dec(Sum, TEA_Delta); |
end; |
PUInt32Array(Dest)[0] := X; |
PUInt32Array(Dest)[1] := Y; |
end; |
{ TCipher_XTEA } |
procedure TCipher_XTEA.DoEncode(Source, Dest: Pointer; Size: Integer); |
var |
Sum, |
I, X, Y: UInt32; |
K: PUInt32Array; |
begin |
Assert(Size = Context.BlockSize); |
Sum := 0; |
X := PUInt32Array(Source)[0]; |
Y := PUInt32Array(Source)[1]; |
K := FAdditionalBuffer; |
for I := 0 to FRounds - 1 do |
begin |
Inc(X, (((Y shl 4) xor (Y shr 5)) + Y) xor (Sum + K[Sum and 3])); |
Inc(Sum, TEA_Delta); |
Inc(Y, (((X shl 4) xor (X shr 5)) + X) xor (Sum + K[Sum shr 11 and 3])); |
end; |
PUInt32Array(Dest)[0] := X; |
PUInt32Array(Dest)[1] := Y; |
end; |
procedure TCipher_XTEA.DoDecode(Source, Dest: Pointer; Size: Integer); |
var |
I: Integer; |
Sum, |
X, Y: UInt32; |
K: PUInt32Array; |
begin |
Assert(Size = Context.BlockSize); |
Sum := TEA_Delta * UInt32(FRounds); |
X := PUInt32Array(Source)[0]; |
Y := PUInt32Array(Source)[1]; |
K := FAdditionalBuffer; |
for I := 0 to FRounds - 1 do |
begin |
Dec(Y, (((X shl 4) xor (X shr 5)) + X) xor (Sum + K[Sum shr 11 and 3])); |
Dec(Sum, TEA_Delta); |
Dec(X, (((Y shl 4) xor (Y shr 5)) + Y) xor (Sum + K[Sum and 3])); |
end; |
PUInt32Array(Dest)[0] := X; |
PUInt32Array(Dest)[1] := Y; |
end; |
{ TCipher_XTEA_DEC52 } |
procedure TCipher_XTEA_DEC52.DoEncode(Source, Dest: Pointer; Size: Integer); |
var |
Sum, |
I, X, Y: UInt32; |
K: PUInt32Array; |
begin |
Assert(Size = Context.BlockSize); |
Sum := 0; |
X := PUInt32Array(Source)[0]; |
Y := PUInt32Array(Source)[1]; |
K := FAdditionalBuffer; |
for I := 0 to FRounds - 1 do |
begin |
Inc(X, (Y shl 4 xor Y shr 5) + (Y xor Sum) + K[Sum and 3]); |
Inc(Sum, TEA_Delta); |
Inc(Y, (X shl 4 xor X shr 5) + (X xor Sum) + K[Sum shr 11 and 3]); |
end; |
PUInt32Array(Dest)[0] := X; |
PUInt32Array(Dest)[1] := Y; |
end; |
procedure TCipher_XTEA_DEC52.DoDecode(Source, Dest: Pointer; Size: Integer); |
var |
I: Integer; |
Sum, |
X, Y: UInt32; |
K: PUInt32Array; |
begin |
Assert(Size = Context.BlockSize); |
Sum := TEA_Delta * UInt32(FRounds); |
X := PUInt32Array(Source)[0]; |
Y := PUInt32Array(Source)[1]; |
K := FAdditionalBuffer; |
for I := 0 to FRounds - 1 do |
begin |
Dec(Y, (X shl 4 xor X shr 5) + (X xor Sum) + K[Sum shr 11 and 3]); |
Dec(Sum, TEA_Delta); |
Dec(X, (Y shl 4 xor Y shr 5) + (Y xor Sum) + K[Sum and 3]); |
end; |
PUInt32Array(Dest)[0] := X; |
PUInt32Array(Dest)[1] := Y; |
end; |
{$IFDEF RESTORE_RANGECHECKS}{$R+}{$ENDIF} |
{$IFDEF RESTORE_OVERFLOWCHECKS}{$Q+}{$ENDIF} |
initialization |
SetDefaultCipherClass(TCipher_Null); |
{$IFNDEF ManualRegisterCipherClasses} |
TCipher_Null.RegisterClass(TDECCipher.ClassList); |
TCipher_Blowfish.RegisterClass(TDECCipher.ClassList); |
TCipher_Twofish.RegisterClass(TDECCipher.ClassList); |
TCipher_IDEA.RegisterClass(TDECCipher.ClassList); |
TCipher_Cast256.RegisterClass(TDECCipher.ClassList); |
TCipher_Mars.RegisterClass(TDECCipher.ClassList); |
TCipher_RC4.RegisterClass(TDECCipher.ClassList); |
TCipher_RC6.RegisterClass(TDECCipher.ClassList); |
// Explicitely not registered, as Rijndael is 1:1 the same as AES and AES is the |
// more common name |
// TCipher_Rijndael.RegisterClass(TDECCipher.ClassList); |
TCipher_AES.RegisterClass(TDECCipher.ClassList); |
TCipher_AES128.RegisterClass(TDECCipher.ClassList); |
TCipher_AES192.RegisterClass(TDECCipher.ClassList); |
TCipher_AES256.RegisterClass(TDECCipher.ClassList); |
TCipher_Square.RegisterClass(TDECCipher.ClassList); |
TCipher_SCOP.RegisterClass(TDECCipher.ClassList); |
TCipher_Sapphire.RegisterClass(TDECCipher.ClassList); |
TCipher_1DES.RegisterClass(TDECCipher.ClassList); |
TCipher_2DES.RegisterClass(TDECCipher.ClassList); |
TCipher_3DES.RegisterClass(TDECCipher.ClassList); |
TCipher_2DDES.RegisterClass(TDECCipher.ClassList); |
TCipher_3DDES.RegisterClass(TDECCipher.ClassList); |
TCipher_3TDES.RegisterClass(TDECCipher.ClassList); |
TCipher_3Way.RegisterClass(TDECCipher.ClassList); |
TCipher_Cast128.RegisterClass(TDECCipher.ClassList); |
TCipher_Gost.RegisterClass(TDECCipher.ClassList); |
// Explicitely not registered, as this is an alias for Gost only |
// TCipher_Magma.RegisterClass(TDECCipher.ClassList); |
TCipher_Misty.RegisterClass(TDECCipher.ClassList); |
TCipher_NewDES.RegisterClass(TDECCipher.ClassList); |
TCipher_Q128.RegisterClass(TDECCipher.ClassList); |
TCipher_RC2.RegisterClass(TDECCipher.ClassList); |
TCipher_RC5.RegisterClass(TDECCipher.ClassList); |
TCipher_SAFER.RegisterClass(TDECCipher.ClassList); |
TCipher_Shark.RegisterClass(TDECCipher.ClassList); |
TCipher_Skipjack.RegisterClass(TDECCipher.ClassList); |
TCipher_TEA.RegisterClass(TDECCipher.ClassList); |
TCipher_XTEA.RegisterClass(TDECCipher.ClassList); |
TCipher_TEAN.RegisterClass(TDECCipher.ClassList); |
{$IFDEF OLD_REGISTER_FAULTY_CIPHERS} |
// Those classes are only there for those who might have relied on the |
// faulty implementation |
TCipher_SCOP_DEC52.RegisterClass(TDECCipher.ClassList); |
TCipher_Shark_DEC52.RegisterClass(TDECCipher.ClassList); |
TCipher_XTEA_DEC52.RegisterClass(TDECCipher.ClassList); |
{$ENDIF} |
{$ENDIF} |
finalization |
end. |
/trunk/Decoder5/VCL_DEC/DECData.pas |
---|
0,0 → 1,307 |
{***************************************************************************** |
The DEC team (see file NOTICE.txt) licenses this file |
to you under the Apache License, Version 2.0 (the |
"License"); you may not use this file except in compliance |
with the License. A copy of this licence is found in the root directory |
of this project in the file LICENCE.txt or alternatively 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. |
*****************************************************************************} |
/// <summary> |
/// Data Arrays for the Hash and Cipher functions |
/// </summary> |
unit DECData; |
interface |
uses |
DECTypes; |
{$INCLUDE DECOptions.inc} |
{$IFOPT Q+}{$DEFINE RESTORE_OVERFLOWCHECKS}{$Q-}{$ENDIF} |
{$IFOPT R+}{$DEFINE RESTORE_RANGECHECKS}{$R-}{$ENDIF} |
const |
Square_TE: array[0..3, 0..255] of UInt32 = ( |
($26B1B197,$A7CECE69,$B0C3C373,$4A9595DF,$EE5A5AB4,$02ADADAF,$DCE7E73B,$06020204, |
$D74D4D9A,$CC444488,$F8FBFB03,$469191D7,$140C0C18,$7C8787FB,$16A1A1B7,$F05050A0, |
$A8CBCB63,$A96767CE,$FC5454A8,$92DDDD4F,$CA46468C,$648F8FEB,$D6E1E137,$D24E4E9C, |
$E5F0F015,$F2FDFD0F,$F1FCFC0D,$C8EBEB23,$FEF9F907,$B9C4C47D,$2E1A1A34,$B26E6EDC, |
$E25E5EBC,$EAF5F51F,$A1CCCC6D,$628D8DEF,$241C1C38,$FA5656AC,$C5434386,$F7FEFE09, |
$0907070E,$A36161C2,$FDF8F805,$9F7575EA,$EB5959B2,$F4FFFF0B,$05030306,$66222244, |
$6B8A8AE1,$86D1D157,$35131326,$C7EEEE29,$6D8888E5,$00000000,$120E0E1C,$5C343468, |
$3F15152A,$758080F5,$499494DD,$D0E3E333,$C2EDED2F,$2AB5B59F,$F55353A6,$65232346, |
$DD4B4B96,$C947478E,$3917172E,$1CA7A7BB,$459090D5,$5F35356A,$08ABABA3,$9DD8D845, |
$3DB8B885,$94DFDF4B,$D14F4F9E,$F95757AE,$5B9A9AC1,$439292D1,$98DBDB43,$2D1B1B36, |
$443C3C78,$ADC8C865,$5E9999C7,$0C040408,$678E8EE9,$D5E0E035,$8CD7D75B,$877D7DFA, |
$7A8585FF,$38BBBB83,$C0404080,$742C2C58,$4E3A3A74,$CF45458A,$E6F1F117,$C6424284, |
$AF6565CA,$60202040,$C3414182,$28181830,$967272E4,$6F25254A,$409393D3,$907070E0, |
$5A36366C,$0F05050A,$E3F2F211,$1D0B0B16,$10A3A3B3,$8B7979F2,$C1ECEC2D,$18080810, |
$6927274E,$53313162,$56323264,$2FB6B699,$847C7CF8,$25B0B095,$1E0A0A14,$957373E6, |
$ED5B5BB6,$8D7B7BF6,$2CB7B79B,$768181F7,$83D2D251,$170D0D1A,$BE6A6AD4,$6A26264C, |
$579E9EC9,$E85858B0,$519C9CCD,$708383F3,$9C7474E8,$20B3B393,$01ACACAD,$50303060, |
$8E7A7AF4,$BB6969D2,$997777EE,$110F0F1E,$07AEAEA9,$63212142,$97DEDE49,$85D0D055, |
$722E2E5C,$4C9797DB,$30101020,$19A4A4BD,$5D9898C5,$0DA8A8A5,$89D4D45D,$B86868D0, |
$772D2D5A,$A66262C4,$7B292952,$B76D6DDA,$3A16162C,$DB494992,$9A7676EC,$BCC7C77B, |
$CDE8E825,$B6C1C177,$4F9696D9,$5937376E,$DAE5E53F,$ABCACA61,$E9F4F41D,$CEE9E927, |
$A56363C6,$36121224,$B3C2C271,$1FA6A6B9,$3C141428,$31BCBC8D,$80D3D353,$78282850, |
$04AFAFAB,$712F2F5E,$DFE6E639,$6C242448,$F65252A4,$BFC6C679,$15A0A0B5,$1B090912, |
$32BDBD8F,$618C8CED,$A4CFCF6B,$E75D5DBA,$33111122,$E15F5FBE,$03010102,$BAC5C57F, |
$549F9FCB,$473D3D7A,$13A2A2B1,$589B9BC3,$AEC9C967,$4D3B3B76,$37BEBE89,$F35151A2, |
$2B191932,$211F1F3E,$413F3F7E,$E45C5CB8,$23B2B291,$C4EFEF2B,$DE4A4A94,$A2CDCD6F, |
$34BFBF8B,$3BBABA81,$B16F6FDE,$AC6464C8,$9ED9D947,$E0F3F313,$423E3E7C,$29B4B49D, |
$0BAAAAA1,$91DCDC4D,$8AD5D55F,$0A06060C,$B5C0C075,$827E7EFC,$EFF6F619,$AA6666CC, |
$B46C6CD8,$798484FD,$937171E2,$48383870,$3EB9B987,$271D1D3A,$817F7FFE,$529D9DCF, |
$D8484890,$688B8BE3,$7E2A2A54,$9BDADA41,$1AA5A5BF,$55333366,$738282F1,$4B393972, |
$8FD6D659,$887878F0,$7F8686F9,$FBFAFA01,$D9E4E43D,$7D2B2B56,$0EA9A9A7,$221E1E3C, |
$6E8989E7,$A06060C0,$BD6B6BD6,$CBEAEA21,$FF5555AA,$D44C4C98,$ECF7F71B,$D3E2E231), |
($B1B19726,$CECE69A7,$C3C373B0,$9595DF4A,$5A5AB4EE,$ADADAF02,$E7E73BDC,$02020406, |
$4D4D9AD7,$444488CC,$FBFB03F8,$9191D746,$0C0C1814,$8787FB7C,$A1A1B716,$5050A0F0, |
$CBCB63A8,$6767CEA9,$5454A8FC,$DDDD4F92,$46468CCA,$8F8FEB64,$E1E137D6,$4E4E9CD2, |
$F0F015E5,$FDFD0FF2,$FCFC0DF1,$EBEB23C8,$F9F907FE,$C4C47DB9,$1A1A342E,$6E6EDCB2, |
$5E5EBCE2,$F5F51FEA,$CCCC6DA1,$8D8DEF62,$1C1C3824,$5656ACFA,$434386C5,$FEFE09F7, |
$07070E09,$6161C2A3,$F8F805FD,$7575EA9F,$5959B2EB,$FFFF0BF4,$03030605,$22224466, |
$8A8AE16B,$D1D15786,$13132635,$EEEE29C7,$8888E56D,$00000000,$0E0E1C12,$3434685C, |
$15152A3F,$8080F575,$9494DD49,$E3E333D0,$EDED2FC2,$B5B59F2A,$5353A6F5,$23234665, |
$4B4B96DD,$47478EC9,$17172E39,$A7A7BB1C,$9090D545,$35356A5F,$ABABA308,$D8D8459D, |
$B8B8853D,$DFDF4B94,$4F4F9ED1,$5757AEF9,$9A9AC15B,$9292D143,$DBDB4398,$1B1B362D, |
$3C3C7844,$C8C865AD,$9999C75E,$0404080C,$8E8EE967,$E0E035D5,$D7D75B8C,$7D7DFA87, |
$8585FF7A,$BBBB8338,$404080C0,$2C2C5874,$3A3A744E,$45458ACF,$F1F117E6,$424284C6, |
$6565CAAF,$20204060,$414182C3,$18183028,$7272E496,$25254A6F,$9393D340,$7070E090, |
$36366C5A,$05050A0F,$F2F211E3,$0B0B161D,$A3A3B310,$7979F28B,$ECEC2DC1,$08081018, |
$27274E69,$31316253,$32326456,$B6B6992F,$7C7CF884,$B0B09525,$0A0A141E,$7373E695, |
$5B5BB6ED,$7B7BF68D,$B7B79B2C,$8181F776,$D2D25183,$0D0D1A17,$6A6AD4BE,$26264C6A, |
$9E9EC957,$5858B0E8,$9C9CCD51,$8383F370,$7474E89C,$B3B39320,$ACACAD01,$30306050, |
$7A7AF48E,$6969D2BB,$7777EE99,$0F0F1E11,$AEAEA907,$21214263,$DEDE4997,$D0D05585, |
$2E2E5C72,$9797DB4C,$10102030,$A4A4BD19,$9898C55D,$A8A8A50D,$D4D45D89,$6868D0B8, |
$2D2D5A77,$6262C4A6,$2929527B,$6D6DDAB7,$16162C3A,$494992DB,$7676EC9A,$C7C77BBC, |
$E8E825CD,$C1C177B6,$9696D94F,$37376E59,$E5E53FDA,$CACA61AB,$F4F41DE9,$E9E927CE, |
$6363C6A5,$12122436,$C2C271B3,$A6A6B91F,$1414283C,$BCBC8D31,$D3D35380,$28285078, |
$AFAFAB04,$2F2F5E71,$E6E639DF,$2424486C,$5252A4F6,$C6C679BF,$A0A0B515,$0909121B, |
$BDBD8F32,$8C8CED61,$CFCF6BA4,$5D5DBAE7,$11112233,$5F5FBEE1,$01010203,$C5C57FBA, |
$9F9FCB54,$3D3D7A47,$A2A2B113,$9B9BC358,$C9C967AE,$3B3B764D,$BEBE8937,$5151A2F3, |
$1919322B,$1F1F3E21,$3F3F7E41,$5C5CB8E4,$B2B29123,$EFEF2BC4,$4A4A94DE,$CDCD6FA2, |
$BFBF8B34,$BABA813B,$6F6FDEB1,$6464C8AC,$D9D9479E,$F3F313E0,$3E3E7C42,$B4B49D29, |
$AAAAA10B,$DCDC4D91,$D5D55F8A,$06060C0A,$C0C075B5,$7E7EFC82,$F6F619EF,$6666CCAA, |
$6C6CD8B4,$8484FD79,$7171E293,$38387048,$B9B9873E,$1D1D3A27,$7F7FFE81,$9D9DCF52, |
$484890D8,$8B8BE368,$2A2A547E,$DADA419B,$A5A5BF1A,$33336655,$8282F173,$3939724B, |
$D6D6598F,$7878F088,$8686F97F,$FAFA01FB,$E4E43DD9,$2B2B567D,$A9A9A70E,$1E1E3C22, |
$8989E76E,$6060C0A0,$6B6BD6BD,$EAEA21CB,$5555AAFF,$4C4C98D4,$F7F71BEC,$E2E231D3), |
($B19726B1,$CE69A7CE,$C373B0C3,$95DF4A95,$5AB4EE5A,$ADAF02AD,$E73BDCE7,$02040602, |
$4D9AD74D,$4488CC44,$FB03F8FB,$91D74691,$0C18140C,$87FB7C87,$A1B716A1,$50A0F050, |
$CB63A8CB,$67CEA967,$54A8FC54,$DD4F92DD,$468CCA46,$8FEB648F,$E137D6E1,$4E9CD24E, |
$F015E5F0,$FD0FF2FD,$FC0DF1FC,$EB23C8EB,$F907FEF9,$C47DB9C4,$1A342E1A,$6EDCB26E, |
$5EBCE25E,$F51FEAF5,$CC6DA1CC,$8DEF628D,$1C38241C,$56ACFA56,$4386C543,$FE09F7FE, |
$070E0907,$61C2A361,$F805FDF8,$75EA9F75,$59B2EB59,$FF0BF4FF,$03060503,$22446622, |
$8AE16B8A,$D15786D1,$13263513,$EE29C7EE,$88E56D88,$00000000,$0E1C120E,$34685C34, |
$152A3F15,$80F57580,$94DD4994,$E333D0E3,$ED2FC2ED,$B59F2AB5,$53A6F553,$23466523, |
$4B96DD4B,$478EC947,$172E3917,$A7BB1CA7,$90D54590,$356A5F35,$ABA308AB,$D8459DD8, |
$B8853DB8,$DF4B94DF,$4F9ED14F,$57AEF957,$9AC15B9A,$92D14392,$DB4398DB,$1B362D1B, |
$3C78443C,$C865ADC8,$99C75E99,$04080C04,$8EE9678E,$E035D5E0,$D75B8CD7,$7DFA877D, |
$85FF7A85,$BB8338BB,$4080C040,$2C58742C,$3A744E3A,$458ACF45,$F117E6F1,$4284C642, |
$65CAAF65,$20406020,$4182C341,$18302818,$72E49672,$254A6F25,$93D34093,$70E09070, |
$366C5A36,$050A0F05,$F211E3F2,$0B161D0B,$A3B310A3,$79F28B79,$EC2DC1EC,$08101808, |
$274E6927,$31625331,$32645632,$B6992FB6,$7CF8847C,$B09525B0,$0A141E0A,$73E69573, |
$5BB6ED5B,$7BF68D7B,$B79B2CB7,$81F77681,$D25183D2,$0D1A170D,$6AD4BE6A,$264C6A26, |
$9EC9579E,$58B0E858,$9CCD519C,$83F37083,$74E89C74,$B39320B3,$ACAD01AC,$30605030, |
$7AF48E7A,$69D2BB69,$77EE9977,$0F1E110F,$AEA907AE,$21426321,$DE4997DE,$D05585D0, |
$2E5C722E,$97DB4C97,$10203010,$A4BD19A4,$98C55D98,$A8A50DA8,$D45D89D4,$68D0B868, |
$2D5A772D,$62C4A662,$29527B29,$6DDAB76D,$162C3A16,$4992DB49,$76EC9A76,$C77BBCC7, |
$E825CDE8,$C177B6C1,$96D94F96,$376E5937,$E53FDAE5,$CA61ABCA,$F41DE9F4,$E927CEE9, |
$63C6A563,$12243612,$C271B3C2,$A6B91FA6,$14283C14,$BC8D31BC,$D35380D3,$28507828, |
$AFAB04AF,$2F5E712F,$E639DFE6,$24486C24,$52A4F652,$C679BFC6,$A0B515A0,$09121B09, |
$BD8F32BD,$8CED618C,$CF6BA4CF,$5DBAE75D,$11223311,$5FBEE15F,$01020301,$C57FBAC5, |
$9FCB549F,$3D7A473D,$A2B113A2,$9BC3589B,$C967AEC9,$3B764D3B,$BE8937BE,$51A2F351, |
$19322B19,$1F3E211F,$3F7E413F,$5CB8E45C,$B29123B2,$EF2BC4EF,$4A94DE4A,$CD6FA2CD, |
$BF8B34BF,$BA813BBA,$6FDEB16F,$64C8AC64,$D9479ED9,$F313E0F3,$3E7C423E,$B49D29B4, |
$AAA10BAA,$DC4D91DC,$D55F8AD5,$060C0A06,$C075B5C0,$7EFC827E,$F619EFF6,$66CCAA66, |
$6CD8B46C,$84FD7984,$71E29371,$38704838,$B9873EB9,$1D3A271D,$7FFE817F,$9DCF529D, |
$4890D848,$8BE3688B,$2A547E2A,$DA419BDA,$A5BF1AA5,$33665533,$82F17382,$39724B39, |
$D6598FD6,$78F08878,$86F97F86,$FA01FBFA,$E43DD9E4,$2B567D2B,$A9A70EA9,$1E3C221E, |
$89E76E89,$60C0A060,$6BD6BD6B,$EA21CBEA,$55AAFF55,$4C98D44C,$F71BECF7,$E231D3E2), |
($9726B1B1,$69A7CECE,$73B0C3C3,$DF4A9595,$B4EE5A5A,$AF02ADAD,$3BDCE7E7,$04060202, |
$9AD74D4D,$88CC4444,$03F8FBFB,$D7469191,$18140C0C,$FB7C8787,$B716A1A1,$A0F05050, |
$63A8CBCB,$CEA96767,$A8FC5454,$4F92DDDD,$8CCA4646,$EB648F8F,$37D6E1E1,$9CD24E4E, |
$15E5F0F0,$0FF2FDFD,$0DF1FCFC,$23C8EBEB,$07FEF9F9,$7DB9C4C4,$342E1A1A,$DCB26E6E, |
$BCE25E5E,$1FEAF5F5,$6DA1CCCC,$EF628D8D,$38241C1C,$ACFA5656,$86C54343,$09F7FEFE, |
$0E090707,$C2A36161,$05FDF8F8,$EA9F7575,$B2EB5959,$0BF4FFFF,$06050303,$44662222, |
$E16B8A8A,$5786D1D1,$26351313,$29C7EEEE,$E56D8888,$00000000,$1C120E0E,$685C3434, |
$2A3F1515,$F5758080,$DD499494,$33D0E3E3,$2FC2EDED,$9F2AB5B5,$A6F55353,$46652323, |
$96DD4B4B,$8EC94747,$2E391717,$BB1CA7A7,$D5459090,$6A5F3535,$A308ABAB,$459DD8D8, |
$853DB8B8,$4B94DFDF,$9ED14F4F,$AEF95757,$C15B9A9A,$D1439292,$4398DBDB,$362D1B1B, |
$78443C3C,$65ADC8C8,$C75E9999,$080C0404,$E9678E8E,$35D5E0E0,$5B8CD7D7,$FA877D7D, |
$FF7A8585,$8338BBBB,$80C04040,$58742C2C,$744E3A3A,$8ACF4545,$17E6F1F1,$84C64242, |
$CAAF6565,$40602020,$82C34141,$30281818,$E4967272,$4A6F2525,$D3409393,$E0907070, |
$6C5A3636,$0A0F0505,$11E3F2F2,$161D0B0B,$B310A3A3,$F28B7979,$2DC1ECEC,$10180808, |
$4E692727,$62533131,$64563232,$992FB6B6,$F8847C7C,$9525B0B0,$141E0A0A,$E6957373, |
$B6ED5B5B,$F68D7B7B,$9B2CB7B7,$F7768181,$5183D2D2,$1A170D0D,$D4BE6A6A,$4C6A2626, |
$C9579E9E,$B0E85858,$CD519C9C,$F3708383,$E89C7474,$9320B3B3,$AD01ACAC,$60503030, |
$F48E7A7A,$D2BB6969,$EE997777,$1E110F0F,$A907AEAE,$42632121,$4997DEDE,$5585D0D0, |
$5C722E2E,$DB4C9797,$20301010,$BD19A4A4,$C55D9898,$A50DA8A8,$5D89D4D4,$D0B86868, |
$5A772D2D,$C4A66262,$527B2929,$DAB76D6D,$2C3A1616,$92DB4949,$EC9A7676,$7BBCC7C7, |
$25CDE8E8,$77B6C1C1,$D94F9696,$6E593737,$3FDAE5E5,$61ABCACA,$1DE9F4F4,$27CEE9E9, |
$C6A56363,$24361212,$71B3C2C2,$B91FA6A6,$283C1414,$8D31BCBC,$5380D3D3,$50782828, |
$AB04AFAF,$5E712F2F,$39DFE6E6,$486C2424,$A4F65252,$79BFC6C6,$B515A0A0,$121B0909, |
$8F32BDBD,$ED618C8C,$6BA4CFCF,$BAE75D5D,$22331111,$BEE15F5F,$02030101,$7FBAC5C5, |
$CB549F9F,$7A473D3D,$B113A2A2,$C3589B9B,$67AEC9C9,$764D3B3B,$8937BEBE,$A2F35151, |
$322B1919,$3E211F1F,$7E413F3F,$B8E45C5C,$9123B2B2,$2BC4EFEF,$94DE4A4A,$6FA2CDCD, |
$8B34BFBF,$813BBABA,$DEB16F6F,$C8AC6464,$479ED9D9,$13E0F3F3,$7C423E3E,$9D29B4B4, |
$A10BAAAA,$4D91DCDC,$5F8AD5D5,$0C0A0606,$75B5C0C0,$FC827E7E,$19EFF6F6,$CCAA6666, |
$D8B46C6C,$FD798484,$E2937171,$70483838,$873EB9B9,$3A271D1D,$FE817F7F,$CF529D9D, |
$90D84848,$E3688B8B,$547E2A2A,$419BDADA,$BF1AA5A5,$66553333,$F1738282,$724B3939, |
$598FD6D6,$F0887878,$F97F8686,$01FBFAFA,$3DD9E4E4,$567D2B2B,$A70EA9A9,$3C221E1E, |
$E76E8989,$C0A06060,$D6BD6B6B,$21CBEAEA,$AAFF5555,$98D44C4C,$1BECF7F7,$31D3E2E2) |
); |
{$IFDEF RESTORE_RANGECHECKS}{$R+}{$ENDIF} |
{$IFDEF RESTORE_OVERFLOWCHECKS}{$Q+}{$ENDIF} |
Blowfish_Data: TBlowfishMatrix {array[0..3, 0..255] of UInt32} = ( |
($D1310BA6,$98DFB5AC,$2FFD72DB,$D01ADFB7,$B8E1AFED,$6A267E96,$BA7C9045,$F12C7F99, |
$24A19947,$B3916CF7,$0801F2E2,$858EFC16,$636920D8,$71574E69,$A458FEA3,$F4933D7E, |
$0D95748F,$728EB658,$718BCD58,$82154AEE,$7B54A41D,$C25A59B5,$9C30D539,$2AF26013, |
$C5D1B023,$286085F0,$CA417918,$B8DB38EF,$8E79DCB0,$603A180E,$6C9E0E8B,$B01E8A3E, |
$D71577C1,$BD314B27,$78AF2FDA,$55605C60,$E65525F3,$AA55AB94,$57489862,$63E81440, |
$55CA396A,$2AAB10B6,$B4CC5C34,$1141E8CE,$A15486AF,$7C72E993,$B3EE1411,$636FBC2A, |
$2BA9C55D,$741831F6,$CE5C3E16,$9B87931E,$AFD6BA33,$6C24CF5C,$7A325381,$28958677, |
$3B8F4898,$6B4BB9AF,$C4BFE81B,$66282193,$61D809CC,$FB21A991,$487CAC60,$5DEC8032, |
$EF845D5D,$E98575B1,$DC262302,$EB651B88,$23893E81,$D396ACC5,$0F6D6FF3,$83F44239, |
$2E0B4482,$A4842004,$69C8F04A,$9E1F9B5E,$21C66842,$F6E96C9A,$670C9C61,$ABD388F0, |
$6A51A0D2,$D8542F68,$960FA728,$AB5133A3,$6EEF0B6C,$137A3BE4,$BA3BF050,$7EFB2A98, |
$A1F1651D,$39AF0176,$66CA593E,$82430E88,$8CEE8619,$456F9FB4,$7D84A5C3,$3B8B5EBE, |
$E06F75D8,$85C12073,$401A449F,$56C16AA6,$4ED3AA62,$363F7706,$1BFEDF72,$429B023D, |
$37D0D724,$D00A1248,$DB0FEAD3,$49F1C09B,$075372C9,$80991B7B,$25D479D8,$F6E8DEF7, |
$E3FE501A,$B6794C3B,$976CE0BD,$04C006BA,$C1A94FB6,$409F60C4,$5E5C9EC2,$196A2463, |
$68FB6FAF,$3E6C53B5,$1339B2EB,$3B52EC6F,$6DFC511F,$9B30952C,$CC814544,$AF5EBD09, |
$BEE3D004,$DE334AFD,$660F2807,$192E4BB3,$C0CBA857,$45C8740F,$D20B5F39,$B9D3FBDB, |
$5579C0BD,$1A60320A,$D6A100C6,$402C7279,$679F25FE,$FB1FA3CC,$8EA5E9F8,$DB3222F8, |
$3C7516DF,$FD616B15,$2F501EC8,$AD0552AB,$323DB5FA,$FD238760,$53317B48,$3E00DF82, |
$9E5C57BB,$CA6F8CA0,$1A87562E,$DF1769DB,$D542A8F6,$287EFFC3,$AC6732C6,$8C4F5573, |
$695B27B0,$BBCA58C8,$E1FFA35D,$B8F011A0,$10FA3D98,$FD2183B8,$4AFCB56C,$2DD1D35B, |
$9A53E479,$B6F84565,$D28E49BC,$4BFB9790,$E1DDF2DA,$A4CB7E33,$62FB1341,$CEE4C6E8, |
$EF20CADA,$36774C01,$D07E9EFE,$2BF11FB4,$95DBDA4D,$AE909198,$EAAD8E71,$6B93D5A0, |
$D08ED1D0,$AFC725E0,$8E3C5B2F,$8E7594B7,$8FF6E2FB,$F2122B64,$8888B812,$900DF01C, |
$4FAD5EA0,$688FC31C,$D1CFF191,$B3A8C1AD,$2F2F2218,$BE0E1777,$EA752DFE,$8B021FA1, |
$E5A0CC0F,$B56F74E8,$18ACF3D6,$CE89E299,$B4A84FE0,$FD13E0B7,$7CC43B81,$D2ADA8D9, |
$165FA266,$80957705,$93CC7314,$211A1477,$E6AD2065,$77B5FA86,$C75442F5,$FB9D35CF, |
$EBCDAF0C,$7B3E89A0,$D6411BD3,$AE1E7E49,$00250E2D,$2071B35E,$226800BB,$57B8E0AF, |
$2464369B,$F009B91E,$5563911D,$59DFA6AA,$78C14389,$D95A537F,$207D5BA2,$02E5B9C5, |
$83260376,$6295CFA9,$11C81968,$4E734A41,$B3472DCA,$7B14A94A,$1B510052,$9A532915, |
$D60F573F,$BC9BC6E4,$2B60A476,$81E67400,$08BA6FB5,$571BE91F,$F296EC6B,$2A0DD915, |
$B6636521,$E7B9F9B6,$FF34052E,$C5855664,$53B02D5D,$A99F8FA1,$08BA4799,$6E85076A), |
($4B7A70E9,$B5B32944,$DB75092E,$C4192623,$AD6EA6B0,$49A7DF7D,$9CEE60B8,$8FEDB266, |
$ECAA8C71,$699A17FF,$5664526C,$C2B19EE1,$193602A5,$75094C29,$A0591340,$E4183A3E, |
$3F54989A,$5B429D65,$6B8FE4D6,$99F73FD6,$A1D29C07,$EFE830F5,$4D2D38E6,$F0255DC1, |
$4CDD2086,$8470EB26,$6382E9C6,$021ECC5E,$09686B3F,$3EBAEFC9,$3C971814,$6B6A70A1, |
$687F3584,$52A0E286,$B79C5305,$AA500737,$3E07841C,$7FDEAE5C,$8E7D44EC,$5716F2B8, |
$B03ADA37,$F0500C0D,$F01C1F04,$0200B3FF,$AE0CF51A,$3CB574B2,$25837A58,$DC0921BD, |
$D19113F9,$7CA92FF6,$94324773,$22F54701,$3AE5E581,$37C2DADC,$C8B57634,$9AF3DDA7, |
$A9446146,$0FD0030E,$ECC8C73E,$A4751E41,$E238CD99,$3BEA0E2F,$3280BBA1,$183EB331, |
$4E548B38,$4F6DB908,$6F420D03,$F60A04BF,$2CB81290,$24977C79,$5679B072,$BCAF89AF, |
$DE9A771F,$D9930810,$B38BAE12,$DCCF3F2E,$5512721F,$2E6B7124,$501ADDE6,$9F84CD87, |
$7A584718,$7408DA17,$BC9F9ABC,$E94B7D8C,$EC7AEC3A,$DB851DFA,$63094366,$C464C3D2, |
$EF1C1847,$3215D908,$DD433B37,$24C2BA16,$12A14D43,$2A65C451,$50940002,$133AE4DD, |
$71DFF89E,$10314E55,$81AC77D6,$5F11199B,$043556F1,$D7A3C76B,$3C11183B,$5924A509, |
$F28FE6ED,$97F1FBFA,$9EBABF2C,$1E153C6E,$86E34570,$EAE96FB1,$860E5E0A,$5A3E2AB3, |
$771FE71C,$4E3D06FA,$2965DCB9,$99E71D0F,$803E89D6,$5266C825,$2E4CC978,$9C10B36A, |
$C6150EBA,$94E2EA78,$A5FC3C53,$1E0A2DF4,$F2F74EA7,$361D2B3D,$1939260F,$19C27960, |
$5223A708,$F71312B6,$EBADFE6E,$EAC31F66,$E3BC4595,$A67BC883,$B17F37D1,$018CFF28, |
$C332DDEF,$BE6C5AA5,$65582185,$68AB9802,$EECEA50F,$DB2F953B,$2AEF7DAD,$5B6E2F84, |
$1521B628,$29076170,$ECDD4775,$619F1510,$13CCA830,$EB61BD96,$0334FE1E,$AA0363CF, |
$B5735C90,$4C70A239,$D59E9E0B,$CBAADE14,$EECC86BC,$60622CA7,$9CAB5CAB,$B2F3846E, |
$648B1EAF,$19BDF0CA,$A02369B9,$655ABB50,$40685A32,$3C2AB4B3,$319EE9D5,$C021B8F7, |
$9B540B19,$875FA099,$95F7997E,$623D7DA8,$F837889A,$97E32D77,$11ED935F,$16681281, |
$0E358829,$C7E61FD6,$96DEDFA1,$7858BA99,$57F584A5,$1B227263,$9B83C3FF,$1AC24696, |
$CDB30AEB,$532E3054,$8FD948E4,$6DBC3128,$58EBF2EF,$34C6FFEA,$FE28ED61,$EE7C3C73, |
$5D4A14D9,$E864B7E3,$42105D14,$203E13E0,$45EEE2B6,$A3AAABEA,$DB6C4F15,$FACB4FD0, |
$C742F442,$EF6ABBB5,$654F3B1D,$41CD2105,$D81E799E,$86854DC7,$E44B476A,$3D816250, |
$CF62A1F2,$5B8D2646,$FC8883A0,$C1C7B6A3,$7F1524C3,$69CB7492,$47848A0B,$5692B285, |
$095BBF00,$AD19489D,$1462B174,$23820E00,$58428D2A,$0C55F5EA,$1DADF43E,$233F7061, |
$3372F092,$8D937E41,$D65FECF1,$6C223BDB,$7CDE3759,$CBEE7460,$4085F2A7,$CE77326E, |
$A6078084,$19F8509E,$E8EFD855,$61D99735,$A969A7AA,$C50C06C2,$5A04ABFC,$800BCADC, |
$9E447A2E,$C3453484,$FDD56705,$0E1E9EC9,$DB73DBD3,$105588CD,$675FDA79,$E3674340, |
$C5C43465,$713E38D8,$3D28F89E,$F16DFF20,$153E21E7,$8FB03D4A,$E6E39F2B,$DB83ADF7), |
($E93D5A68,$948140F7,$F64C261C,$94692934,$411520F7,$7602D4F7,$BCF46B2E,$D4A20068, |
$D4082471,$3320F46A,$43B7D4B7,$500061AF,$1E39F62E,$97244546,$14214F74,$BF8B8840, |
$4D95FC1D,$96B591AF,$70F4DDD3,$66A02F45,$BFBC09EC,$03BD9785,$7FAC6DD0,$31CB8504, |
$96EB27B3,$55FD3941,$DA2547E6,$ABCA0A9A,$28507825,$530429F4,$0A2C86DA,$E9B66DFB, |
$68DC1462,$D7486900,$680EC0A4,$27A18DEE,$4F3FFEA2,$E887AD8C,$B58CE006,$7AF4D6B6, |
$AACE1E7C,$D3375FEC,$CE78A399,$406B2A42,$20FE9E35,$D9F385B9,$EE39D7AB,$3B124E8B, |
$1DC9FAF7,$4B6D1856,$26A36631,$EAE397B2,$3A6EFA74,$DD5B4332,$6841E7F7,$CA7820FB, |
$FB0AF54E,$D8FEB397,$454056AC,$BA489527,$55533A3A,$20838D87,$FE6BA9B7,$D096954B, |
$55A867BC,$A1159A58,$CCA92963,$99E1DB33,$A62A4A56,$3F3125F9,$5EF47E1C,$9029317C, |
$FDF8E802,$04272F70,$80BB155C,$05282CE3,$95C11548,$E4C66D22,$48C1133F,$C70F86DC, |
$07F9C9EE,$41041F0F,$404779A4,$5D886E17,$325F51EB,$D59BC0D1,$F2BCC18F,$41113564, |
$257B7834,$602A9C60,$DFF8E8A3,$1F636C1B,$0E12B4C2,$02E1329E,$AF664FD1,$CAD18115, |
$6B2395E0,$333E92E1,$3B240B62,$EEBEB922,$85B2A20E,$E6BA0D99,$DE720C8C,$2DA2F728, |
$D0127845,$95B794FD,$647D0862,$E7CCF5F0,$5449A36F,$877D48FA,$C39DFD27,$F33E8D1E, |
$0A476341,$992EFF74,$3A6F6EAB,$F4F8FD37,$A812DC60,$A1EBDDF8,$991BE14C,$DB6E6B0D, |
$C67B5510,$6D672C37,$2765D43B,$DCD0E804,$F1290DC7,$CC00FFA3,$B5390F92,$690FED0B, |
$667B9FFB,$CEDB7D9C,$A091CF0B,$D9155EA3,$BB132F88,$515BAD24,$7B9479BF,$763BD6EB, |
$37392EB3,$CC115979,$8026E297,$F42E312D,$6842ADA7,$C66A2B3B,$12754CCC,$782EF11C, |
$6A124237,$B79251E7,$06A1BBE6,$4BFB6350,$1A6B1018,$11CAEDFA,$3D25BDD8,$E2E1C3C9, |
$44421659,$0A121386,$D90CEC6E,$D5ABEA2A,$64AF674E,$DA86A85F,$BEBFE988,$64E4C3FE, |
$9DBC8057,$F0F7C086,$60787BF8,$6003604D,$D1FD8346,$F6381FB0,$7745AE04,$D736FCCC, |
$83426B33,$F01EAB71,$B0804187,$3C005E5F,$77A057BE,$BDE8AE24,$55464299,$BF582E61, |
$4E58F48F,$F2DDFDA2,$F474EF38,$8789BDC2,$5366F9C3,$C8B38E74,$B475F255,$46FCD9B9, |
$7AEB2661,$8B1DDF84,$846A0E79,$915F95E2,$466E598E,$20B45770,$8CD55591,$C902DE4C, |
$B90BACE1,$BB8205D0,$11A86248,$7574A99E,$B77F19B6,$E0A9DC09,$662D09A1,$C4324633, |
$E85A1F02,$09F0BE8C,$4A99A025,$1D6EFE10,$1AB93D1D,$0BA5A4DF,$A186F20F,$2868F169, |
$DCB7DA83,$573906FE,$A1E2CE9B,$4FCD7F52,$50115E01,$A70683FA,$A002B5C4,$0DE6D027, |
$9AF88C27,$773F8641,$C3604C06,$61A806B5,$F0177A28,$C0F586E0,$006058AA,$30DC7D62, |
$11E69ED7,$2338EA63,$53C2DD94,$C2C21634,$BBCBEE56,$90BCB6DE,$EBFC7DA1,$CE591D76, |
$6F05E409,$4B7C0188,$39720A3D,$7C927C24,$86E3725F,$724D9DB9,$1AC15BB4,$D39EB8FC, |
$ED545578,$08FCA5B5,$D83D7CD3,$4DAD0FC4,$1E50EF5E,$B161E6F8,$A28514D9,$6C51133C, |
$6FD5C7E7,$56E14EC4,$362ABFCE,$DDC6C837,$D79A3234,$92638212,$670EFA8E,$406000E0), |
($3A39CE37,$D3FAF5CF,$ABC27737,$5AC52D1B,$5CB0679E,$4FA33742,$D3822740,$99BC9BBE, |
$D5118E9D,$BF0F7315,$D62D1C7E,$C700C47B,$B78C1B6B,$21A19045,$B26EB1BE,$6A366EB4, |
$5748AB2F,$BC946E79,$C6A376D2,$6549C2C8,$530FF8EE,$468DDE7D,$D5730A1D,$4CD04DC6, |
$2939BBDB,$A9BA4650,$AC9526E8,$BE5EE304,$A1FAD5F0,$6A2D519A,$63EF8CE2,$9A86EE22, |
$C089C2B8,$43242EF6,$A51E03AA,$9CF2D0A4,$83C061BA,$9BE96A4D,$8FE51550,$BA645BD6, |
$2826A2F9,$A73A3AE1,$4BA99586,$EF5562E9,$C72FEFD3,$F752F7DA,$3F046F69,$77FA0A59, |
$80E4A915,$87B08601,$9B09E6AD,$3B3EE593,$E990FD5A,$9E34D797,$2CF0B7D9,$022B8B51, |
$96D5AC3A,$017DA67D,$D1CF3ED6,$7C7D2D28,$1F9F25CF,$ADF2B89B,$5AD6B472,$5A88F54C, |
$E029AC71,$E019A5E6,$47B0ACFD,$ED93FA9B,$E8D3C48D,$283B57CC,$F8D56629,$79132E28, |
$785F0191,$ED756055,$F7960E44,$E3D35E8C,$15056DD4,$88F46DBA,$03A16125,$0564F0BD, |
$C3EB9E15,$3C9057A2,$97271AEC,$A93A072A,$1B3F6D9B,$1E6321F5,$F59C66FB,$26DCF319, |
$7533D928,$B155FDF5,$03563482,$8ABA3CBB,$28517711,$C20AD9F8,$ABCC5167,$CCAD925F, |
$4DE81751,$3830DC8E,$379D5862,$9320F991,$EA7A90C2,$FB3E7BCE,$5121CE64,$774FBE32, |
$A8B6E37E,$C3293D46,$48DE5369,$6413E680,$A2AE0810,$DD6DB224,$69852DFD,$09072166, |
$B39A460A,$6445C0DD,$586CDECF,$1C20C8AE,$5BBEF7DD,$1B588D40,$CCD2017F,$6BB4E3BB, |
$DDA26A7E,$3A59FF45,$3E350A44,$BCB4CDD5,$72EACEA8,$FA6484BB,$8D6612AE,$BF3C6F47, |
$D29BE463,$542F5D9E,$AEC2771B,$F64E6370,$740E0D8D,$E75B1357,$F8721671,$AF537D5D, |
$4040CB08,$4EB4E2CC,$34D2466A,$0115AF84,$E1B00428,$95983A1D,$06B89FB4,$CE6EA048, |
$6F3F3B82,$3520AB82,$011A1D4B,$277227F8,$611560B1,$E7933FDC,$BB3A792B,$344525BD, |
$A08839E1,$51CE794B,$2F32C9B7,$A01FBAC9,$E01CC87E,$BCC7D1F6,$CF0111C3,$A1E8AAC7, |
$1A908749,$D44FBD9A,$D0DADECB,$D50ADA38,$0339C32A,$C6913667,$8DF9317C,$E0B12B4F, |
$F79E59B7,$43F5BB3A,$F2D519FF,$27D9459C,$BF97222C,$15E6FC2A,$0F91FC71,$9B941525, |
$FAE59361,$CEB69CEB,$C2A86459,$12BAA8D1,$B6C1075E,$E3056A0C,$10D25065,$CB03A442, |
$E0EC6E0E,$1698DB3B,$4C98A0BE,$3278E964,$9F1F9532,$E0D392DF,$D3A0342B,$8971F21E, |
$1B0A7441,$4BA3348C,$C5BE7120,$C37632D8,$DF359F8D,$9B992F2E,$E60B6F47,$0FE3F11D, |
$E54CDA54,$1EDAD891,$CE6279CF,$CD3E7E6F,$1618B166,$FD2C1D05,$848FD2C5,$F6FB2299, |
$F523F357,$A6327623,$93A83531,$56CCCD02,$ACF08162,$5A75EBB5,$6E163697,$88D273CC, |
$DE966292,$81B949D0,$4C50901B,$71C65614,$E6C6C7BD,$327A140A,$45E1D006,$C3F27B9A, |
$C9AA53FD,$62A80F00,$BB25BFE2,$35BDD2F6,$71126905,$B2040222,$B6CBCF7C,$CD769C2B, |
$53113EC0,$1640E3D3,$38ABBD60,$2547ADF0,$BA38209C,$F746CE76,$77AFA1C5,$20756060, |
$85CBFE4E,$8AE88DD8,$7AAAF9B0,$4CF9AA7E,$1948C25C,$02FB8A8C,$01C36AE4,$D6EBE1F9, |
$90D4F869,$A65CDEA0,$3F09252D,$C208E69F,$B74E6132,$CE77E25B,$578FDFE3,$3AC372E6) |
); |
Blowfish_Key: TBlowfishKey {array[0..17] of UInt32} = ( |
$243F6A88,$85A308D3,$13198A2E,$03707344,$A4093822,$299F31D0, |
$082EFA98,$EC4E6C89,$452821E6,$38D01377,$BE5466CF,$34E90C6C, |
$C0AC29B7,$C97C50DD,$3F84D5B5,$B5470917,$9216D5D9,$8979FB1B |
); |
implementation |
end. |
/trunk/Decoder5/VCL_DEC/DECDataCipher.pas |
---|
0,0 → 1,3812 |
{***************************************************************************** |
The DEC team (see file NOTICE.txt) licenses this file |
to you under the Apache License, Version 2.0 (the |
"License"); you may not use this file except in compliance |
with the License. A copy of this licence is found in the root directory |
of this project in the file LICENCE.txt or alternatively 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. |
*****************************************************************************} |
/// <summary> |
/// Data Arrays for the cipher functions |
/// </summary> |
unit DECDataCipher; |
interface |
{$INCLUDE DECOptions.inc} |
{$IFOPT Q+}{$DEFINE RESTORE_OVERFLOWCHECKS}{$Q-}{$ENDIF} |
{$IFOPT R+}{$DEFINE RESTORE_RANGECHECKS}{$R-}{$ENDIF} |
const |
Square_SE: array[0..255] of Byte = ( |
177, 206, 195, 149, 90, 173, 231, 2, 77, 68, 251, 145, 12, 135, 161, 80, |
203, 103, 84, 221, 70, 143, 225, 78, 240, 253, 252, 235, 249, 196, 26, 110, |
94, 245, 204, 141, 28, 86, 67, 254, 7, 97, 248, 117, 89, 255, 3, 34, |
138, 209, 19, 238, 136, 0, 14, 52, 21, 128, 148, 227, 237, 181, 83, 35, |
75, 71, 23, 167, 144, 53, 171, 216, 184, 223, 79, 87, 154, 146, 219, 27, |
60, 200, 153, 4, 142, 224, 215, 125, 133, 187, 64, 44, 58, 69, 241, 66, |
101, 32, 65, 24, 114, 37, 147, 112, 54, 5, 242, 11, 163, 121, 236, 8, |
39, 49, 50, 182, 124, 176, 10, 115, 91, 123, 183, 129, 210, 13, 106, 38, |
158, 88, 156, 131, 116, 179, 172, 48, 122, 105, 119, 15, 174, 33, 222, 208, |
46, 151, 16, 164, 152, 168, 212, 104, 45, 98, 41, 109, 22, 73, 118, 199, |
232, 193, 150, 55, 229, 202, 244, 233, 99, 18, 194, 166, 20, 188, 211, 40, |
175, 47, 230, 36, 82, 198, 160, 9, 189, 140, 207, 93, 17, 95, 1, 197, |
159, 61, 162, 155, 201, 59, 190, 81, 25, 31, 63, 92, 178, 239, 74, 205, |
191, 186, 111, 100, 217, 243, 62, 180, 170, 220, 213, 6, 192, 126, 246, 102, |
108, 132, 113, 56, 185, 29, 127, 157, 72, 139, 42, 218, 165, 51, 130, 57, |
214, 120, 134, 250, 228, 43, 169, 30, 137, 96, 107, 234, 85, 76, 247, 226 |
); |
Square_SD: array[0..255] of Byte = ( |
53, 190, 7, 46, 83, 105, 219, 40, 111, 183, 118, 107, 12, 125, 54, 139, |
146, 188, 169, 50, 172, 56, 156, 66, 99, 200, 30, 79, 36, 229, 247, 201, |
97, 141, 47, 63, 179, 101, 127, 112, 175, 154, 234, 245, 91, 152, 144, 177, |
135, 113, 114, 237, 55, 69, 104, 163, 227, 239, 92, 197, 80, 193, 214, 202, |
90, 98, 95, 38, 9, 93, 20, 65, 232, 157, 206, 64, 253, 8, 23, 74, |
15, 199, 180, 62, 18, 252, 37, 75, 129, 44, 4, 120, 203, 187, 32, 189, |
249, 41, 153, 168, 211, 96, 223, 17, 151, 137, 126, 250, 224, 155, 31, 210, |
103, 226, 100, 119, 132, 43, 158, 138, 241, 109, 136, 121, 116, 87, 221, 230, |
57, 123, 238, 131, 225, 88, 242, 13, 52, 248, 48, 233, 185, 35, 84, 21, |
68, 11, 77, 102, 58, 3, 162, 145, 148, 82, 76, 195, 130, 231, 128, 192, |
182, 14, 194, 108, 147, 236, 171, 67, 149, 246, 216, 70, 134, 5, 140, 176, |
117, 0, 204, 133, 215, 61, 115, 122, 72, 228, 209, 89, 173, 184, 198, 208, |
220, 161, 170, 2, 29, 191, 181, 159, 81, 196, 165, 16, 34, 207, 1, 186, |
143, 49, 124, 174, 150, 218, 240, 86, 71, 212, 235, 78, 217, 19, 142, 73, |
85, 22, 255, 59, 244, 164, 178, 6, 160, 167, 251, 27, 110, 60, 51, 205, |
24, 94, 106, 213, 166, 33, 222, 254, 42, 28, 243, 10, 26, 25, 39, 45 |
); |
Square_PHI: array[0..255] of UInt32 = ( |
$00000000,$03010102,$06020204,$05030306,$0C040408,$0F05050A,$0A06060C,$0907070E, |
$18080810,$1B090912,$1E0A0A14,$1D0B0B16,$140C0C18,$170D0D1A,$120E0E1C,$110F0F1E, |
$30101020,$33111122,$36121224,$35131326,$3C141428,$3F15152A,$3A16162C,$3917172E, |
$28181830,$2B191932,$2E1A1A34,$2D1B1B36,$241C1C38,$271D1D3A,$221E1E3C,$211F1F3E, |
$60202040,$63212142,$66222244,$65232346,$6C242448,$6F25254A,$6A26264C,$6927274E, |
$78282850,$7B292952,$7E2A2A54,$7D2B2B56,$742C2C58,$772D2D5A,$722E2E5C,$712F2F5E, |
$50303060,$53313162,$56323264,$55333366,$5C343468,$5F35356A,$5A36366C,$5937376E, |
$48383870,$4B393972,$4E3A3A74,$4D3B3B76,$443C3C78,$473D3D7A,$423E3E7C,$413F3F7E, |
$C0404080,$C3414182,$C6424284,$C5434386,$CC444488,$CF45458A,$CA46468C,$C947478E, |
$D8484890,$DB494992,$DE4A4A94,$DD4B4B96,$D44C4C98,$D74D4D9A,$D24E4E9C,$D14F4F9E, |
$F05050A0,$F35151A2,$F65252A4,$F55353A6,$FC5454A8,$FF5555AA,$FA5656AC,$F95757AE, |
$E85858B0,$EB5959B2,$EE5A5AB4,$ED5B5BB6,$E45C5CB8,$E75D5DBA,$E25E5EBC,$E15F5FBE, |
$A06060C0,$A36161C2,$A66262C4,$A56363C6,$AC6464C8,$AF6565CA,$AA6666CC,$A96767CE, |
$B86868D0,$BB6969D2,$BE6A6AD4,$BD6B6BD6,$B46C6CD8,$B76D6DDA,$B26E6EDC,$B16F6FDE, |
$907070E0,$937171E2,$967272E4,$957373E6,$9C7474E8,$9F7575EA,$9A7676EC,$997777EE, |
$887878F0,$8B7979F2,$8E7A7AF4,$8D7B7BF6,$847C7CF8,$877D7DFA,$827E7EFC,$817F7FFE, |
$758080F5,$768181F7,$738282F1,$708383F3,$798484FD,$7A8585FF,$7F8686F9,$7C8787FB, |
$6D8888E5,$6E8989E7,$6B8A8AE1,$688B8BE3,$618C8CED,$628D8DEF,$678E8EE9,$648F8FEB, |
$459090D5,$469191D7,$439292D1,$409393D3,$499494DD,$4A9595DF,$4F9696D9,$4C9797DB, |
$5D9898C5,$5E9999C7,$5B9A9AC1,$589B9BC3,$519C9CCD,$529D9DCF,$579E9EC9,$549F9FCB, |
$15A0A0B5,$16A1A1B7,$13A2A2B1,$10A3A3B3,$19A4A4BD,$1AA5A5BF,$1FA6A6B9,$1CA7A7BB, |
$0DA8A8A5,$0EA9A9A7,$0BAAAAA1,$08ABABA3,$01ACACAD,$02ADADAF,$07AEAEA9,$04AFAFAB, |
$25B0B095,$26B1B197,$23B2B291,$20B3B393,$29B4B49D,$2AB5B59F,$2FB6B699,$2CB7B79B, |
$3DB8B885,$3EB9B987,$3BBABA81,$38BBBB83,$31BCBC8D,$32BDBD8F,$37BEBE89,$34BFBF8B, |
$B5C0C075,$B6C1C177,$B3C2C271,$B0C3C373,$B9C4C47D,$BAC5C57F,$BFC6C679,$BCC7C77B, |
$ADC8C865,$AEC9C967,$ABCACA61,$A8CBCB63,$A1CCCC6D,$A2CDCD6F,$A7CECE69,$A4CFCF6B, |
$85D0D055,$86D1D157,$83D2D251,$80D3D353,$89D4D45D,$8AD5D55F,$8FD6D659,$8CD7D75B, |
$9DD8D845,$9ED9D947,$9BDADA41,$98DBDB43,$91DCDC4D,$92DDDD4F,$97DEDE49,$94DFDF4B, |
$D5E0E035,$D6E1E137,$D3E2E231,$D0E3E333,$D9E4E43D,$DAE5E53F,$DFE6E639,$DCE7E73B, |
$CDE8E825,$CEE9E927,$CBEAEA21,$C8EBEB23,$C1ECEC2D,$C2EDED2F,$C7EEEE29,$C4EFEF2B, |
$E5F0F015,$E6F1F117,$E3F2F211,$E0F3F313,$E9F4F41D,$EAF5F51F,$EFF6F619,$ECF7F71B, |
$FDF8F805,$FEF9F907,$FBFAFA01,$F8FBFB03,$F1FCFC0D,$F2FDFD0F,$F7FEFE09,$F4FFFF0B |
); |
Square_TD: array[0..3, 0..255] of UInt32 = ( |
($02BC68E3,$0C628555,$31233F2A,$F713AB61,$726DD498,$199ACB21,$61A4223C,$CD3D9D45, |
$23B4FD05,$5F07C42B,$C0012C9B,$0F80D93D,$745C6C48,$857E7FF9,$1FAB73F1,$0EDEEDB6, |
$ED6B3C28,$1A789749,$8D912A9F,$339F57C9,$AAA807A9,$7DED0DA5,$8F2D427C,$C9B04D76, |
$57E8914D,$CC63A9CE,$D296EEB4,$B6E12830,$B961F10D,$266719BD,$80AD9B41,$C76EA0C0, |
$41F28351,$34F0DB92,$FC1EA26F,$4CCE328F,$7333E013,$6DC6A769,$93646DE5,$FA2F1ABF, |
$B7BF1CBB,$B5037458,$4F2C6EE7,$96B7895D,$2A059CE8,$A3196644,$FB712E34,$6529F20F, |
$7A8281FE,$F12213B1,$EC3508A3,$7E0F51CD,$14A67AFF,$F893725C,$1297C22F,$C3E370F3, |
$1C492F99,$681543D1,$1B26A3C2,$B332CC88,$6F7ACF8A,$9F06E8B0,$1EF5477A,$DA79BBD2, |
$210895E6,$5CE59843,$0631B8D0,$AF7BE311,$5365417E,$102BAACC,$9CE4B4D8,$D4A75664, |
$59367CFB,$84204B72,$F64D9FEA,$DFAA5F6A,$CEDFC12D,$58684870,$81F3AFCA,$91D80506, |
$694B775A,$A528DE94,$4210DF39,$47C33B81,$A6CA82FC,$C5D2C823,$B26CF803,$9AD50C08, |
$40ACB7DA,$E109B97D,$2C342438,$A24752CF,$D174B2DC,$2B5BA863,$9555D535,$11759E47, |
$E2EBE515,$C630944B,$A8146F4A,$869C2391,$39CC6A4C,$4AFF8A5F,$4D900604,$BBDD99EE, |
$CA52111E,$18C4FFAA,$986964EB,$FFFCFE07,$015E348B,$BE0E7D56,$D99BE7BA,$32C16342, |
$7BDCB575,$17442697,$66CBAE67,$CB0C2595,$67959AEC,$D02A8657,$99375060,$05D3E4B8, |
$BA83AD65,$35AEEF19,$13C9F6A4,$A94A5BC1,$D61B3E87,$5E59F0A0,$5B8A1418,$3B7002AF, |
$76E004AB,$BF5049DD,$63184ADF,$56B6A5C6,$0A533D85,$371287FA,$A794B677,$7F516546, |
$09B161ED,$E9E6EC1B,$258545D5,$523B75F5,$3D41BA7F,$8842CE27,$434EEBB2,$97E9BDD6, |
$F39E7B52,$457F5362,$A0FB3A2C,$70D1BC7B,$6BF71FB9,$1D171B12,$C8EE79FD,$F07C273A, |
$D7450A0C,$7960DD96,$ABF63322,$891CFAAC,$5DBBACC8,$307D0BA1,$4BA1BED4,$940BE1BE, |
$540ACD25,$62467E54,$8211F3A2,$3EA3E617,$E6663526,$750258C3,$9B8B3883,$C2BD4478, |
$DC480302,$8BA0924F,$7CB3392E,$E584694E,$718F88F0,$27392D36,$3FFDD29C,$6E24FB01, |
$DD163789,$00000000,$E0578DF6,$6C9893E2,$15F84E74,$5AD42093,$E73801AD,$B45D40D3, |
$87C2171A,$2D6A10B3,$2FD67850,$3C1F8EF4,$A1A50EA7,$364CB371,$AE25D79A,$24DB715E, |
$50871D16,$D5F962EF,$9086318D,$161A121C,$CF81F5A6,$076F8C5B,$491DD637,$923A596E, |
$6477C684,$B83FC586,$F9CD46D7,$B0D090E0,$834FC729,$FD4096E4,$0B0D090E,$2056A16D, |
$22EAC98E,$2E884CDB,$8E7376F7,$BCB215B5,$C15F1810,$6AA92B32,$B18EA46B,$5554F9AE, |
$EE896040,$08EF5566,$442167E9,$BDEC213E,$77BE3020,$ADC78BF2,$29E7C080,$8CCF1E14, |
$4843E2BC,$8AFEA6C4,$D8C5D331,$60FA16B7,$9DBA8053,$F2C04FD9,$783EE91D,$3A2E3624, |
$DEF46BE1,$EFD754CB,$F4F1F709,$F5AFC382,$28B9F40B,$51D9299D,$38925EC7,$EB5A84F8, |
$E8B8D890,$0D3CB1DE,$048DD033,$03E25C68,$E4DA5DC5,$9E58DC3B,$469D0F0A,$D3C8DA3F, |
$DB278F59,$C48CFCA8,$AC99BF79,$4E725A6C,$FEA2CA8C,$E3B5D19E,$A476EA1F,$EA04B073), |
($BC68E302,$6285550C,$233F2A31,$13AB61F7,$6DD49872,$9ACB2119,$A4223C61,$3D9D45CD, |
$B4FD0523,$07C42B5F,$012C9BC0,$80D93D0F,$5C6C4874,$7E7FF985,$AB73F11F,$DEEDB60E, |
$6B3C28ED,$7897491A,$912A9F8D,$9F57C933,$A807A9AA,$ED0DA57D,$2D427C8F,$B04D76C9, |
$E8914D57,$63A9CECC,$96EEB4D2,$E12830B6,$61F10DB9,$6719BD26,$AD9B4180,$6EA0C0C7, |
$F2835141,$F0DB9234,$1EA26FFC,$CE328F4C,$33E01373,$C6A7696D,$646DE593,$2F1ABFFA, |
$BF1CBBB7,$037458B5,$2C6EE74F,$B7895D96,$059CE82A,$196644A3,$712E34FB,$29F20F65, |
$8281FE7A,$2213B1F1,$3508A3EC,$0F51CD7E,$A67AFF14,$93725CF8,$97C22F12,$E370F3C3, |
$492F991C,$1543D168,$26A3C21B,$32CC88B3,$7ACF8A6F,$06E8B09F,$F5477A1E,$79BBD2DA, |
$0895E621,$E598435C,$31B8D006,$7BE311AF,$65417E53,$2BAACC10,$E4B4D89C,$A75664D4, |
$367CFB59,$204B7284,$4D9FEAF6,$AA5F6ADF,$DFC12DCE,$68487058,$F3AFCA81,$D8050691, |
$4B775A69,$28DE94A5,$10DF3942,$C33B8147,$CA82FCA6,$D2C823C5,$6CF803B2,$D50C089A, |
$ACB7DA40,$09B97DE1,$3424382C,$4752CFA2,$74B2DCD1,$5BA8632B,$55D53595,$759E4711, |
$EBE515E2,$30944BC6,$146F4AA8,$9C239186,$CC6A4C39,$FF8A5F4A,$9006044D,$DD99EEBB, |
$52111ECA,$C4FFAA18,$6964EB98,$FCFE07FF,$5E348B01,$0E7D56BE,$9BE7BAD9,$C1634232, |
$DCB5757B,$44269717,$CBAE6766,$0C2595CB,$959AEC67,$2A8657D0,$37506099,$D3E4B805, |
$83AD65BA,$AEEF1935,$C9F6A413,$4A5BC1A9,$1B3E87D6,$59F0A05E,$8A14185B,$7002AF3B, |
$E004AB76,$5049DDBF,$184ADF63,$B6A5C656,$533D850A,$1287FA37,$94B677A7,$5165467F, |
$B161ED09,$E6EC1BE9,$8545D525,$3B75F552,$41BA7F3D,$42CE2788,$4EEBB243,$E9BDD697, |
$9E7B52F3,$7F536245,$FB3A2CA0,$D1BC7B70,$F71FB96B,$171B121D,$EE79FDC8,$7C273AF0, |
$450A0CD7,$60DD9679,$F63322AB,$1CFAAC89,$BBACC85D,$7D0BA130,$A1BED44B,$0BE1BE94, |
$0ACD2554,$467E5462,$11F3A282,$A3E6173E,$663526E6,$0258C375,$8B38839B,$BD4478C2, |
$480302DC,$A0924F8B,$B3392E7C,$84694EE5,$8F88F071,$392D3627,$FDD29C3F,$24FB016E, |
$163789DD,$00000000,$578DF6E0,$9893E26C,$F84E7415,$D420935A,$3801ADE7,$5D40D3B4, |
$C2171A87,$6A10B32D,$D678502F,$1F8EF43C,$A50EA7A1,$4CB37136,$25D79AAE,$DB715E24, |
$871D1650,$F962EFD5,$86318D90,$1A121C16,$81F5A6CF,$6F8C5B07,$1DD63749,$3A596E92, |
$77C68464,$3FC586B8,$CD46D7F9,$D090E0B0,$4FC72983,$4096E4FD,$0D090E0B,$56A16D20, |
$EAC98E22,$884CDB2E,$7376F78E,$B215B5BC,$5F1810C1,$A92B326A,$8EA46BB1,$54F9AE55, |
$896040EE,$EF556608,$2167E944,$EC213EBD,$BE302077,$C78BF2AD,$E7C08029,$CF1E148C, |
$43E2BC48,$FEA6C48A,$C5D331D8,$FA16B760,$BA80539D,$C04FD9F2,$3EE91D78,$2E36243A, |
$F46BE1DE,$D754CBEF,$F1F709F4,$AFC382F5,$B9F40B28,$D9299D51,$925EC738,$5A84F8EB, |
$B8D890E8,$3CB1DE0D,$8DD03304,$E25C6803,$DA5DC5E4,$58DC3B9E,$9D0F0A46,$C8DA3FD3, |
$278F59DB,$8CFCA8C4,$99BF79AC,$725A6C4E,$A2CA8CFE,$B5D19EE3,$76EA1FA4,$04B073EA), |
($68E302BC,$85550C62,$3F2A3123,$AB61F713,$D498726D,$CB21199A,$223C61A4,$9D45CD3D, |
$FD0523B4,$C42B5F07,$2C9BC001,$D93D0F80,$6C48745C,$7FF9857E,$73F11FAB,$EDB60EDE, |
$3C28ED6B,$97491A78,$2A9F8D91,$57C9339F,$07A9AAA8,$0DA57DED,$427C8F2D,$4D76C9B0, |
$914D57E8,$A9CECC63,$EEB4D296,$2830B6E1,$F10DB961,$19BD2667,$9B4180AD,$A0C0C76E, |
$835141F2,$DB9234F0,$A26FFC1E,$328F4CCE,$E0137333,$A7696DC6,$6DE59364,$1ABFFA2F, |
$1CBBB7BF,$7458B503,$6EE74F2C,$895D96B7,$9CE82A05,$6644A319,$2E34FB71,$F20F6529, |
$81FE7A82,$13B1F122,$08A3EC35,$51CD7E0F,$7AFF14A6,$725CF893,$C22F1297,$70F3C3E3, |
$2F991C49,$43D16815,$A3C21B26,$CC88B332,$CF8A6F7A,$E8B09F06,$477A1EF5,$BBD2DA79, |
$95E62108,$98435CE5,$B8D00631,$E311AF7B,$417E5365,$AACC102B,$B4D89CE4,$5664D4A7, |
$7CFB5936,$4B728420,$9FEAF64D,$5F6ADFAA,$C12DCEDF,$48705868,$AFCA81F3,$050691D8, |
$775A694B,$DE94A528,$DF394210,$3B8147C3,$82FCA6CA,$C823C5D2,$F803B26C,$0C089AD5, |
$B7DA40AC,$B97DE109,$24382C34,$52CFA247,$B2DCD174,$A8632B5B,$D5359555,$9E471175, |
$E515E2EB,$944BC630,$6F4AA814,$2391869C,$6A4C39CC,$8A5F4AFF,$06044D90,$99EEBBDD, |
$111ECA52,$FFAA18C4,$64EB9869,$FE07FFFC,$348B015E,$7D56BE0E,$E7BAD99B,$634232C1, |
$B5757BDC,$26971744,$AE6766CB,$2595CB0C,$9AEC6795,$8657D02A,$50609937,$E4B805D3, |
$AD65BA83,$EF1935AE,$F6A413C9,$5BC1A94A,$3E87D61B,$F0A05E59,$14185B8A,$02AF3B70, |
$04AB76E0,$49DDBF50,$4ADF6318,$A5C656B6,$3D850A53,$87FA3712,$B677A794,$65467F51, |
$61ED09B1,$EC1BE9E6,$45D52585,$75F5523B,$BA7F3D41,$CE278842,$EBB2434E,$BDD697E9, |
$7B52F39E,$5362457F,$3A2CA0FB,$BC7B70D1,$1FB96BF7,$1B121D17,$79FDC8EE,$273AF07C, |
$0A0CD745,$DD967960,$3322ABF6,$FAAC891C,$ACC85DBB,$0BA1307D,$BED44BA1,$E1BE940B, |
$CD25540A,$7E546246,$F3A28211,$E6173EA3,$3526E666,$58C37502,$38839B8B,$4478C2BD, |
$0302DC48,$924F8BA0,$392E7CB3,$694EE584,$88F0718F,$2D362739,$D29C3FFD,$FB016E24, |
$3789DD16,$00000000,$8DF6E057,$93E26C98,$4E7415F8,$20935AD4,$01ADE738,$40D3B45D, |
$171A87C2,$10B32D6A,$78502FD6,$8EF43C1F,$0EA7A1A5,$B371364C,$D79AAE25,$715E24DB, |
$1D165087,$62EFD5F9,$318D9086,$121C161A,$F5A6CF81,$8C5B076F,$D637491D,$596E923A, |
$C6846477,$C586B83F,$46D7F9CD,$90E0B0D0,$C729834F,$96E4FD40,$090E0B0D,$A16D2056, |
$C98E22EA,$4CDB2E88,$76F78E73,$15B5BCB2,$1810C15F,$2B326AA9,$A46BB18E,$F9AE5554, |
$6040EE89,$556608EF,$67E94421,$213EBDEC,$302077BE,$8BF2ADC7,$C08029E7,$1E148CCF, |
$E2BC4843,$A6C48AFE,$D331D8C5,$16B760FA,$80539DBA,$4FD9F2C0,$E91D783E,$36243A2E, |
$6BE1DEF4,$54CBEFD7,$F709F4F1,$C382F5AF,$F40B28B9,$299D51D9,$5EC73892,$84F8EB5A, |
$D890E8B8,$B1DE0D3C,$D033048D,$5C6803E2,$5DC5E4DA,$DC3B9E58,$0F0A469D,$DA3FD3C8, |
$8F59DB27,$FCA8C48C,$BF79AC99,$5A6C4E72,$CA8CFEA2,$D19EE3B5,$EA1FA476,$B073EA04), |
($E302BC68,$550C6285,$2A31233F,$61F713AB,$98726DD4,$21199ACB,$3C61A422,$45CD3D9D, |
$0523B4FD,$2B5F07C4,$9BC0012C,$3D0F80D9,$48745C6C,$F9857E7F,$F11FAB73,$B60EDEED, |
$28ED6B3C,$491A7897,$9F8D912A,$C9339F57,$A9AAA807,$A57DED0D,$7C8F2D42,$76C9B04D, |
$4D57E891,$CECC63A9,$B4D296EE,$30B6E128,$0DB961F1,$BD266719,$4180AD9B,$C0C76EA0, |
$5141F283,$9234F0DB,$6FFC1EA2,$8F4CCE32,$137333E0,$696DC6A7,$E593646D,$BFFA2F1A, |
$BBB7BF1C,$58B50374,$E74F2C6E,$5D96B789,$E82A059C,$44A31966,$34FB712E,$0F6529F2, |
$FE7A8281,$B1F12213,$A3EC3508,$CD7E0F51,$FF14A67A,$5CF89372,$2F1297C2,$F3C3E370, |
$991C492F,$D1681543,$C21B26A3,$88B332CC,$8A6F7ACF,$B09F06E8,$7A1EF547,$D2DA79BB, |
$E6210895,$435CE598,$D00631B8,$11AF7BE3,$7E536541,$CC102BAA,$D89CE4B4,$64D4A756, |
$FB59367C,$7284204B,$EAF64D9F,$6ADFAA5F,$2DCEDFC1,$70586848,$CA81F3AF,$0691D805, |
$5A694B77,$94A528DE,$394210DF,$8147C33B,$FCA6CA82,$23C5D2C8,$03B26CF8,$089AD50C, |
$DA40ACB7,$7DE109B9,$382C3424,$CFA24752,$DCD174B2,$632B5BA8,$359555D5,$4711759E, |
$15E2EBE5,$4BC63094,$4AA8146F,$91869C23,$4C39CC6A,$5F4AFF8A,$044D9006,$EEBBDD99, |
$1ECA5211,$AA18C4FF,$EB986964,$07FFFCFE,$8B015E34,$56BE0E7D,$BAD99BE7,$4232C163, |
$757BDCB5,$97174426,$6766CBAE,$95CB0C25,$EC67959A,$57D02A86,$60993750,$B805D3E4, |
$65BA83AD,$1935AEEF,$A413C9F6,$C1A94A5B,$87D61B3E,$A05E59F0,$185B8A14,$AF3B7002, |
$AB76E004,$DDBF5049,$DF63184A,$C656B6A5,$850A533D,$FA371287,$77A794B6,$467F5165, |
$ED09B161,$1BE9E6EC,$D5258545,$F5523B75,$7F3D41BA,$278842CE,$B2434EEB,$D697E9BD, |
$52F39E7B,$62457F53,$2CA0FB3A,$7B70D1BC,$B96BF71F,$121D171B,$FDC8EE79,$3AF07C27, |
$0CD7450A,$967960DD,$22ABF633,$AC891CFA,$C85DBBAC,$A1307D0B,$D44BA1BE,$BE940BE1, |
$25540ACD,$5462467E,$A28211F3,$173EA3E6,$26E66635,$C3750258,$839B8B38,$78C2BD44, |
$02DC4803,$4F8BA092,$2E7CB339,$4EE58469,$F0718F88,$3627392D,$9C3FFDD2,$016E24FB, |
$89DD1637,$00000000,$F6E0578D,$E26C9893,$7415F84E,$935AD420,$ADE73801,$D3B45D40, |
$1A87C217,$B32D6A10,$502FD678,$F43C1F8E,$A7A1A50E,$71364CB3,$9AAE25D7,$5E24DB71, |
$1650871D,$EFD5F962,$8D908631,$1C161A12,$A6CF81F5,$5B076F8C,$37491DD6,$6E923A59, |
$846477C6,$86B83FC5,$D7F9CD46,$E0B0D090,$29834FC7,$E4FD4096,$0E0B0D09,$6D2056A1, |
$8E22EAC9,$DB2E884C,$F78E7376,$B5BCB215,$10C15F18,$326AA92B,$6BB18EA4,$AE5554F9, |
$40EE8960,$6608EF55,$E9442167,$3EBDEC21,$2077BE30,$F2ADC78B,$8029E7C0,$148CCF1E, |
$BC4843E2,$C48AFEA6,$31D8C5D3,$B760FA16,$539DBA80,$D9F2C04F,$1D783EE9,$243A2E36, |
$E1DEF46B,$CBEFD754,$09F4F1F7,$82F5AFC3,$0B28B9F4,$9D51D929,$C738925E,$F8EB5A84, |
$90E8B8D8,$DE0D3CB1,$33048DD0,$6803E25C,$C5E4DA5D,$3B9E58DC,$0A469D0F,$3FD3C8DA, |
$59DB278F,$A8C48CFC,$79AC99BF,$6C4E725A,$8CFEA2CA,$9EE3B5D1,$1FA476EA,$73EA04B0) |
); |
Cast128_Data: array[0..3, 0..255] of UInt32 = ( |
($30FB40D4,$9FA0FF0B,$6BECCD2F,$3F258C7A,$1E213F2F,$9C004DD3,$6003E540,$CF9FC949, |
$BFD4AF27,$88BBBDB5,$E2034090,$98D09675,$6E63A0E0,$15C361D2,$C2E7661D,$22D4FF8E, |
$28683B6F,$C07FD059,$FF2379C8,$775F50E2,$43C340D3,$DF2F8656,$887CA41A,$A2D2BD2D, |
$A1C9E0D6,$346C4819,$61B76D87,$22540F2F,$2ABE32E1,$AA54166B,$22568E3A,$A2D341D0, |
$66DB40C8,$A784392F,$004DFF2F,$2DB9D2DE,$97943FAC,$4A97C1D8,$527644B7,$B5F437A7, |
$B82CBAEF,$D751D159,$6FF7F0ED,$5A097A1F,$827B68D0,$90ECF52E,$22B0C054,$BC8E5935, |
$4B6D2F7F,$50BB64A2,$D2664910,$BEE5812D,$B7332290,$E93B159F,$B48EE411,$4BFF345D, |
$FD45C240,$AD31973F,$C4F6D02E,$55FC8165,$D5B1CAAD,$A1AC2DAE,$A2D4B76D,$C19B0C50, |
$882240F2,$0C6E4F38,$A4E4BFD7,$4F5BA272,$564C1D2F,$C59C5319,$B949E354,$B04669FE, |
$B1B6AB8A,$C71358DD,$6385C545,$110F935D,$57538AD5,$6A390493,$E63D37E0,$2A54F6B3, |
$3A787D5F,$6276A0B5,$19A6FCDF,$7A42206A,$29F9D4D5,$F61B1891,$BB72275E,$AA508167, |
$38901091,$C6B505EB,$84C7CB8C,$2AD75A0F,$874A1427,$A2D1936B,$2AD286AF,$AA56D291, |
$D7894360,$425C750D,$93B39E26,$187184C9,$6C00B32D,$73E2BB14,$A0BEBC3C,$54623779, |
$64459EAB,$3F328B82,$7718CF82,$59A2CEA6,$04EE002E,$89FE78E6,$3FAB0950,$325FF6C2, |
$81383F05,$6963C5C8,$76CB5AD6,$D49974C9,$CA180DCF,$380782D5,$C7FA5CF6,$8AC31511, |
$35E79E13,$47DA91D0,$F40F9086,$A7E2419E,$31366241,$051EF495,$AA573B04,$4A805D8D, |
$548300D0,$00322A3C,$BF64CDDF,$BA57A68E,$75C6372B,$50AFD341,$A7C13275,$915A0BF5, |
$6B54BFAB,$2B0B1426,$AB4CC9D7,$449CCD82,$F7FBF265,$AB85C5F3,$1B55DB94,$AAD4E324, |
$CFA4BD3F,$2DEAA3E2,$9E204D02,$C8BD25AC,$EADF55B3,$D5BD9E98,$E31231B2,$2AD5AD6C, |
$954329DE,$ADBE4528,$D8710F69,$AA51C90F,$AA786BF6,$22513F1E,$AA51A79B,$2AD344CC, |
$7B5A41F0,$D37CFBAD,$1B069505,$41ECE491,$B4C332E6,$032268D4,$C9600ACC,$CE387E6D, |
$BF6BB16C,$6A70FB78,$0D03D9C9,$D4DF39DE,$E01063DA,$4736F464,$5AD328D8,$B347CC96, |
$75BB0FC3,$98511BFB,$4FFBCC35,$B58BCF6A,$E11F0ABC,$BFC5FE4A,$A70AEC10,$AC39570A, |
$3F04442F,$6188B153,$E0397A2E,$5727CB79,$9CEB418F,$1CACD68D,$2AD37C96,$0175CB9D, |
$C69DFF09,$C75B65F0,$D9DB40D8,$EC0E7779,$4744EAD4,$B11C3274,$DD24CB9E,$7E1C54BD, |
$F01144F9,$D2240EB1,$9675B3FD,$A3AC3755,$D47C27AF,$51C85F4D,$56907596,$A5BB15E6, |
$580304F0,$CA042CF1,$011A37EA,$8DBFAADB,$35BA3E4A,$3526FFA0,$C37B4D09,$BC306ED9, |
$98A52666,$5648F725,$FF5E569D,$0CED63D0,$7C63B2CF,$700B45E1,$D5EA50F1,$85A92872, |
$AF1FBDA7,$D4234870,$A7870BF3,$2D3B4D79,$42E04198,$0CD0EDE7,$26470DB8,$F881814C, |
$474D6AD7,$7C0C5E5C,$D1231959,$381B7298,$F5D2F4DB,$AB838653,$6E2F1E23,$83719C9E, |
$BD91E046,$9A56456E,$DC39200C,$20C8C571,$962BDA1C,$E1E696FF,$B141AB08,$7CCA89B9, |
$1A69E783,$02CC4843,$A2F7C579,$429EF47D,$427B169C,$5AC9F049,$DD8F0F00,$5C8165BF), |
($1F201094,$EF0BA75B,$69E3CF7E,$393F4380,$FE61CF7A,$EEC5207A,$55889C94,$72FC0651, |
$ADA7EF79,$4E1D7235,$D55A63CE,$DE0436BA,$99C430EF,$5F0C0794,$18DCDB7D,$A1D6EFF3, |
$A0B52F7B,$59E83605,$EE15B094,$E9FFD909,$DC440086,$EF944459,$BA83CCB3,$E0C3CDFB, |
$D1DA4181,$3B092AB1,$F997F1C1,$A5E6CF7B,$01420DDB,$E4E7EF5B,$25A1FF41,$E180F806, |
$1FC41080,$179BEE7A,$D37AC6A9,$FE5830A4,$98DE8B7F,$77E83F4E,$79929269,$24FA9F7B, |
$E113C85B,$ACC40083,$D7503525,$F7EA615F,$62143154,$0D554B63,$5D681121,$C866C359, |
$3D63CF73,$CEE234C0,$D4D87E87,$5C672B21,$071F6181,$39F7627F,$361E3084,$E4EB573B, |
$602F64A4,$D63ACD9C,$1BBC4635,$9E81032D,$2701F50C,$99847AB4,$A0E3DF79,$BA6CF38C, |
$10843094,$2537A95E,$F46F6FFE,$A1FF3B1F,$208CFB6A,$8F458C74,$D9E0A227,$4EC73A34, |
$FC884F69,$3E4DE8DF,$EF0E0088,$3559648D,$8A45388C,$1D804366,$721D9BFD,$A58684BB, |
$E8256333,$844E8212,$128D8098,$FED33FB4,$CE280AE1,$27E19BA5,$D5A6C252,$E49754BD, |
$C5D655DD,$EB667064,$77840B4D,$A1B6A801,$84DB26A9,$E0B56714,$21F043B7,$E5D05860, |
$54F03084,$066FF472,$A31AA153,$DADC4755,$B5625DBF,$68561BE6,$83CA6B94,$2D6ED23B, |
$ECCF01DB,$A6D3D0BA,$B6803D5C,$AF77A709,$33B4A34C,$397BC8D6,$5EE22B95,$5F0E5304, |
$81ED6F61,$20E74364,$B45E1378,$DE18639B,$881CA122,$B96726D1,$8049A7E8,$22B7DA7B, |
$5E552D25,$5272D237,$79D2951C,$C60D894C,$488CB402,$1BA4FE5B,$A4B09F6B,$1CA815CF, |
$A20C3005,$8871DF63,$B9DE2FCB,$0CC6C9E9,$0BEEFF53,$E3214517,$B4542835,$9F63293C, |
$EE41E729,$6E1D2D7C,$50045286,$1E6685F3,$F33401C6,$30A22C95,$31A70850,$60930F13, |
$73F98417,$A1269859,$EC645C44,$52C877A9,$CDFF33A6,$A02B1741,$7CBAD9A2,$2180036F, |
$50D99C08,$CB3F4861,$C26BD765,$64A3F6AB,$80342676,$25A75E7B,$E4E6D1FC,$20C710E6, |
$CDF0B680,$17844D3B,$31EEF84D,$7E0824E4,$2CCB49EB,$846A3BAE,$8FF77888,$EE5D60F6, |
$7AF75673,$2FDD5CDB,$A11631C1,$30F66F43,$B3FAEC54,$157FD7FA,$EF8579CC,$D152DE58, |
$DB2FFD5E,$8F32CE19,$306AF97A,$02F03EF8,$99319AD5,$C242FA0F,$A7E3EBB0,$C68E4906, |
$B8DA230C,$80823028,$DCDEF3C8,$D35FB171,$088A1BC8,$BEC0C560,$61A3C9E8,$BCA8F54D, |
$C72FEFFA,$22822E99,$82C570B4,$D8D94E89,$8B1C34BC,$301E16E6,$273BE979,$B0FFEAA6, |
$61D9B8C6,$00B24869,$B7FFCE3F,$08DC283B,$43DAF65A,$F7E19798,$7619B72F,$8F1C9BA4, |
$DC8637A0,$16A7D3B1,$9FC393B7,$A7136EEB,$C6BCC63E,$1A513742,$EF6828BC,$520365D6, |
$2D6A77AB,$3527ED4B,$821FD216,$095C6E2E,$DB92F2FB,$5EEA29CB,$145892F5,$91584F7F, |
$5483697B,$2667A8CC,$85196048,$8C4BACEA,$833860D4,$0D23E0F9,$6C387E8A,$0AE6D249, |
$B284600C,$D835731D,$DCB1C647,$AC4C56EA,$3EBD81B3,$230EABB0,$6438BC87,$F0B5B1FA, |
$8F5EA2B3,$FC184642,$0A036B7A,$4FB089BD,$649DA589,$A345415E,$5C038323,$3E5D3BB9, |
$43D79572,$7E6DD07C,$06DFDF1E,$6C6CC4EF,$7160A539,$73BFBE70,$83877605,$4523ECF1), |
($8DEFC240,$25FA5D9F,$EB903DBF,$E810C907,$47607FFF,$369FE44B,$8C1FC644,$AECECA90, |
$BEB1F9BF,$EEFBCAEA,$E8CF1950,$51DF07AE,$920E8806,$F0AD0548,$E13C8D83,$927010D5, |
$11107D9F,$07647DB9,$B2E3E4D4,$3D4F285E,$B9AFA820,$FADE82E0,$A067268B,$8272792E, |
$553FB2C0,$489AE22B,$D4EF9794,$125E3FBC,$21FFFCEE,$825B1BFD,$9255C5ED,$1257A240, |
$4E1A8302,$BAE07FFF,$528246E7,$8E57140E,$3373F7BF,$8C9F8188,$A6FC4EE8,$C982B5A5, |
$A8C01DB7,$579FC264,$67094F31,$F2BD3F5F,$40FFF7C1,$1FB78DFC,$8E6BD2C1,$437BE59B, |
$99B03DBF,$B5DBC64B,$638DC0E6,$55819D99,$A197C81C,$4A012D6E,$C5884A28,$CCC36F71, |
$B843C213,$6C0743F1,$8309893C,$0FEDDD5F,$2F7FE850,$D7C07F7E,$02507FBF,$5AFB9A04, |
$A747D2D0,$1651192E,$AF70BF3E,$58C31380,$5F98302E,$727CC3C4,$0A0FB402,$0F7FEF82, |
$8C96FDAD,$5D2C2AAE,$8EE99A49,$50DA88B8,$8427F4A0,$1EAC5790,$796FB449,$8252DC15, |
$EFBD7D9B,$A672597D,$ADA840D8,$45F54504,$FA5D7403,$E83EC305,$4F91751A,$925669C2, |
$23EFE941,$A903F12E,$60270DF2,$0276E4B6,$94FD6574,$927985B2,$8276DBCB,$02778176, |
$F8AF918D,$4E48F79E,$8F616DDF,$E29D840E,$842F7D83,$340CE5C8,$96BBB682,$93B4B148, |
$EF303CAB,$984FAF28,$779FAF9B,$92DC560D,$224D1E20,$8437AA88,$7D29DC96,$2756D3DC, |
$8B907CEE,$B51FD240,$E7C07CE3,$E566B4A1,$C3E9615E,$3CF8209D,$6094D1E3,$CD9CA341, |
$5C76460E,$00EA983B,$D4D67881,$FD47572C,$F76CEDD9,$BDA8229C,$127DADAA,$438A074E, |
$1F97C090,$081BDB8A,$93A07EBE,$B938CA15,$97B03CFF,$3DC2C0F8,$8D1AB2EC,$64380E51, |
$68CC7BFB,$D90F2788,$12490181,$5DE5FFD4,$DD7EF86A,$76A2E214,$B9A40368,$925D958F, |
$4B39FFFA,$BA39AEE9,$A4FFD30B,$FAF7933B,$6D498623,$193CBCFA,$27627545,$825CF47A, |
$61BD8BA0,$D11E42D1,$CEAD04F4,$127EA392,$10428DB7,$8272A972,$9270C4A8,$127DE50B, |
$285BA1C8,$3C62F44F,$35C0EAA5,$E805D231,$428929FB,$B4FCDF82,$4FB66A53,$0E7DC15B, |
$1F081FAB,$108618AE,$FCFD086D,$F9FF2889,$694BCC11,$236A5CAE,$12DECA4D,$2C3F8CC5, |
$D2D02DFE,$F8EF5896,$E4CF52DA,$95155B67,$494A488C,$B9B6A80C,$5C8F82BC,$89D36B45, |
$3A609437,$EC00C9A9,$44715253,$0A874B49,$D773BC40,$7C34671C,$02717EF6,$4FEB5536, |
$A2D02FFF,$D2BF60C4,$D43F03C0,$50B4EF6D,$07478CD1,$006E1888,$A2E53F55,$B9E6D4BC, |
$A2048016,$97573833,$D7207D67,$DE0F8F3D,$72F87B33,$ABCC4F33,$7688C55D,$7B00A6B0, |
$947B0001,$570075D2,$F9BB88F8,$8942019E,$4264A5FF,$856302E0,$72DBD92B,$EE971B69, |
$6EA22FDE,$5F08AE2B,$AF7A616D,$E5C98767,$CF1FEBD2,$61EFC8C2,$F1AC2571,$CC8239C2, |
$67214CB8,$B1E583D1,$B7DC3E62,$7F10BDCE,$F90A5C38,$0FF0443D,$606E6DC6,$60543A49, |
$5727C148,$2BE98A1D,$8AB41738,$20E1BE24,$AF96DA0F,$68458425,$99833BE5,$600D457D, |
$282F9350,$8334B362,$D91D1120,$2B6D8DA0,$642B1E31,$9C305A00,$52BCE688,$1B03588A, |
$F7BAEFD5,$4142ED9C,$A4315C11,$83323EC5,$DFEF4636,$A133C501,$E9D3531C,$EE353783), |
($9DB30420,$1FB6E9DE,$A7BE7BEF,$D273A298,$4A4F7BDB,$64AD8C57,$85510443,$FA020ED1, |
$7E287AFF,$E60FB663,$095F35A1,$79EBF120,$FD059D43,$6497B7B1,$F3641F63,$241E4ADF, |
$28147F5F,$4FA2B8CD,$C9430040,$0CC32220,$FDD30B30,$C0A5374F,$1D2D00D9,$24147B15, |
$EE4D111A,$0FCA5167,$71FF904C,$2D195FFE,$1A05645F,$0C13FEFE,$081B08CA,$05170121, |
$80530100,$E83E5EFE,$AC9AF4F8,$7FE72701,$D2B8EE5F,$06DF4261,$BB9E9B8A,$7293EA25, |
$CE84FFDF,$F5718801,$3DD64B04,$A26F263B,$7ED48400,$547EEBE6,$446D4CA0,$6CF3D6F5, |
$2649ABDF,$AEA0C7F5,$36338CC1,$503F7E93,$D3772061,$11B638E1,$72500E03,$F80EB2BB, |
$ABE0502E,$EC8D77DE,$57971E81,$E14F6746,$C9335400,$6920318F,$081DBB99,$FFC304A5, |
$4D351805,$7F3D5CE3,$A6C866C6,$5D5BCCA9,$DAEC6FEA,$9F926F91,$9F46222F,$3991467D, |
$A5BF6D8E,$1143C44F,$43958302,$D0214EEB,$022083B8,$3FB6180C,$18F8931E,$281658E6, |
$26486E3E,$8BD78A70,$7477E4C1,$B506E07C,$F32D0A25,$79098B02,$E4EABB81,$28123B23, |
$69DEAD38,$1574CA16,$DF871B62,$211C40B7,$A51A9EF9,$0014377B,$041E8AC8,$09114003, |
$BD59E4D2,$E3D156D5,$4FE876D5,$2F91A340,$557BE8DE,$00EAE4A7,$0CE5C2EC,$4DB4BBA6, |
$E756BDFF,$DD3369AC,$EC17B035,$06572327,$99AFC8B0,$56C8C391,$6B65811C,$5E146119, |
$6E85CB75,$BE07C002,$C2325577,$893FF4EC,$5BBFC92D,$D0EC3B25,$B7801AB7,$8D6D3B24, |
$20C763EF,$C366A5FC,$9C382880,$0ACE3205,$AAC9548A,$ECA1D7C7,$041AFA32,$1D16625A, |
$6701902C,$9B757A54,$31D477F7,$9126B031,$36CC6FDB,$C70B8B46,$D9E66A48,$56E55A79, |
$026A4CEB,$52437EFF,$2F8F76B4,$0DF980A5,$8674CDE3,$EDDA04EB,$17A9BE04,$2C18F4DF, |
$B7747F9D,$AB2AF7B4,$EFC34D20,$2E096B7C,$1741A254,$E5B6A035,$213D42F6,$2C1C7C26, |
$61C2F50F,$6552DAF9,$D2C231F8,$25130F69,$D8167FA2,$0418F2C8,$001A96A6,$0D1526AB, |
$63315C21,$5E0A72EC,$49BAFEFD,$187908D9,$8D0DBD86,$311170A7,$3E9B640C,$CC3E10D7, |
$D5CAD3B6,$0CAEC388,$F73001E1,$6C728AFF,$71EAE2A1,$1F9AF36E,$CFCBD12F,$C1DE8417, |
$AC07BE6B,$CB44A1D8,$8B9B0F56,$013988C3,$B1C52FCA,$B4BE31CD,$D8782806,$12A3A4E2, |
$6F7DE532,$58FD7EB6,$D01EE900,$24ADFFC2,$F4990FC5,$9711AAC5,$001D7B95,$82E5E7D2, |
$109873F6,$00613096,$C32D9521,$ADA121FF,$29908415,$7FBB977F,$AF9EB3DB,$29C9ED2A, |
$5CE2A465,$A730F32C,$D0AA3FE8,$8A5CC091,$D49E2CE7,$0CE454A9,$D60ACD86,$015F1919, |
$77079103,$DEA03AF6,$78A8565E,$DEE356DF,$21F05CBE,$8B75E387,$B3C50651,$B8A5C3EF, |
$D8EEB6D2,$E523BE77,$C2154529,$2F69EFDF,$AFE67AFB,$F470C4B2,$F3E0EB5B,$D6CC9876, |
$39E4460C,$1FDA8538,$1987832F,$CA007367,$A99144F8,$296B299E,$492FC295,$9266BEAB, |
$B5676E69,$9BD3DDDA,$DF7E052F,$DB25701C,$1B5E51EE,$F65324E6,$6AFCE36C,$0316CC04, |
$8644213E,$B7DC59D0,$7965291F,$CCD6FD43,$41823979,$932BCDF6,$B657C34D,$4EDFD282, |
$7AE5290C,$3CB9536B,$851E20FE,$9833557E,$13ECF0B0,$D3FFB372,$3F85C5C1,$0AEF7ED2) |
); |
Cast128_Key: array[0..3, 0..255] of UInt32 = ( |
($7EC90C04,$2C6E74B9,$9B0E66DF,$A6337911,$B86A7FFF,$1DD358F5,$44DD9D44,$1731167F, |
$08FBF1FA,$E7F511CC,$D2051B00,$735ABA00,$2AB722D8,$386381CB,$ACF6243A,$69BEFD7A, |
$E6A2E77F,$F0C720CD,$C4494816,$CCF5C180,$38851640,$15B0A848,$E68B18CB,$4CAADEFF, |
$5F480A01,$0412B2AA,$259814FC,$41D0EFE2,$4E40B48D,$248EB6FB,$8DBA1CFE,$41A99B02, |
$1A550A04,$BA8F65CB,$7251F4E7,$95A51725,$C106ECD7,$97A5980A,$C539B9AA,$4D79FE6A, |
$F2F3F763,$68AF8040,$ED0C9E56,$11B4958B,$E1EB5A88,$8709E6B0,$D7E07156,$4E29FEA7, |
$6366E52D,$02D1C000,$C4AC8E05,$9377F571,$0C05372A,$578535F2,$2261BE02,$D642A0C9, |
$DF13A280,$74B55BD2,$682199C0,$D421E5EC,$53FB3CE8,$C8ADEDB3,$28A87FC9,$3D959981, |
$5C1FF900,$FE38D399,$0C4EFF0B,$062407EA,$AA2F4FB1,$4FB96976,$90C79505,$B0A8A774, |
$EF55A1FF,$E59CA2C2,$A6B62D27,$E66A4263,$DF65001F,$0EC50966,$DFDD55BC,$29DE0655, |
$911E739A,$17AF8975,$32C7911C,$89F89468,$0D01E980,$524755F4,$03B63CC9,$0CC844B2, |
$BCF3F0AA,$87AC36E9,$E53A7426,$01B3D82B,$1A9E7449,$64EE2D7E,$CDDBB1DA,$01C94910, |
$B868BF80,$0D26F3FD,$9342EDE7,$04A5C284,$636737B6,$50F5B616,$F24766E3,$8ECA36C1, |
$136E05DB,$FEF18391,$FB887A37,$D6E7F7D4,$C7FB7DC9,$3063FCDF,$B6F589DE,$EC2941DA, |
$26E46695,$B7566419,$F654EFC5,$D08D58B7,$48925401,$C1BACB7F,$E5FF550F,$B6083049, |
$5BB5D0E8,$87D72E5A,$AB6A6EE1,$223A66CE,$C62BF3CD,$9E0885F9,$68CB3E47,$086C010F, |
$A21DE820,$D18B69DE,$F3F65777,$FA02C3F6,$407EDAC3,$CBB3D550,$1793084D,$B0D70EBA, |
$0AB378D5,$D951FB0C,$DED7DA56,$4124BBE4,$94CA0B56,$0F5755D1,$E0E1E56E,$6184B5BE, |
$580A249F,$94F74BC0,$E327888E,$9F7B5561,$C3DC0280,$05687715,$646C6BD7,$44904DB3, |
$66B4F0A3,$C0F1648A,$697ED5AF,$49E92FF6,$309E374F,$2CB6356A,$85808573,$4991F840, |
$76F0AE02,$083BE84D,$28421C9A,$44489406,$736E4CB8,$C1092910,$8BC95FC6,$7D869CF4, |
$134F616F,$2E77118D,$B31B2BE1,$AA90B472,$3CA5D717,$7D161BBA,$9CAD9010,$AF462BA2, |
$9FE459D2,$45D34559,$D9F2DA13,$DBC65487,$F3E4F94E,$176D486F,$097C13EA,$631DA5C7, |
$445F7382,$175683F4,$CDC66A97,$70BE0288,$B3CDCF72,$6E5DD2F3,$20936079,$459B80A5, |
$BE60E2DB,$A9C23101,$EBA5315C,$224E42F2,$1C5C1572,$F6721B2C,$1AD2FFF3,$8C25404E, |
$324ED72F,$4067B7FD,$0523138E,$5CA3BC78,$DC0FD66E,$75922283,$784D6B17,$58EBB16E, |
$44094F85,$3F481D87,$FCFEAE7B,$77B5FF76,$8C2302BF,$AAF47556,$5F46B02A,$2B092801, |
$3D38F5F7,$0CA81F36,$52AF4A8A,$66D5E7C0,$DF3B0874,$95055110,$1B5AD7A8,$F61ED5AD, |
$6CF6E479,$20758184,$D0CEFA65,$88F7BE58,$4A046826,$0FF6F8F3,$A09C7F70,$5346ABA0, |
$5CE96C28,$E176EDA3,$6BAC307F,$376829D2,$85360FA9,$17E3FE2A,$24B79767,$F5A96B20, |
$D6CD2595,$68FF1EBF,$7555442C,$F19F06BE,$F9E0659A,$EEB9491D,$34010718,$BB30CAB8, |
$E822FE15,$88570983,$750E6249,$DA627E55,$5E76FFA8,$B1534546,$6D47DE08,$EFE9E7D4), |
($F6FA8F9D,$2CAC6CE1,$4CA34867,$E2337F7C,$95DB08E7,$016843B4,$ECED5CBC,$325553AC, |
$BF9F0960,$DFA1E2ED,$83F0579D,$63ED86B9,$1AB6A6B8,$DE5EBE39,$F38FF732,$8989B138, |
$33F14961,$C01937BD,$F506C6DA,$E4625E7E,$A308EA99,$4E23E33C,$79CBD7CC,$48A14367, |
$A3149619,$FEC94BD5,$A114174A,$EAA01866,$A084DB2D,$09A8486F,$A888614A,$2900AF98, |
$01665991,$E1992863,$C8F30C60,$2E78EF3C,$D0D51932,$CF0FEC14,$F7CA07D2,$D0A82072, |
$FD41197E,$9305A6B0,$E86BE3DA,$74BED3CD,$372DA53C,$4C7F4448,$DAB5D440,$6DBA0EC3, |
$083919A7,$9FBAEED9,$49DBCFB0,$4E670C53,$5C3D9C01,$64BDB941,$2C0E636A,$BA7DD9CD, |
$EA6F7388,$E70BC762,$35F29ADB,$5C4CDD8D,$F0D48D8C,$B88153E2,$08A19866,$1AE2EAC8, |
$284CAF89,$AA928223,$9334BE53,$3B3A21BF,$16434BE3,$9AEA3906,$EFE8C36E,$F890CDD9, |
$80226DAE,$C340A4A3,$DF7E9C09,$A694A807,$5B7C5ECC,$221DB3A6,$9A69A02F,$68818A54, |
$CEB2296F,$53C0843A,$FE893655,$25BFE68A,$B4628ABC,$CF222EBF,$25AC6F48,$A9A99387, |
$53BDDB65,$E76FFBE7,$E967FD78,$0BA93563,$8E342BC1,$E8A11BE9,$4980740D,$C8087DFC, |
$8DE4BF99,$A11101A0,$7FD37975,$DA5A26C0,$E81F994F,$9528CD89,$FD339FED,$B87834BF, |
$5F04456D,$22258698,$C9C4C83B,$2DC156BE,$4F628DAA,$57F55EC5,$E2220ABE,$D2916EBF, |
$4EC75B95,$24F2C3C0,$42D15D99,$CD0D7FA0,$7B6E27FF,$A8DC8AF0,$7345C106,$F41E232F, |
$35162386,$E6EA8926,$3333B094,$157EC6F2,$372B74AF,$692573E4,$E9A9D848,$F3160289, |
$3A62EF1D,$A787E238,$F3A5F676,$74364853,$20951063,$4576698D,$B6FAD407,$592AF950, |
$36F73523,$4CFB6E87,$7DA4CEC0,$6C152DAA,$CB0396A8,$C50DFE5D,$FCD707AB,$0921C42F, |
$89DFF0BB,$5FE2BE78,$448F4F33,$754613C9,$2B05D08D,$48B9D585,$DC049441,$C8098F9B, |
$7DEDE786,$C39A3373,$42410005,$6A091751,$0EF3C8A6,$890072D6,$28207682,$A9A9F7BE, |
$BF32679D,$D45B5B75,$B353FD00,$CBB0E358,$830F220A,$1F8FB214,$D372CF08,$CC3C4A13, |
$8CF63166,$061C87BE,$88C98F88,$6062E397,$47CF8E7A,$B6C85283,$3CC2ACFB,$3FC06976, |
$4E8F0252,$64D8314D,$DA3870E3,$1E665459,$C10908F0,$513021A5,$6C5B68B7,$822F8AA0, |
$3007CD3E,$74719EEF,$DC872681,$073340D4,$7E432FD9,$0C5EC241,$8809286C,$F592D891, |
$08A930F6,$957EF305,$B7FBFFBD,$C266E96F,$6FE4AC98,$B173ECC0,$BC60B42A,$953498DA, |
$FBA1AE12,$2D4BD736,$0F25FAAB,$A4F3FCEB,$E2969123,$257F0C3D,$9348AF49,$361400BC, |
$E8816F4A,$3814F200,$A3F94043,$9C7A54C2,$BC704F57,$DA41E7F9,$C25AD33A,$54F4A084, |
$B17F5505,$59357CBE,$EDBD15C8,$7F97C5AB,$BA5AC7B5,$B6F6DEAF,$3A479C3A,$5302DA25, |
$653D7E6A,$54268D49,$51A477EA,$5017D55B,$D7D25D88,$44136C76,$0404A8C8,$B8E5A121, |
$B81A928A,$60ED5869,$97C55B96,$EAEC991B,$29935913,$01FDB7F1,$088E8DFA,$9AB6F6F5, |
$3B4CBF9F,$4A5DE3AB,$E6051D35,$A0E1D855,$D36B4CF1,$F544EDEB,$B0E93524,$BEBB8FBD, |
$A2D762CF,$49C92F54,$38B5F331,$7128A454,$48392905,$A65B1DB8,$851C97BD,$D675CF2F), |
($85E04019,$332BF567,$662DBFFF,$CFC65693,$2A8D7F6F,$AB9BC912,$DE6008A1,$2028DA1F, |
$0227BCE7,$4D642916,$18FAC300,$50F18B82,$2CB2CB11,$B232E75C,$4B3695F2,$B28707DE, |
$A05FBCF6,$CD4181E9,$E150210C,$E24EF1BD,$B168C381,$FDE4E789,$5C79B0D8,$1E8BFD43, |
$4D495001,$38BE4341,$913CEE1D,$92A79C3F,$089766BE,$BAEEADF4,$1286BECF,$B6EACB19, |
$2660C200,$7565BDE4,$64241F7A,$8248DCA9,$C3B3AD66,$28136086,$0BD8DFA8,$356D1CF2, |
$107789BE,$B3B2E9CE,$0502AA8F,$0BC0351E,$166BF52A,$EB12FF82,$E3486911,$D34D7516, |
$4E7B3AFF,$5F43671B,$9CF6E037,$4981AC83,$334266CE,$8C9341B7,$D0D854C0,$CB3A6C88, |
$47BC2829,$4725BA37,$A66AD22B,$7AD61F1E,$0C5CBAFA,$4437F107,$B6E79962,$42D2D816, |
$0A961288,$E1A5C06E,$13749E67,$72FC081A,$B1D139F7,$F9583745,$CF19DF58,$BEC3F756, |
$C06EBA30,$07211B24,$45C28829,$C95E317F,$BC8EC511,$38BC46E9,$C6E6FA14,$BAE8584A, |
$AD4EBC46,$468F508B,$7829435F,$F124183B,$821DBA9F,$AFF60FF4,$EA2C4E6D,$16E39264, |
$92544A8B,$009B4FC3,$ABA68CED,$9AC96F78,$06A5B79A,$B2856E6E,$1AEC3CA9,$BE838688, |
$0E0804E9,$55F1BE56,$E7E5363B,$B3A1F25D,$F7DEBB85,$61FE033C,$16746233,$3C034C28, |
$DA6D0C74,$79AAC56C,$3CE4E1AD,$51F0C802,$98F8F35A,$1626A49F,$EED82B29,$1D382FE3, |
$0C4FB99A,$BB325778,$3EC6D97B,$6E77A6A9,$CB658B5C,$D45230C7,$2BD1408B,$60C03EB7, |
$B9068D78,$A33754F4,$F430C87D,$C8A71302,$B96D8C32,$EBD4E7BE,$BE8B9D2D,$7979FB06, |
$E7225308,$8B75CF77,$11EF8DA4,$E083C858,$8D6B786F,$5A6317A6,$FA5CF7A0,$5DDA0033, |
$F28EBFB0,$F5B9C310,$A0EAC280,$08B9767A,$A3D9D2B0,$79D34217,$021A718D,$9AC6336A, |
$2711FD60,$438050E3,$069908A8,$3D7FEDC4,$826D2BEF,$4EEB8476,$488DCF25,$36C9D566, |
$28E74E41,$C2610ACA,$3D49A9CF,$BAE3B9DF,$B65F8DE6,$92AEAF64,$3AC7D5E6,$9EA80509, |
$F22B017D,$A4173F70,$DD1E16C3,$15E0D7F9,$50B1B887,$2B9F4FD5,$625ABA82,$6A017962, |
$2EC01B9C,$15488AA9,$D716E740,$40055A2C,$93D29A22,$E32DBF9A,$058745B9,$3453DC1E, |
$D699296E,$496CFF6F,$1C9F4986,$DFE2ED07,$B87242D1,$19DE7EAE,$053E561A,$15AD6F8C, |
$66626C1C,$7154C24C,$EA082B2A,$93EB2939,$17DCB0F0,$58D4F2AE,$9EA294FB,$52CF564C, |
$9883FE66,$2EC40581,$763953C3,$01D6692E,$D3A0C108,$A1E7160E,$E4F2DFA6,$693ED285, |
$74904698,$4C2B0EDD,$4F757656,$5D393378,$A132234F,$3D321C5D,$C3F5E194,$4B269301, |
$C79F022F,$3C997E7E,$5E4F9504,$3FFAFBBD,$76F7AD0E,$296693F4,$3D1FCE6F,$C61E45BE, |
$D3B5AB34,$F72BF9B7,$1B0434C0,$4E72B567,$5592A33D,$B5229301,$CFD2A87F,$60AEB767, |
$1814386B,$30BCC33D,$38A0C07D,$FD1606F2,$C363519B,$589DD390,$5479F8E6,$1CB8D647, |
$97FD61A9,$EA7759F4,$2D57539D,$569A58CF,$E84E63AD,$462E1B78,$6580F87E,$F3817914, |
$91DA55F4,$40A230F3,$D1988F35,$B6E318D2,$3FFA50BC,$3D40F021,$C3C0BDAE,$4958C24C, |
$518F36B2,$84B1D370,$0FEDCE83,$878DDADA,$F2A279C7,$94E01BE8,$90716F4B,$954B8AA3), |
($E216300D,$BBDDFFFC,$A7EBDABD,$35648095,$7789F8B7,$E6C1121B,$0E241600,$052CE8B5, |
$11A9CFB0,$E5952F11,$ECE7990A,$9386D174,$2A42931C,$76E38111,$B12DEF3A,$37DDDDFC, |
$DE9ADEB1,$0A0CC32C,$BE197029,$84A00940,$BB243A0F,$B4D137CF,$B44E79F0,$049EEDFD, |
$0B15A15D,$480D3168,$8BBBDE5A,$669DED42,$C7ECE831,$3F8F95E7,$72DF191B,$7580330D, |
$94074251,$5C7DCDFA,$ABBE6D63,$AA402164,$B301D40A,$02E7D1CA,$53571DAE,$7A3182A2, |
$12A8DDEC,$FDAA335D,$176F43E8,$71FB46D4,$38129022,$CE949AD4,$B84769AD,$965BD862, |
$82F3D055,$66FB9767,$15B80B4E,$1D5B47A0,$4CFDE06F,$C28EC4B8,$57E8726E,$647A78FC, |
$99865D44,$608BD593,$6C200E03,$39DC5FF6,$5D0B00A3,$AE63AFF2,$7E8BD632,$70108C0C, |
$BBD35049,$2998DF04,$980CF42A,$9B6DF491,$9E7EDD53,$06918548,$58CB7E07,$3B74EF2E, |
$522FFFB1,$D24708CC,$1C7E27CD,$A4EB215B,$3CF1D2E2,$19B47A38,$424F7618,$35856039, |
$9D17DEE7,$27EB35E6,$C9AFF67B,$36BAF5B8,$09C467CD,$C18910B1,$E11DBF7B,$06CD1AF8, |
$7170C608,$2D5E3354,$D4DE495A,$64C6D006,$BCC0C62C,$3DD00DB3,$708F8F34,$77D51B42, |
$264F620F,$24B8D2BF,$15C1B79E,$46A52564,$F8D7E54E,$3E378160,$7895CDA5,$859C15A5, |
$E6459788,$C37BC75F,$DB07BA0C,$0676A3AB,$7F229B1E,$31842E7B,$24259FD7,$F8BEF472, |
$835FFCB8,$6DF4C1F2,$96F5B195,$FD0AF0FC,$B0FE134C,$E2506D3D,$4F9B12EA,$F215F225, |
$A223736F,$9FB4C428,$25D04979,$34C713F8,$C4618187,$EA7A6E98,$7CD16EFC,$1436876C, |
$F1544107,$BEDEEE14,$56E9AF27,$A04AA441,$3CF7C899,$92ECBAE6,$DD67016D,$151682EB, |
$A842EEDF,$FDBA60B4,$F1907B75,$20E3030F,$24D8C29E,$E139673B,$EFA63FB8,$71873054, |
$B6F2CF3B,$9F326442,$CB15A4CC,$B01A4504,$F1E47D8D,$844A1BE5,$BAE7DFDC,$42CBDA70, |
$CD7DAE0A,$57E85B7A,$D53F5AF6,$20CF4D8C,$CEA4D428,$79D130A4,$3486EBFB,$33D3CDDC, |
$77853B53,$37EFFCB5,$C5068778,$E580B3E6,$4E68B8F4,$C5C8B37E,$0D809EA2,$398FEB7C, |
$132A4F94,$43B7950E,$2FEE7D1C,$223613BD,$DD06CAA2,$37DF932B,$C4248289,$ACF3EBC3, |
$5715F6B7,$EF3478DD,$F267616F,$C148CBE4,$9052815E,$5E410FAB,$B48A2465,$2EDA7FA4, |
$E87B40E4,$E98EA084,$5889E9E1,$EFD390FC,$DD07D35B,$DB485694,$38D7E5B2,$57720101, |
$730EDEBC,$5B643113,$94917E4F,$503C2FBA,$646F1282,$7523D24A,$E0779695,$F9C17A8F, |
$7A5B2121,$D187B896,$29263A4D,$BA510CDF,$81F47C9F,$AD1163ED,$EA7B5965,$1A00726E, |
$11403092,$00DA6D77,$4A0CDD61,$AD1F4603,$605BDFB0,$9EEDC364,$22EBE6A8,$CEE7D28A, |
$A0E736A0,$5564A6B9,$10853209,$C7EB8F37,$2DE705CA,$8951570F,$DF09822B,$BD691A6C, |
$AA12E4F2,$87451C0F,$E0F6A27A,$3ADA4819,$4CF1764F,$0D771C2B,$67CDB156,$350D8384, |
$5938FA0F,$42399EF3,$36997B07,$0E84093D,$4AA93E61,$8360D87B,$1FA98B0C,$1149382C, |
$E97625A5,$0614D1B7,$0E25244B,$0C768347,$589E8D82,$0D2059D1,$A466BB1E,$F8DA0A82, |
$04F19130,$BA6E4EC0,$99265164,$1EE7230D,$50B2AD80,$EAEE6801,$8DB2A283,$EA8BF59E) |
); |
Cast256_Data: array[0..3, 0..255] of UInt32 = ( |
($30FB40D4,$9FA0FF0B,$6BECCD2F,$3F258C7A,$1E213F2F,$9C004DD3,$6003E540,$CF9FC949, |
$BFD4AF27,$88BBBDB5,$E2034090,$98D09675,$6E63A0E0,$15C361D2,$C2E7661D,$22D4FF8E, |
$28683B6F,$C07FD059,$FF2379C8,$775F50E2,$43C340D3,$DF2F8656,$887CA41A,$A2D2BD2D, |
$A1C9E0D6,$346C4819,$61B76D87,$22540F2F,$2ABE32E1,$AA54166B,$22568E3A,$A2D341D0, |
$66DB40C8,$A784392F,$004DFF2F,$2DB9D2DE,$97943FAC,$4A97C1D8,$527644B7,$B5F437A7, |
$B82CBAEF,$D751D159,$6FF7F0ED,$5A097A1F,$827B68D0,$90ECF52E,$22B0C054,$BC8E5935, |
$4B6D2F7F,$50BB64A2,$D2664910,$BEE5812D,$B7332290,$E93B159F,$B48EE411,$4BFF345D, |
$FD45C240,$AD31973F,$C4F6D02E,$55FC8165,$D5B1CAAD,$A1AC2DAE,$A2D4B76D,$C19B0C50, |
$882240F2,$0C6E4F38,$A4E4BFD7,$4F5BA272,$564C1D2F,$C59C5319,$B949E354,$B04669FE, |
$B1B6AB8A,$C71358DD,$6385C545,$110F935D,$57538AD5,$6A390493,$E63D37E0,$2A54F6B3, |
$3A787D5F,$6276A0B5,$19A6FCDF,$7A42206A,$29F9D4D5,$F61B1891,$BB72275E,$AA508167, |
$38901091,$C6B505EB,$84C7CB8C,$2AD75A0F,$874A1427,$A2D1936B,$2AD286AF,$AA56D291, |
$D7894360,$425C750D,$93B39E26,$187184C9,$6C00B32D,$73E2BB14,$A0BEBC3C,$54623779, |
$64459EAB,$3F328B82,$7718CF82,$59A2CEA6,$04EE002E,$89FE78E6,$3FAB0950,$325FF6C2, |
$81383F05,$6963C5C8,$76CB5AD6,$D49974C9,$CA180DCF,$380782D5,$C7FA5CF6,$8AC31511, |
$35E79E13,$47DA91D0,$F40F9086,$A7E2419E,$31366241,$051EF495,$AA573B04,$4A805D8D, |
$548300D0,$00322A3C,$BF64CDDF,$BA57A68E,$75C6372B,$50AFD341,$A7C13275,$915A0BF5, |
$6B54BFAB,$2B0B1426,$AB4CC9D7,$449CCD82,$F7FBF265,$AB85C5F3,$1B55DB94,$AAD4E324, |
$CFA4BD3F,$2DEAA3E2,$9E204D02,$C8BD25AC,$EADF55B3,$D5BD9E98,$E31231B2,$2AD5AD6C, |
$954329DE,$ADBE4528,$D8710F69,$AA51C90F,$AA786BF6,$22513F1E,$AA51A79B,$2AD344CC, |
$7B5A41F0,$D37CFBAD,$1B069505,$41ECE491,$B4C332E6,$032268D4,$C9600ACC,$CE387E6D, |
$BF6BB16C,$6A70FB78,$0D03D9C9,$D4DF39DE,$E01063DA,$4736F464,$5AD328D8,$B347CC96, |
$75BB0FC3,$98511BFB,$4FFBCC35,$B58BCF6A,$E11F0ABC,$BFC5FE4A,$A70AEC10,$AC39570A, |
$3F04442F,$6188B153,$E0397A2E,$5727CB79,$9CEB418F,$1CACD68D,$2AD37C96,$0175CB9D, |
$C69DFF09,$C75B65F0,$D9DB40D8,$EC0E7779,$4744EAD4,$B11C3274,$DD24CB9E,$7E1C54BD, |
$F01144F9,$D2240EB1,$9675B3FD,$A3AC3755,$D47C27AF,$51C85F4D,$56907596,$A5BB15E6, |
$580304F0,$CA042CF1,$011A37EA,$8DBFAADB,$35BA3E4A,$3526FFA0,$C37B4D09,$BC306ED9, |
$98A52666,$5648F725,$FF5E569D,$0CED63D0,$7C63B2CF,$700B45E1,$D5EA50F1,$85A92872, |
$AF1FBDA7,$D4234870,$A7870BF3,$2D3B4D79,$42E04198,$0CD0EDE7,$26470DB8,$F881814C, |
$474D6AD7,$7C0C5E5C,$D1231959,$381B7298,$F5D2F4DB,$AB838653,$6E2F1E23,$83719C9E, |
$BD91E046,$9A56456E,$DC39200C,$20C8C571,$962BDA1C,$E1E696FF,$B141AB08,$7CCA89B9, |
$1A69E783,$02CC4843,$A2F7C579,$429EF47D,$427B169C,$5AC9F049,$DD8F0F00,$5C8165BF), |
($1F201094,$EF0BA75B,$69E3CF7E,$393F4380,$FE61CF7A,$EEC5207A,$55889C94,$72FC0651, |
$ADA7EF79,$4E1D7235,$D55A63CE,$DE0436BA,$99C430EF,$5F0C0794,$18DCDB7D,$A1D6EFF3, |
$A0B52F7B,$59E83605,$EE15B094,$E9FFD909,$DC440086,$EF944459,$BA83CCB3,$E0C3CDFB, |
$D1DA4181,$3B092AB1,$F997F1C1,$A5E6CF7B,$01420DDB,$E4E7EF5B,$25A1FF41,$E180F806, |
$1FC41080,$179BEE7A,$D37AC6A9,$FE5830A4,$98DE8B7F,$77E83F4E,$79929269,$24FA9F7B, |
$E113C85B,$ACC40083,$D7503525,$F7EA615F,$62143154,$0D554B63,$5D681121,$C866C359, |
$3D63CF73,$CEE234C0,$D4D87E87,$5C672B21,$071F6181,$39F7627F,$361E3084,$E4EB573B, |
$602F64A4,$D63ACD9C,$1BBC4635,$9E81032D,$2701F50C,$99847AB4,$A0E3DF79,$BA6CF38C, |
$10843094,$2537A95E,$F46F6FFE,$A1FF3B1F,$208CFB6A,$8F458C74,$D9E0A227,$4EC73A34, |
$FC884F69,$3E4DE8DF,$EF0E0088,$3559648D,$8A45388C,$1D804366,$721D9BFD,$A58684BB, |
$E8256333,$844E8212,$128D8098,$FED33FB4,$CE280AE1,$27E19BA5,$D5A6C252,$E49754BD, |
$C5D655DD,$EB667064,$77840B4D,$A1B6A801,$84DB26A9,$E0B56714,$21F043B7,$E5D05860, |
$54F03084,$066FF472,$A31AA153,$DADC4755,$B5625DBF,$68561BE6,$83CA6B94,$2D6ED23B, |
$ECCF01DB,$A6D3D0BA,$B6803D5C,$AF77A709,$33B4A34C,$397BC8D6,$5EE22B95,$5F0E5304, |
$81ED6F61,$20E74364,$B45E1378,$DE18639B,$881CA122,$B96726D1,$8049A7E8,$22B7DA7B, |
$5E552D25,$5272D237,$79D2951C,$C60D894C,$488CB402,$1BA4FE5B,$A4B09F6B,$1CA815CF, |
$A20C3005,$8871DF63,$B9DE2FCB,$0CC6C9E9,$0BEEFF53,$E3214517,$B4542835,$9F63293C, |
$EE41E729,$6E1D2D7C,$50045286,$1E6685F3,$F33401C6,$30A22C95,$31A70850,$60930F13, |
$73F98417,$A1269859,$EC645C44,$52C877A9,$CDFF33A6,$A02B1741,$7CBAD9A2,$2180036F, |
$50D99C08,$CB3F4861,$C26BD765,$64A3F6AB,$80342676,$25A75E7B,$E4E6D1FC,$20C710E6, |
$CDF0B680,$17844D3B,$31EEF84D,$7E0824E4,$2CCB49EB,$846A3BAE,$8FF77888,$EE5D60F6, |
$7AF75673,$2FDD5CDB,$A11631C1,$30F66F43,$B3FAEC54,$157FD7FA,$EF8579CC,$D152DE58, |
$DB2FFD5E,$8F32CE19,$306AF97A,$02F03EF8,$99319AD5,$C242FA0F,$A7E3EBB0,$C68E4906, |
$B8DA230C,$80823028,$DCDEF3C8,$D35FB171,$088A1BC8,$BEC0C560,$61A3C9E8,$BCA8F54D, |
$C72FEFFA,$22822E99,$82C570B4,$D8D94E89,$8B1C34BC,$301E16E6,$273BE979,$B0FFEAA6, |
$61D9B8C6,$00B24869,$B7FFCE3F,$08DC283B,$43DAF65A,$F7E19798,$7619B72F,$8F1C9BA4, |
$DC8637A0,$16A7D3B1,$9FC393B7,$A7136EEB,$C6BCC63E,$1A513742,$EF6828BC,$520365D6, |
$2D6A77AB,$3527ED4B,$821FD216,$095C6E2E,$DB92F2FB,$5EEA29CB,$145892F5,$91584F7F, |
$5483697B,$2667A8CC,$85196048,$8C4BACEA,$833860D4,$0D23E0F9,$6C387E8A,$0AE6D249, |
$B284600C,$D835731D,$DCB1C647,$AC4C56EA,$3EBD81B3,$230EABB0,$6438BC87,$F0B5B1FA, |
$8F5EA2B3,$FC184642,$0A036B7A,$4FB089BD,$649DA589,$A345415E,$5C038323,$3E5D3BB9, |
$43D79572,$7E6DD07C,$06DFDF1E,$6C6CC4EF,$7160A539,$73BFBE70,$83877605,$4523ECF1), |
($8DEFC240,$25FA5D9F,$EB903DBF,$E810C907,$47607FFF,$369FE44B,$8C1FC644,$AECECA90, |
$BEB1F9BF,$EEFBCAEA,$E8CF1950,$51DF07AE,$920E8806,$F0AD0548,$E13C8D83,$927010D5, |
$11107D9F,$07647DB9,$B2E3E4D4,$3D4F285E,$B9AFA820,$FADE82E0,$A067268B,$8272792E, |
$553FB2C0,$489AE22B,$D4EF9794,$125E3FBC,$21FFFCEE,$825B1BFD,$9255C5ED,$1257A240, |
$4E1A8302,$BAE07FFF,$528246E7,$8E57140E,$3373F7BF,$8C9F8188,$A6FC4EE8,$C982B5A5, |
$A8C01DB7,$579FC264,$67094F31,$F2BD3F5F,$40FFF7C1,$1FB78DFC,$8E6BD2C1,$437BE59B, |
$99B03DBF,$B5DBC64B,$638DC0E6,$55819D99,$A197C81C,$4A012D6E,$C5884A28,$CCC36F71, |
$B843C213,$6C0743F1,$8309893C,$0FEDDD5F,$2F7FE850,$D7C07F7E,$02507FBF,$5AFB9A04, |
$A747D2D0,$1651192E,$AF70BF3E,$58C31380,$5F98302E,$727CC3C4,$0A0FB402,$0F7FEF82, |
$8C96FDAD,$5D2C2AAE,$8EE99A49,$50DA88B8,$8427F4A0,$1EAC5790,$796FB449,$8252DC15, |
$EFBD7D9B,$A672597D,$ADA840D8,$45F54504,$FA5D7403,$E83EC305,$4F91751A,$925669C2, |
$23EFE941,$A903F12E,$60270DF2,$0276E4B6,$94FD6574,$927985B2,$8276DBCB,$02778176, |
$F8AF918D,$4E48F79E,$8F616DDF,$E29D840E,$842F7D83,$340CE5C8,$96BBB682,$93B4B148, |
$EF303CAB,$984FAF28,$779FAF9B,$92DC560D,$224D1E20,$8437AA88,$7D29DC96,$2756D3DC, |
$8B907CEE,$B51FD240,$E7C07CE3,$E566B4A1,$C3E9615E,$3CF8209D,$6094D1E3,$CD9CA341, |
$5C76460E,$00EA983B,$D4D67881,$FD47572C,$F76CEDD9,$BDA8229C,$127DADAA,$438A074E, |
$1F97C090,$081BDB8A,$93A07EBE,$B938CA15,$97B03CFF,$3DC2C0F8,$8D1AB2EC,$64380E51, |
$68CC7BFB,$D90F2788,$12490181,$5DE5FFD4,$DD7EF86A,$76A2E214,$B9A40368,$925D958F, |
$4B39FFFA,$BA39AEE9,$A4FFD30B,$FAF7933B,$6D498623,$193CBCFA,$27627545,$825CF47A, |
$61BD8BA0,$D11E42D1,$CEAD04F4,$127EA392,$10428DB7,$8272A972,$9270C4A8,$127DE50B, |
$285BA1C8,$3C62F44F,$35C0EAA5,$E805D231,$428929FB,$B4FCDF82,$4FB66A53,$0E7DC15B, |
$1F081FAB,$108618AE,$FCFD086D,$F9FF2889,$694BCC11,$236A5CAE,$12DECA4D,$2C3F8CC5, |
$D2D02DFE,$F8EF5896,$E4CF52DA,$95155B67,$494A488C,$B9B6A80C,$5C8F82BC,$89D36B45, |
$3A609437,$EC00C9A9,$44715253,$0A874B49,$D773BC40,$7C34671C,$02717EF6,$4FEB5536, |
$A2D02FFF,$D2BF60C4,$D43F03C0,$50B4EF6D,$07478CD1,$006E1888,$A2E53F55,$B9E6D4BC, |
$A2048016,$97573833,$D7207D67,$DE0F8F3D,$72F87B33,$ABCC4F33,$7688C55D,$7B00A6B0, |
$947B0001,$570075D2,$F9BB88F8,$8942019E,$4264A5FF,$856302E0,$72DBD92B,$EE971B69, |
$6EA22FDE,$5F08AE2B,$AF7A616D,$E5C98767,$CF1FEBD2,$61EFC8C2,$F1AC2571,$CC8239C2, |
$67214CB8,$B1E583D1,$B7DC3E62,$7F10BDCE,$F90A5C38,$0FF0443D,$606E6DC6,$60543A49, |
$5727C148,$2BE98A1D,$8AB41738,$20E1BE24,$AF96DA0F,$68458425,$99833BE5,$600D457D, |
$282F9350,$8334B362,$D91D1120,$2B6D8DA0,$642B1E31,$9C305A00,$52BCE688,$1B03588A, |
$F7BAEFD5,$4142ED9C,$A4315C11,$83323EC5,$DFEF4636,$A133C501,$E9D3531C,$EE353783), |
($9DB30420,$1FB6E9DE,$A7BE7BEF,$D273A298,$4A4F7BDB,$64AD8C57,$85510443,$FA020ED1, |
$7E287AFF,$E60FB663,$095F35A1,$79EBF120,$FD059D43,$6497B7B1,$F3641F63,$241E4ADF, |
$28147F5F,$4FA2B8CD,$C9430040,$0CC32220,$FDD30B30,$C0A5374F,$1D2D00D9,$24147B15, |
$EE4D111A,$0FCA5167,$71FF904C,$2D195FFE,$1A05645F,$0C13FEFE,$081B08CA,$05170121, |
$80530100,$E83E5EFE,$AC9AF4F8,$7FE72701,$D2B8EE5F,$06DF4261,$BB9E9B8A,$7293EA25, |
$CE84FFDF,$F5718801,$3DD64B04,$A26F263B,$7ED48400,$547EEBE6,$446D4CA0,$6CF3D6F5, |
$2649ABDF,$AEA0C7F5,$36338CC1,$503F7E93,$D3772061,$11B638E1,$72500E03,$F80EB2BB, |
$ABE0502E,$EC8D77DE,$57971E81,$E14F6746,$C9335400,$6920318F,$081DBB99,$FFC304A5, |
$4D351805,$7F3D5CE3,$A6C866C6,$5D5BCCA9,$DAEC6FEA,$9F926F91,$9F46222F,$3991467D, |
$A5BF6D8E,$1143C44F,$43958302,$D0214EEB,$022083B8,$3FB6180C,$18F8931E,$281658E6, |
$26486E3E,$8BD78A70,$7477E4C1,$B506E07C,$F32D0A25,$79098B02,$E4EABB81,$28123B23, |
$69DEAD38,$1574CA16,$DF871B62,$211C40B7,$A51A9EF9,$0014377B,$041E8AC8,$09114003, |
$BD59E4D2,$E3D156D5,$4FE876D5,$2F91A340,$557BE8DE,$00EAE4A7,$0CE5C2EC,$4DB4BBA6, |
$E756BDFF,$DD3369AC,$EC17B035,$06572327,$99AFC8B0,$56C8C391,$6B65811C,$5E146119, |
$6E85CB75,$BE07C002,$C2325577,$893FF4EC,$5BBFC92D,$D0EC3B25,$B7801AB7,$8D6D3B24, |
$20C763EF,$C366A5FC,$9C382880,$0ACE3205,$AAC9548A,$ECA1D7C7,$041AFA32,$1D16625A, |
$6701902C,$9B757A54,$31D477F7,$9126B031,$36CC6FDB,$C70B8B46,$D9E66A48,$56E55A79, |
$026A4CEB,$52437EFF,$2F8F76B4,$0DF980A5,$8674CDE3,$EDDA04EB,$17A9BE04,$2C18F4DF, |
$B7747F9D,$AB2AF7B4,$EFC34D20,$2E096B7C,$1741A254,$E5B6A035,$213D42F6,$2C1C7C26, |
$61C2F50F,$6552DAF9,$D2C231F8,$25130F69,$D8167FA2,$0418F2C8,$001A96A6,$0D1526AB, |
$63315C21,$5E0A72EC,$49BAFEFD,$187908D9,$8D0DBD86,$311170A7,$3E9B640C,$CC3E10D7, |
$D5CAD3B6,$0CAEC388,$F73001E1,$6C728AFF,$71EAE2A1,$1F9AF36E,$CFCBD12F,$C1DE8417, |
$AC07BE6B,$CB44A1D8,$8B9B0F56,$013988C3,$B1C52FCA,$B4BE31CD,$D8782806,$12A3A4E2, |
$6F7DE532,$58FD7EB6,$D01EE900,$24ADFFC2,$F4990FC5,$9711AAC5,$001D7B95,$82E5E7D2, |
$109873F6,$00613096,$C32D9521,$ADA121FF,$29908415,$7FBB977F,$AF9EB3DB,$29C9ED2A, |
$5CE2A465,$A730F32C,$D0AA3FE8,$8A5CC091,$D49E2CE7,$0CE454A9,$D60ACD86,$015F1919, |
$77079103,$DEA03AF6,$78A8565E,$DEE356DF,$21F05CBE,$8B75E387,$B3C50651,$B8A5C3EF, |
$D8EEB6D2,$E523BE77,$C2154529,$2F69EFDF,$AFE67AFB,$F470C4B2,$F3E0EB5B,$D6CC9876, |
$39E4460C,$1FDA8538,$1987832F,$CA007367,$A99144F8,$296B299E,$492FC295,$9266BEAB, |
$B5676E69,$9BD3DDDA,$DF7E052F,$DB25701C,$1B5E51EE,$F65324E6,$6AFCE36C,$0316CC04, |
$8644213E,$B7DC59D0,$7965291F,$CCD6FD43,$41823979,$932BCDF6,$B657C34D,$4EDFD282, |
$7AE5290C,$3CB9536B,$851E20FE,$9833557E,$13ECF0B0,$D3FFB372,$3F85C5C1,$0AEF7ED2) |
); |
Mars_Data: array[0..511] of UInt32 = ( |
$09D0C479,$28C8FFE0,$84AA6C39,$9DAD7287,$7DFF9BE3,$D4268361,$C96DA1D4,$7974CC93, |
$85D0582E,$2A4B5705,$1CA16A62,$C3BD279D,$0F1F25E5,$5160372F,$C695C1FB,$4D7FF1E4, |
$AE5F6BF4,$0D72EE46,$FF23DE8A,$B1CF8E83,$F14902E2,$3E981E42,$8BF53EB6,$7F4BF8AC, |
$83631F83,$25970205,$76AFE784,$3A7931D4,$4F846450,$5C64C3F6,$210A5F18,$C6986A26, |
$28F4E826,$3A60A81C,$D340A664,$7EA820C4,$526687C5,$7EDDD12B,$32A11D1D,$9C9EF086, |
$80F6E831,$AB6F04AD,$56FB9B53,$8B2E095C,$B68556AE,$D2250B0D,$294A7721,$E21FB253, |
$AE136749,$E82AAE86,$93365104,$99404A66,$78A784DC,$B69BA84B,$04046793,$23DB5C1E, |
$46CAE1D6,$2FE28134,$5A223942,$1863CD5B,$C190C6E3,$07DFB846,$6EB88816,$2D0DCC4A, |
$A4CCAE59,$3798670D,$CBFA9493,$4F481D45,$EAFC8CA8,$DB1129D6,$B0449E20,$0F5407FB, |
$6167D9A8,$D1F45763,$4DAA96C3,$3BEC5958,$ABABA014,$B6CCD201,$38D6279F,$02682215, |
$8F376CD5,$092C237E,$BFC56593,$32889D2C,$854B3E95,$05BB9B43,$7DCD5DCD,$A02E926C, |
$FAE527E5,$36A1C330,$3412E1AE,$F257F462,$3C4F1D71,$30A2E809,$68E5F551,$9C61BA44, |
$5DED0AB8,$75CE09C8,$9654F93E,$698C0CCA,$243CB3E4,$2B062B97,$0F3B8D9E,$00E050DF, |
$FC5D6166,$E35F9288,$C079550D,$0591AEE8,$8E531E74,$75FE3578,$2F6D829A,$F60B21AE, |
$95E8EB8D,$6699486B,$901D7D9B,$FD6D6E31,$1090ACEF,$E0670DD8,$DAB2E692,$CD6D4365, |
$E5393514,$3AF345F0,$6241FC4D,$460DA3A3,$7BCF3729,$8BF1D1E0,$14AAC070,$1587ED55, |
$3AFD7D3E,$D2F29E01,$29A9D1F6,$EFB10C53,$CF3B870F,$B414935C,$664465ED,$024ACAC7, |
$59A744C1,$1D2936A7,$DC580AA6,$CF574CA8,$040A7A10,$6CD81807,$8A98BE4C,$ACCEA063, |
$C33E92B5,$D1E0E03D,$B322517E,$2092BD13,$386B2C4A,$52E8DD58,$58656DFB,$50820371, |
$41811896,$E337EF7E,$D39FB119,$C97F0DF6,$68FEA01B,$A150A6E5,$55258962,$EB6FF41B, |
$D7C9CD7A,$A619CD9E,$BCF09576,$2672C073,$F003FB3C,$4AB7A50B,$1484126A,$487BA9B1, |
$A64FC9C6,$F6957D49,$38B06A75,$DD805FCD,$63D094CF,$F51C999E,$1AA4D343,$B8495294, |
$CE9F8E99,$BFFCD770,$C7C275CC,$378453A7,$7B21BE33,$397F41BD,$4E94D131,$92CC1F98, |
$5915EA51,$99F861B7,$C9980A88,$1D74FD5F,$B0A495F8,$614DEED0,$B5778EEA,$5941792D, |
$FA90C1F8,$33F824B4,$C4965372,$3FF6D550,$4CA5FEC0,$8630E964,$5B3FBBD6,$7DA26A48, |
$B203231A,$04297514,$2D639306,$2EB13149,$16A45272,$532459A0,$8E5F4872,$F966C7D9, |
$07128DC0,$0D44DB62,$AFC8D52D,$06316131,$D838E7CE,$1BC41D00,$3A2E8C0F,$EA83837E, |
$B984737D,$13BA4891,$C4F8B949,$A6D6ACB3,$A215CDCE,$8359838B,$6BD1AA31,$F579DD52, |
$21B93F93,$F5176781,$187DFDDE,$E94AEB76,$2B38FD54,$431DE1DA,$AB394825,$9AD3048F, |
$DFEA32AA,$659473E3,$623F7863,$F3346C59,$AB3AB685,$3346A90B,$6B56443E,$C6DE01F8, |
$8D421FC0,$9B0ED10C,$88F1A1E9,$54C1F029,$7DEAD57B,$8D7BA426,$4CF5178A,$551A7CCA, |
$1A9A5F08,$FCD651B9,$25605182,$E11FC6C3,$B6FD9676,$337B3027,$B7C8EB14,$9E5FD030, |
$6B57E354,$AD913CF7,$7E16688D,$58872A69,$2C2FC7DF,$E389CCC6,$30738DF1,$0824A734, |
$E1797A8B,$A4A8D57B,$5B5D193B,$C8A8309B,$73F9A978,$73398D32,$0F59573E,$E9DF2B03, |
$E8A5B6C8,$848D0704,$98DF93C2,$720A1DC3,$684F259A,$943BA848,$A6370152,$863B5EA3, |
$D17B978B,$6D9B58EF,$0A700DD4,$A73D36BF,$8E6A0829,$8695BC14,$E35B3447,$933AC568, |
$8894B022,$2F511C27,$DDFBCC3C,$006662B6,$117C83FE,$4E12B414,$C2BCA766,$3A2FEC10, |
$F4562420,$55792E2A,$46F5D857,$CEDA25CE,$C3601D3B,$6C00AB46,$EFAC9C28,$B3C35047, |
$611DFEE3,$257C3207,$FDD58482,$3B14D84F,$23BECB64,$A075F3A3,$088F8EAD,$07ADF158, |
$7796943C,$FACABF3D,$C09730CD,$F7679969,$DA44E9ED,$2C854C12,$35935FA3,$2F057D9F, |
$690624F8,$1CB0BAFD,$7B0DBDC6,$810F23BB,$FA929A1A,$6D969A17,$6742979B,$74AC7D05, |
$010E65C4,$86A3D963,$F907B5A0,$D0042BD3,$158D7D03,$287A8255,$BBA8366F,$096EDC33, |
$21916A7B,$77B56B86,$951622F9,$A6C5E650,$8CEA17D1,$CD8C62BC,$A3D63433,$358A68FD, |
$0F9B9D3C,$D6AA295B,$FE33384A,$C000738E,$CD67EB2F,$E2EB6DC2,$97338B02,$06C9F246, |
$419CF1AD,$2B83C045,$3723F18A,$CB5B3089,$160BEAD7,$5D494656,$35F8A74B,$1E4E6C9E, |
$000399BD,$67466880,$B4174831,$ACF423B2,$CA815AB3,$5A6395E7,$302A67C5,$8BDB446B, |
$108F8FA4,$10223EDA,$92B8B48B,$7F38D0EE,$AB2701D4,$0262D415,$AF224A30,$B3D88ABA, |
$F8B2C3AF,$DAF7EF70,$CC97D3B7,$E9614B6C,$2BAEBFF4,$70F687CF,$386C9156,$CE092EE5, |
$01E87DA6,$6CE91E6A,$BB7BCC84,$C7922C20,$9D3B71FD,$060E41C6,$D7590F15,$4E03BB47, |
$183C198E,$63EEB240,$2DDBF49A,$6D5CBA54,$923750AF,$F9E14236,$7838162B,$59726C72, |
$81B66760,$BB2926C1,$48A0CE0D,$A6C0496D,$AD43507B,$718D496A,$9DF057AF,$44B1BDE6, |
$054356DC,$DE7CED35,$D51A138B,$62088CC9,$35830311,$C96EFCA2,$686F86EC,$8E77CB68, |
$63E1D6B8,$C80F9778,$79C491FD,$1B4C67F2,$72698D7D,$5E368C31,$F7D95E2E,$A1D3493F, |
$DCD9433E,$896F1552,$4BC4CA7A,$A6D1BAF4,$A5A96DCC,$0BEF8B46,$A169FDA7,$74DF40B7, |
$4E208804,$9A756607,$038E87C8,$20211E44,$8B7AD4BF,$C6403F35,$1848E36D,$80BDB038, |
$1E62891C,$643D2107,$BF04D6F8,$21092C8C,$F644F389,$0778404E,$7B78ADB8,$A2C52D53, |
$42157ABE,$A2253E2E,$7BF3F4AE,$80F594F9,$953194E7,$77EB92ED,$B3816930,$DA8D9336, |
$BF447469,$F26D9483,$EE6FAED5,$71371235,$DE425F73,$B4E59F43,$7DBE2D4E,$2D37B185, |
$49DC9A63,$98C39D98,$1301C9A2,$389B1BBF,$0C18588D,$A421C1BA,$7AA3865C,$71E08558, |
$3C5CFCAA,$7D239CA4,$0297D9DD,$D7DC2830,$4B37802B,$7428AB54,$AEEE0347,$4B3FBB85, |
$692F2F08,$134E578E,$36D9E0BF,$AE8B5FCF,$EDB93ECF,$2B27248E,$170EB1EF,$7DC57FD6, |
$1E760F16,$B1136601,$864E1B9B,$D7EA7319,$3AB871BD,$CFA4D76F,$E31BD782,$0DBEB469, |
$ABB96061,$5370F85D,$FFB07E37,$DA30D0FB,$EBC977B6,$0B98B40F,$3A4D0FE6,$DF4FC26B, |
$159CF22A,$C298D6E2,$2B78EF6A,$61A94AC0,$AB561187,$14EEA0F0,$DF0D4164,$19AF70EE |
); |
Mars_Key: array[0..6] of UInt32 = ( |
$09D0C479,$28C8FFE0,$84AA6C39,$9DAD7287,$7DFF9BE3,$D4268361,$C96DA1D4 |
); |
/// <summary> |
/// Constant used in AES encryption key initialization |
/// </summary> |
RijndaelEncryptionSheduleConst: array[0..9] of UInt32 = ($01, $02, $04, $08, $10, $20, $40, $80, $1b, $36); |
Rijndael_S: array[0..1, 0..255] of Byte = ( |
($63,$7C,$77,$7B,$F2,$6B,$6F,$C5,$30,$01,$67,$2B,$FE,$D7,$AB,$76, |
$CA,$82,$C9,$7D,$FA,$59,$47,$F0,$AD,$D4,$A2,$AF,$9C,$A4,$72,$C0, |
$B7,$FD,$93,$26,$36,$3F,$F7,$CC,$34,$A5,$E5,$F1,$71,$D8,$31,$15, |
$04,$C7,$23,$C3,$18,$96,$05,$9A,$07,$12,$80,$E2,$EB,$27,$B2,$75, |
$09,$83,$2C,$1A,$1B,$6E,$5A,$A0,$52,$3B,$D6,$B3,$29,$E3,$2F,$84, |
$53,$D1,$00,$ED,$20,$FC,$B1,$5B,$6A,$CB,$BE,$39,$4A,$4C,$58,$CF, |
$D0,$EF,$AA,$FB,$43,$4D,$33,$85,$45,$F9,$02,$7F,$50,$3C,$9F,$A8, |
$51,$A3,$40,$8F,$92,$9D,$38,$F5,$BC,$B6,$DA,$21,$10,$FF,$F3,$D2, |
$CD,$0C,$13,$EC,$5F,$97,$44,$17,$C4,$A7,$7E,$3D,$64,$5D,$19,$73, |
$60,$81,$4F,$DC,$22,$2A,$90,$88,$46,$EE,$B8,$14,$DE,$5E,$0B,$DB, |
$E0,$32,$3A,$0A,$49,$06,$24,$5C,$C2,$D3,$AC,$62,$91,$95,$E4,$79, |
$E7,$C8,$37,$6D,$8D,$D5,$4E,$A9,$6C,$56,$F4,$EA,$65,$7A,$AE,$08, |
$BA,$78,$25,$2E,$1C,$A6,$B4,$C6,$E8,$DD,$74,$1F,$4B,$BD,$8B,$8A, |
$70,$3E,$B5,$66,$48,$03,$F6,$0E,$61,$35,$57,$B9,$86,$C1,$1D,$9E, |
$E1,$F8,$98,$11,$69,$D9,$8E,$94,$9B,$1E,$87,$E9,$CE,$55,$28,$DF, |
$8C,$A1,$89,$0D,$BF,$E6,$42,$68,$41,$99,$2D,$0F,$B0,$54,$BB,$16), |
($52,$09,$6A,$D5,$30,$36,$A5,$38,$BF,$40,$A3,$9E,$81,$F3,$D7,$FB, |
$7C,$E3,$39,$82,$9B,$2F,$FF,$87,$34,$8E,$43,$44,$C4,$DE,$E9,$CB, |
$54,$7B,$94,$32,$A6,$C2,$23,$3D,$EE,$4C,$95,$0B,$42,$FA,$C3,$4E, |
$08,$2E,$A1,$66,$28,$D9,$24,$B2,$76,$5B,$A2,$49,$6D,$8B,$D1,$25, |
$72,$F8,$F6,$64,$86,$68,$98,$16,$D4,$A4,$5C,$CC,$5D,$65,$B6,$92, |
$6C,$70,$48,$50,$FD,$ED,$B9,$DA,$5E,$15,$46,$57,$A7,$8D,$9D,$84, |
$90,$D8,$AB,$00,$8C,$BC,$D3,$0A,$F7,$E4,$58,$05,$B8,$B3,$45,$06, |
$D0,$2C,$1E,$8F,$CA,$3F,$0F,$02,$C1,$AF,$BD,$03,$01,$13,$8A,$6B, |
$3A,$91,$11,$41,$4F,$67,$DC,$EA,$97,$F2,$CF,$CE,$F0,$B4,$E6,$73, |
$96,$AC,$74,$22,$E7,$AD,$35,$85,$E2,$F9,$37,$E8,$1C,$75,$DF,$6E, |
$47,$F1,$1A,$71,$1D,$29,$C5,$89,$6F,$B7,$62,$0E,$AA,$18,$BE,$1B, |
$FC,$56,$3E,$4B,$C6,$D2,$79,$20,$9A,$DB,$C0,$FE,$78,$CD,$5A,$F4, |
$1F,$DD,$A8,$33,$88,$07,$C7,$31,$B1,$12,$10,$59,$27,$80,$EC,$5F, |
$60,$51,$7F,$A9,$19,$B5,$4A,$0D,$2D,$E5,$7A,$9F,$93,$C9,$9C,$EF, |
$A0,$E0,$3B,$4D,$AE,$2A,$F5,$B0,$C8,$EB,$BB,$3C,$83,$53,$99,$61, |
$17,$2B,$04,$7E,$BA,$77,$D6,$26,$E1,$69,$14,$63,$55,$21,$0C,$7D) |
); |
Rijndael_T: array[0..7, 0..255] of UInt32 = ( |
($A56363C6,$847C7CF8,$997777EE,$8D7B7BF6,$0DF2F2FF,$BD6B6BD6,$B16F6FDE,$54C5C591, |
$50303060,$03010102,$A96767CE,$7D2B2B56,$19FEFEE7,$62D7D7B5,$E6ABAB4D,$9A7676EC, |
$45CACA8F,$9D82821F,$40C9C989,$877D7DFA,$15FAFAEF,$EB5959B2,$C947478E,$0BF0F0FB, |
$ECADAD41,$67D4D4B3,$FDA2A25F,$EAAFAF45,$BF9C9C23,$F7A4A453,$967272E4,$5BC0C09B, |
$C2B7B775,$1CFDFDE1,$AE93933D,$6A26264C,$5A36366C,$413F3F7E,$02F7F7F5,$4FCCCC83, |
$5C343468,$F4A5A551,$34E5E5D1,$08F1F1F9,$937171E2,$73D8D8AB,$53313162,$3F15152A, |
$0C040408,$52C7C795,$65232346,$5EC3C39D,$28181830,$A1969637,$0F05050A,$B59A9A2F, |
$0907070E,$36121224,$9B80801B,$3DE2E2DF,$26EBEBCD,$6927274E,$CDB2B27F,$9F7575EA, |
$1B090912,$9E83831D,$742C2C58,$2E1A1A34,$2D1B1B36,$B26E6EDC,$EE5A5AB4,$FBA0A05B, |
$F65252A4,$4D3B3B76,$61D6D6B7,$CEB3B37D,$7B292952,$3EE3E3DD,$712F2F5E,$97848413, |
$F55353A6,$68D1D1B9,$00000000,$2CEDEDC1,$60202040,$1FFCFCE3,$C8B1B179,$ED5B5BB6, |
$BE6A6AD4,$46CBCB8D,$D9BEBE67,$4B393972,$DE4A4A94,$D44C4C98,$E85858B0,$4ACFCF85, |
$6BD0D0BB,$2AEFEFC5,$E5AAAA4F,$16FBFBED,$C5434386,$D74D4D9A,$55333366,$94858511, |
$CF45458A,$10F9F9E9,$06020204,$817F7FFE,$F05050A0,$443C3C78,$BA9F9F25,$E3A8A84B, |
$F35151A2,$FEA3A35D,$C0404080,$8A8F8F05,$AD92923F,$BC9D9D21,$48383870,$04F5F5F1, |
$DFBCBC63,$C1B6B677,$75DADAAF,$63212142,$30101020,$1AFFFFE5,$0EF3F3FD,$6DD2D2BF, |
$4CCDCD81,$140C0C18,$35131326,$2FECECC3,$E15F5FBE,$A2979735,$CC444488,$3917172E, |
$57C4C493,$F2A7A755,$827E7EFC,$473D3D7A,$AC6464C8,$E75D5DBA,$2B191932,$957373E6, |
$A06060C0,$98818119,$D14F4F9E,$7FDCDCA3,$66222244,$7E2A2A54,$AB90903B,$8388880B, |
$CA46468C,$29EEEEC7,$D3B8B86B,$3C141428,$79DEDEA7,$E25E5EBC,$1D0B0B16,$76DBDBAD, |
$3BE0E0DB,$56323264,$4E3A3A74,$1E0A0A14,$DB494992,$0A06060C,$6C242448,$E45C5CB8, |
$5DC2C29F,$6ED3D3BD,$EFACAC43,$A66262C4,$A8919139,$A4959531,$37E4E4D3,$8B7979F2, |
$32E7E7D5,$43C8C88B,$5937376E,$B76D6DDA,$8C8D8D01,$64D5D5B1,$D24E4E9C,$E0A9A949, |
$B46C6CD8,$FA5656AC,$07F4F4F3,$25EAEACF,$AF6565CA,$8E7A7AF4,$E9AEAE47,$18080810, |
$D5BABA6F,$887878F0,$6F25254A,$722E2E5C,$241C1C38,$F1A6A657,$C7B4B473,$51C6C697, |
$23E8E8CB,$7CDDDDA1,$9C7474E8,$211F1F3E,$DD4B4B96,$DCBDBD61,$868B8B0D,$858A8A0F, |
$907070E0,$423E3E7C,$C4B5B571,$AA6666CC,$D8484890,$05030306,$01F6F6F7,$120E0E1C, |
$A36161C2,$5F35356A,$F95757AE,$D0B9B969,$91868617,$58C1C199,$271D1D3A,$B99E9E27, |
$38E1E1D9,$13F8F8EB,$B398982B,$33111122,$BB6969D2,$70D9D9A9,$898E8E07,$A7949433, |
$B69B9B2D,$221E1E3C,$92878715,$20E9E9C9,$49CECE87,$FF5555AA,$78282850,$7ADFDFA5, |
$8F8C8C03,$F8A1A159,$80898909,$170D0D1A,$DABFBF65,$31E6E6D7,$C6424284,$B86868D0, |
$C3414182,$B0999929,$772D2D5A,$110F0F1E,$CBB0B07B,$FC5454A8,$D6BBBB6D,$3A16162C), |
($6363C6A5,$7C7CF884,$7777EE99,$7B7BF68D,$F2F2FF0D,$6B6BD6BD,$6F6FDEB1,$C5C59154, |
$30306050,$01010203,$6767CEA9,$2B2B567D,$FEFEE719,$D7D7B562,$ABAB4DE6,$7676EC9A, |
$CACA8F45,$82821F9D,$C9C98940,$7D7DFA87,$FAFAEF15,$5959B2EB,$47478EC9,$F0F0FB0B, |
$ADAD41EC,$D4D4B367,$A2A25FFD,$AFAF45EA,$9C9C23BF,$A4A453F7,$7272E496,$C0C09B5B, |
$B7B775C2,$FDFDE11C,$93933DAE,$26264C6A,$36366C5A,$3F3F7E41,$F7F7F502,$CCCC834F, |
$3434685C,$A5A551F4,$E5E5D134,$F1F1F908,$7171E293,$D8D8AB73,$31316253,$15152A3F, |
$0404080C,$C7C79552,$23234665,$C3C39D5E,$18183028,$969637A1,$05050A0F,$9A9A2FB5, |
$07070E09,$12122436,$80801B9B,$E2E2DF3D,$EBEBCD26,$27274E69,$B2B27FCD,$7575EA9F, |
$0909121B,$83831D9E,$2C2C5874,$1A1A342E,$1B1B362D,$6E6EDCB2,$5A5AB4EE,$A0A05BFB, |
$5252A4F6,$3B3B764D,$D6D6B761,$B3B37DCE,$2929527B,$E3E3DD3E,$2F2F5E71,$84841397, |
$5353A6F5,$D1D1B968,$00000000,$EDEDC12C,$20204060,$FCFCE31F,$B1B179C8,$5B5BB6ED, |
$6A6AD4BE,$CBCB8D46,$BEBE67D9,$3939724B,$4A4A94DE,$4C4C98D4,$5858B0E8,$CFCF854A, |
$D0D0BB6B,$EFEFC52A,$AAAA4FE5,$FBFBED16,$434386C5,$4D4D9AD7,$33336655,$85851194, |
$45458ACF,$F9F9E910,$02020406,$7F7FFE81,$5050A0F0,$3C3C7844,$9F9F25BA,$A8A84BE3, |
$5151A2F3,$A3A35DFE,$404080C0,$8F8F058A,$92923FAD,$9D9D21BC,$38387048,$F5F5F104, |
$BCBC63DF,$B6B677C1,$DADAAF75,$21214263,$10102030,$FFFFE51A,$F3F3FD0E,$D2D2BF6D, |
$CDCD814C,$0C0C1814,$13132635,$ECECC32F,$5F5FBEE1,$979735A2,$444488CC,$17172E39, |
$C4C49357,$A7A755F2,$7E7EFC82,$3D3D7A47,$6464C8AC,$5D5DBAE7,$1919322B,$7373E695, |
$6060C0A0,$81811998,$4F4F9ED1,$DCDCA37F,$22224466,$2A2A547E,$90903BAB,$88880B83, |
$46468CCA,$EEEEC729,$B8B86BD3,$1414283C,$DEDEA779,$5E5EBCE2,$0B0B161D,$DBDBAD76, |
$E0E0DB3B,$32326456,$3A3A744E,$0A0A141E,$494992DB,$06060C0A,$2424486C,$5C5CB8E4, |
$C2C29F5D,$D3D3BD6E,$ACAC43EF,$6262C4A6,$919139A8,$959531A4,$E4E4D337,$7979F28B, |
$E7E7D532,$C8C88B43,$37376E59,$6D6DDAB7,$8D8D018C,$D5D5B164,$4E4E9CD2,$A9A949E0, |
$6C6CD8B4,$5656ACFA,$F4F4F307,$EAEACF25,$6565CAAF,$7A7AF48E,$AEAE47E9,$08081018, |
$BABA6FD5,$7878F088,$25254A6F,$2E2E5C72,$1C1C3824,$A6A657F1,$B4B473C7,$C6C69751, |
$E8E8CB23,$DDDDA17C,$7474E89C,$1F1F3E21,$4B4B96DD,$BDBD61DC,$8B8B0D86,$8A8A0F85, |
$7070E090,$3E3E7C42,$B5B571C4,$6666CCAA,$484890D8,$03030605,$F6F6F701,$0E0E1C12, |
$6161C2A3,$35356A5F,$5757AEF9,$B9B969D0,$86861791,$C1C19958,$1D1D3A27,$9E9E27B9, |
$E1E1D938,$F8F8EB13,$98982BB3,$11112233,$6969D2BB,$D9D9A970,$8E8E0789,$949433A7, |
$9B9B2DB6,$1E1E3C22,$87871592,$E9E9C920,$CECE8749,$5555AAFF,$28285078,$DFDFA57A, |
$8C8C038F,$A1A159F8,$89890980,$0D0D1A17,$BFBF65DA,$E6E6D731,$424284C6,$6868D0B8, |
$414182C3,$999929B0,$2D2D5A77,$0F0F1E11,$B0B07BCB,$5454A8FC,$BBBB6DD6,$16162C3A), |
($63C6A563,$7CF8847C,$77EE9977,$7BF68D7B,$F2FF0DF2,$6BD6BD6B,$6FDEB16F,$C59154C5, |
$30605030,$01020301,$67CEA967,$2B567D2B,$FEE719FE,$D7B562D7,$AB4DE6AB,$76EC9A76, |
$CA8F45CA,$821F9D82,$C98940C9,$7DFA877D,$FAEF15FA,$59B2EB59,$478EC947,$F0FB0BF0, |
$AD41ECAD,$D4B367D4,$A25FFDA2,$AF45EAAF,$9C23BF9C,$A453F7A4,$72E49672,$C09B5BC0, |
$B775C2B7,$FDE11CFD,$933DAE93,$264C6A26,$366C5A36,$3F7E413F,$F7F502F7,$CC834FCC, |
$34685C34,$A551F4A5,$E5D134E5,$F1F908F1,$71E29371,$D8AB73D8,$31625331,$152A3F15, |
$04080C04,$C79552C7,$23466523,$C39D5EC3,$18302818,$9637A196,$050A0F05,$9A2FB59A, |
$070E0907,$12243612,$801B9B80,$E2DF3DE2,$EBCD26EB,$274E6927,$B27FCDB2,$75EA9F75, |
$09121B09,$831D9E83,$2C58742C,$1A342E1A,$1B362D1B,$6EDCB26E,$5AB4EE5A,$A05BFBA0, |
$52A4F652,$3B764D3B,$D6B761D6,$B37DCEB3,$29527B29,$E3DD3EE3,$2F5E712F,$84139784, |
$53A6F553,$D1B968D1,$00000000,$EDC12CED,$20406020,$FCE31FFC,$B179C8B1,$5BB6ED5B, |
$6AD4BE6A,$CB8D46CB,$BE67D9BE,$39724B39,$4A94DE4A,$4C98D44C,$58B0E858,$CF854ACF, |
$D0BB6BD0,$EFC52AEF,$AA4FE5AA,$FBED16FB,$4386C543,$4D9AD74D,$33665533,$85119485, |
$458ACF45,$F9E910F9,$02040602,$7FFE817F,$50A0F050,$3C78443C,$9F25BA9F,$A84BE3A8, |
$51A2F351,$A35DFEA3,$4080C040,$8F058A8F,$923FAD92,$9D21BC9D,$38704838,$F5F104F5, |
$BC63DFBC,$B677C1B6,$DAAF75DA,$21426321,$10203010,$FFE51AFF,$F3FD0EF3,$D2BF6DD2, |
$CD814CCD,$0C18140C,$13263513,$ECC32FEC,$5FBEE15F,$9735A297,$4488CC44,$172E3917, |
$C49357C4,$A755F2A7,$7EFC827E,$3D7A473D,$64C8AC64,$5DBAE75D,$19322B19,$73E69573, |
$60C0A060,$81199881,$4F9ED14F,$DCA37FDC,$22446622,$2A547E2A,$903BAB90,$880B8388, |
$468CCA46,$EEC729EE,$B86BD3B8,$14283C14,$DEA779DE,$5EBCE25E,$0B161D0B,$DBAD76DB, |
$E0DB3BE0,$32645632,$3A744E3A,$0A141E0A,$4992DB49,$060C0A06,$24486C24,$5CB8E45C, |
$C29F5DC2,$D3BD6ED3,$AC43EFAC,$62C4A662,$9139A891,$9531A495,$E4D337E4,$79F28B79, |
$E7D532E7,$C88B43C8,$376E5937,$6DDAB76D,$8D018C8D,$D5B164D5,$4E9CD24E,$A949E0A9, |
$6CD8B46C,$56ACFA56,$F4F307F4,$EACF25EA,$65CAAF65,$7AF48E7A,$AE47E9AE,$08101808, |
$BA6FD5BA,$78F08878,$254A6F25,$2E5C722E,$1C38241C,$A657F1A6,$B473C7B4,$C69751C6, |
$E8CB23E8,$DDA17CDD,$74E89C74,$1F3E211F,$4B96DD4B,$BD61DCBD,$8B0D868B,$8A0F858A, |
$70E09070,$3E7C423E,$B571C4B5,$66CCAA66,$4890D848,$03060503,$F6F701F6,$0E1C120E, |
$61C2A361,$356A5F35,$57AEF957,$B969D0B9,$86179186,$C19958C1,$1D3A271D,$9E27B99E, |
$E1D938E1,$F8EB13F8,$982BB398,$11223311,$69D2BB69,$D9A970D9,$8E07898E,$9433A794, |
$9B2DB69B,$1E3C221E,$87159287,$E9C920E9,$CE8749CE,$55AAFF55,$28507828,$DFA57ADF, |
$8C038F8C,$A159F8A1,$89098089,$0D1A170D,$BF65DABF,$E6D731E6,$4284C642,$68D0B868, |
$4182C341,$9929B099,$2D5A772D,$0F1E110F,$B07BCBB0,$54A8FC54,$BB6DD6BB,$162C3A16), |
($C6A56363,$F8847C7C,$EE997777,$F68D7B7B,$FF0DF2F2,$D6BD6B6B,$DEB16F6F,$9154C5C5, |
$60503030,$02030101,$CEA96767,$567D2B2B,$E719FEFE,$B562D7D7,$4DE6ABAB,$EC9A7676, |
$8F45CACA,$1F9D8282,$8940C9C9,$FA877D7D,$EF15FAFA,$B2EB5959,$8EC94747,$FB0BF0F0, |
$41ECADAD,$B367D4D4,$5FFDA2A2,$45EAAFAF,$23BF9C9C,$53F7A4A4,$E4967272,$9B5BC0C0, |
$75C2B7B7,$E11CFDFD,$3DAE9393,$4C6A2626,$6C5A3636,$7E413F3F,$F502F7F7,$834FCCCC, |
$685C3434,$51F4A5A5,$D134E5E5,$F908F1F1,$E2937171,$AB73D8D8,$62533131,$2A3F1515, |
$080C0404,$9552C7C7,$46652323,$9D5EC3C3,$30281818,$37A19696,$0A0F0505,$2FB59A9A, |
$0E090707,$24361212,$1B9B8080,$DF3DE2E2,$CD26EBEB,$4E692727,$7FCDB2B2,$EA9F7575, |
$121B0909,$1D9E8383,$58742C2C,$342E1A1A,$362D1B1B,$DCB26E6E,$B4EE5A5A,$5BFBA0A0, |
$A4F65252,$764D3B3B,$B761D6D6,$7DCEB3B3,$527B2929,$DD3EE3E3,$5E712F2F,$13978484, |
$A6F55353,$B968D1D1,$00000000,$C12CEDED,$40602020,$E31FFCFC,$79C8B1B1,$B6ED5B5B, |
$D4BE6A6A,$8D46CBCB,$67D9BEBE,$724B3939,$94DE4A4A,$98D44C4C,$B0E85858,$854ACFCF, |
$BB6BD0D0,$C52AEFEF,$4FE5AAAA,$ED16FBFB,$86C54343,$9AD74D4D,$66553333,$11948585, |
$8ACF4545,$E910F9F9,$04060202,$FE817F7F,$A0F05050,$78443C3C,$25BA9F9F,$4BE3A8A8, |
$A2F35151,$5DFEA3A3,$80C04040,$058A8F8F,$3FAD9292,$21BC9D9D,$70483838,$F104F5F5, |
$63DFBCBC,$77C1B6B6,$AF75DADA,$42632121,$20301010,$E51AFFFF,$FD0EF3F3,$BF6DD2D2, |
$814CCDCD,$18140C0C,$26351313,$C32FECEC,$BEE15F5F,$35A29797,$88CC4444,$2E391717, |
$9357C4C4,$55F2A7A7,$FC827E7E,$7A473D3D,$C8AC6464,$BAE75D5D,$322B1919,$E6957373, |
$C0A06060,$19988181,$9ED14F4F,$A37FDCDC,$44662222,$547E2A2A,$3BAB9090,$0B838888, |
$8CCA4646,$C729EEEE,$6BD3B8B8,$283C1414,$A779DEDE,$BCE25E5E,$161D0B0B,$AD76DBDB, |
$DB3BE0E0,$64563232,$744E3A3A,$141E0A0A,$92DB4949,$0C0A0606,$486C2424,$B8E45C5C, |
$9F5DC2C2,$BD6ED3D3,$43EFACAC,$C4A66262,$39A89191,$31A49595,$D337E4E4,$F28B7979, |
$D532E7E7,$8B43C8C8,$6E593737,$DAB76D6D,$018C8D8D,$B164D5D5,$9CD24E4E,$49E0A9A9, |
$D8B46C6C,$ACFA5656,$F307F4F4,$CF25EAEA,$CAAF6565,$F48E7A7A,$47E9AEAE,$10180808, |
$6FD5BABA,$F0887878,$4A6F2525,$5C722E2E,$38241C1C,$57F1A6A6,$73C7B4B4,$9751C6C6, |
$CB23E8E8,$A17CDDDD,$E89C7474,$3E211F1F,$96DD4B4B,$61DCBDBD,$0D868B8B,$0F858A8A, |
$E0907070,$7C423E3E,$71C4B5B5,$CCAA6666,$90D84848,$06050303,$F701F6F6,$1C120E0E, |
$C2A36161,$6A5F3535,$AEF95757,$69D0B9B9,$17918686,$9958C1C1,$3A271D1D,$27B99E9E, |
$D938E1E1,$EB13F8F8,$2BB39898,$22331111,$D2BB6969,$A970D9D9,$07898E8E,$33A79494, |
$2DB69B9B,$3C221E1E,$15928787,$C920E9E9,$8749CECE,$AAFF5555,$50782828,$A57ADFDF, |
$038F8C8C,$59F8A1A1,$09808989,$1A170D0D,$65DABFBF,$D731E6E6,$84C64242,$D0B86868, |
$82C34141,$29B09999,$5A772D2D,$1E110F0F,$7BCBB0B0,$A8FC5454,$6DD6BBBB,$2C3A1616), |
($50A7F451,$5365417E,$C3A4171A,$965E273A,$CB6BAB3B,$F1459D1F,$AB58FAAC,$9303E34B, |
$55FA3020,$F66D76AD,$9176CC88,$254C02F5,$FCD7E54F,$D7CB2AC5,$80443526,$8FA362B5, |
$495AB1DE,$671BBA25,$980EEA45,$E1C0FE5D,$02752FC3,$12F04C81,$A397468D,$C6F9D36B, |
$E75F8F03,$959C9215,$EB7A6DBF,$DA595295,$2D83BED4,$D3217458,$2969E049,$44C8C98E, |
$6A89C275,$78798EF4,$6B3E5899,$DD71B927,$B64FE1BE,$17AD88F0,$66AC20C9,$B43ACE7D, |
$184ADF63,$82311AE5,$60335197,$457F5362,$E07764B1,$84AE6BBB,$1CA081FE,$942B08F9, |
$58684870,$19FD458F,$876CDE94,$B7F87B52,$23D373AB,$E2024B72,$578F1FE3,$2AAB5566, |
$0728EBB2,$03C2B52F,$9A7BC586,$A50837D3,$F2872830,$B2A5BF23,$BA6A0302,$5C8216ED, |
$2B1CCF8A,$92B479A7,$F0F207F3,$A1E2694E,$CDF4DA65,$D5BE0506,$1F6234D1,$8AFEA6C4, |
$9D532E34,$A055F3A2,$32E18A05,$75EBF6A4,$39EC830B,$AAEF6040,$069F715E,$51106EBD, |
$F98A213E,$3D06DD96,$AE053EDD,$46BDE64D,$B58D5491,$055DC471,$6FD40604,$FF155060, |
$24FB9819,$97E9BDD6,$CC434089,$779ED967,$BD42E8B0,$888B8907,$385B19E7,$DBEEC879, |
$470A7CA1,$E90F427C,$C91E84F8,$00000000,$83868009,$48ED2B32,$AC70111E,$4E725A6C, |
$FBFF0EFD,$5638850F,$1ED5AE3D,$27392D36,$64D90F0A,$21A65C68,$D1545B9B,$3A2E3624, |
$B1670A0C,$0FE75793,$D296EEB4,$9E919B1B,$4FC5C080,$A220DC61,$694B775A,$161A121C, |
$0ABA93E2,$E52AA0C0,$43E0223C,$1D171B12,$0B0D090E,$ADC78BF2,$B9A8B62D,$C8A91E14, |
$8519F157,$4C0775AF,$BBDD99EE,$FD607FA3,$9F2601F7,$BCF5725C,$C53B6644,$347EFB5B, |
$7629438B,$DCC623CB,$68FCEDB6,$63F1E4B8,$CADC31D7,$10856342,$40229713,$2011C684, |
$7D244A85,$F83DBBD2,$1132F9AE,$6DA129C7,$4B2F9E1D,$F330B2DC,$EC52860D,$D0E3C177, |
$6C16B32B,$99B970A9,$FA489411,$2264E947,$C48CFCA8,$1A3FF0A0,$D82C7D56,$EF903322, |
$C74E4987,$C1D138D9,$FEA2CA8C,$360BD498,$CF81F5A6,$28DE7AA5,$268EB7DA,$A4BFAD3F, |
$E49D3A2C,$0D927850,$9BCC5F6A,$62467E54,$C2138DF6,$E8B8D890,$5EF7392E,$F5AFC382, |
$BE805D9F,$7C93D069,$A92DD56F,$B31225CF,$3B99ACC8,$A77D1810,$6E639CE8,$7BBB3BDB, |
$097826CD,$F418596E,$01B79AEC,$A89A4F83,$656E95E6,$7EE6FFAA,$08CFBC21,$E6E815EF, |
$D99BE7BA,$CE366F4A,$D4099FEA,$D67CB029,$AFB2A431,$31233F2A,$3094A5C6,$C066A235, |
$37BC4E74,$A6CA82FC,$B0D090E0,$15D8A733,$4A9804F1,$F7DAEC41,$0E50CD7F,$2FF69117, |
$8DD64D76,$4DB0EF43,$544DAACC,$DF0496E4,$E3B5D19E,$1B886A4C,$B81F2CC1,$7F516546, |
$04EA5E9D,$5D358C01,$737487FA,$2E410BFB,$5A1D67B3,$52D2DB92,$335610E9,$1347D66D, |
$8C61D79A,$7A0CA137,$8E14F859,$893C13EB,$EE27A9CE,$35C961B7,$EDE51CE1,$3CB1477A, |
$59DFD29C,$3F73F255,$79CE1418,$BF37C773,$EACDF753,$5BAAFD5F,$146F3DDF,$86DB4478, |
$81F3AFCA,$3EC468B9,$2C342438,$5F40A3C2,$72C31D16,$0C25E2BC,$8B493C28,$41950DFF, |
$7101A839,$DEB30C08,$9CE4B4D8,$90C15664,$6184CB7B,$70B632D5,$745C6C48,$4257B8D0), |
($A7F45150,$65417E53,$A4171AC3,$5E273A96,$6BAB3BCB,$459D1FF1,$58FAACAB,$03E34B93, |
$FA302055,$6D76ADF6,$76CC8891,$4C02F525,$D7E54FFC,$CB2AC5D7,$44352680,$A362B58F, |
$5AB1DE49,$1BBA2567,$0EEA4598,$C0FE5DE1,$752FC302,$F04C8112,$97468DA3,$F9D36BC6, |
$5F8F03E7,$9C921595,$7A6DBFEB,$595295DA,$83BED42D,$217458D3,$69E04929,$C8C98E44, |
$89C2756A,$798EF478,$3E58996B,$71B927DD,$4FE1BEB6,$AD88F017,$AC20C966,$3ACE7DB4, |
$4ADF6318,$311AE582,$33519760,$7F536245,$7764B1E0,$AE6BBB84,$A081FE1C,$2B08F994, |
$68487058,$FD458F19,$6CDE9487,$F87B52B7,$D373AB23,$024B72E2,$8F1FE357,$AB55662A, |
$28EBB207,$C2B52F03,$7BC5869A,$0837D3A5,$872830F2,$A5BF23B2,$6A0302BA,$8216ED5C, |
$1CCF8A2B,$B479A792,$F207F3F0,$E2694EA1,$F4DA65CD,$BE0506D5,$6234D11F,$FEA6C48A, |
$532E349D,$55F3A2A0,$E18A0532,$EBF6A475,$EC830B39,$EF6040AA,$9F715E06,$106EBD51, |
$8A213EF9,$06DD963D,$053EDDAE,$BDE64D46,$8D5491B5,$5DC47105,$D406046F,$155060FF, |
$FB981924,$E9BDD697,$434089CC,$9ED96777,$42E8B0BD,$8B890788,$5B19E738,$EEC879DB, |
$0A7CA147,$0F427CE9,$1E84F8C9,$00000000,$86800983,$ED2B3248,$70111EAC,$725A6C4E, |
$FF0EFDFB,$38850F56,$D5AE3D1E,$392D3627,$D90F0A64,$A65C6821,$545B9BD1,$2E36243A, |
$670A0CB1,$E757930F,$96EEB4D2,$919B1B9E,$C5C0804F,$20DC61A2,$4B775A69,$1A121C16, |
$BA93E20A,$2AA0C0E5,$E0223C43,$171B121D,$0D090E0B,$C78BF2AD,$A8B62DB9,$A91E14C8, |
$19F15785,$0775AF4C,$DD99EEBB,$607FA3FD,$2601F79F,$F5725CBC,$3B6644C5,$7EFB5B34, |
$29438B76,$C623CBDC,$FCEDB668,$F1E4B863,$DC31D7CA,$85634210,$22971340,$11C68420, |
$244A857D,$3DBBD2F8,$32F9AE11,$A129C76D,$2F9E1D4B,$30B2DCF3,$52860DEC,$E3C177D0, |
$16B32B6C,$B970A999,$489411FA,$64E94722,$8CFCA8C4,$3FF0A01A,$2C7D56D8,$903322EF, |
$4E4987C7,$D138D9C1,$A2CA8CFE,$0BD49836,$81F5A6CF,$DE7AA528,$8EB7DA26,$BFAD3FA4, |
$9D3A2CE4,$9278500D,$CC5F6A9B,$467E5462,$138DF6C2,$B8D890E8,$F7392E5E,$AFC382F5, |
$805D9FBE,$93D0697C,$2DD56FA9,$1225CFB3,$99ACC83B,$7D1810A7,$639CE86E,$BB3BDB7B, |
$7826CD09,$18596EF4,$B79AEC01,$9A4F83A8,$6E95E665,$E6FFAA7E,$CFBC2108,$E815EFE6, |
$9BE7BAD9,$366F4ACE,$099FEAD4,$7CB029D6,$B2A431AF,$233F2A31,$94A5C630,$66A235C0, |
$BC4E7437,$CA82FCA6,$D090E0B0,$D8A73315,$9804F14A,$DAEC41F7,$50CD7F0E,$F691172F, |
$D64D768D,$B0EF434D,$4DAACC54,$0496E4DF,$B5D19EE3,$886A4C1B,$1F2CC1B8,$5165467F, |
$EA5E9D04,$358C015D,$7487FA73,$410BFB2E,$1D67B35A,$D2DB9252,$5610E933,$47D66D13, |
$61D79A8C,$0CA1377A,$14F8598E,$3C13EB89,$27A9CEEE,$C961B735,$E51CE1ED,$B1477A3C, |
$DFD29C59,$73F2553F,$CE141879,$37C773BF,$CDF753EA,$AAFD5F5B,$6F3DDF14,$DB447886, |
$F3AFCA81,$C468B93E,$3424382C,$40A3C25F,$C31D1672,$25E2BC0C,$493C288B,$950DFF41, |
$01A83971,$B30C08DE,$E4B4D89C,$C1566490,$84CB7B61,$B632D570,$5C6C4874,$57B8D042), |
($F45150A7,$417E5365,$171AC3A4,$273A965E,$AB3BCB6B,$9D1FF145,$FAACAB58,$E34B9303, |
$302055FA,$76ADF66D,$CC889176,$02F5254C,$E54FFCD7,$2AC5D7CB,$35268044,$62B58FA3, |
$B1DE495A,$BA25671B,$EA45980E,$FE5DE1C0,$2FC30275,$4C8112F0,$468DA397,$D36BC6F9, |
$8F03E75F,$9215959C,$6DBFEB7A,$5295DA59,$BED42D83,$7458D321,$E0492969,$C98E44C8, |
$C2756A89,$8EF47879,$58996B3E,$B927DD71,$E1BEB64F,$88F017AD,$20C966AC,$CE7DB43A, |
$DF63184A,$1AE58231,$51976033,$5362457F,$64B1E077,$6BBB84AE,$81FE1CA0,$08F9942B, |
$48705868,$458F19FD,$DE94876C,$7B52B7F8,$73AB23D3,$4B72E202,$1FE3578F,$55662AAB, |
$EBB20728,$B52F03C2,$C5869A7B,$37D3A508,$2830F287,$BF23B2A5,$0302BA6A,$16ED5C82, |
$CF8A2B1C,$79A792B4,$07F3F0F2,$694EA1E2,$DA65CDF4,$0506D5BE,$34D11F62,$A6C48AFE, |
$2E349D53,$F3A2A055,$8A0532E1,$F6A475EB,$830B39EC,$6040AAEF,$715E069F,$6EBD5110, |
$213EF98A,$DD963D06,$3EDDAE05,$E64D46BD,$5491B58D,$C471055D,$06046FD4,$5060FF15, |
$981924FB,$BDD697E9,$4089CC43,$D967779E,$E8B0BD42,$8907888B,$19E7385B,$C879DBEE, |
$7CA1470A,$427CE90F,$84F8C91E,$00000000,$80098386,$2B3248ED,$111EAC70,$5A6C4E72, |
$0EFDFBFF,$850F5638,$AE3D1ED5,$2D362739,$0F0A64D9,$5C6821A6,$5B9BD154,$36243A2E, |
$0A0CB167,$57930FE7,$EEB4D296,$9B1B9E91,$C0804FC5,$DC61A220,$775A694B,$121C161A, |
$93E20ABA,$A0C0E52A,$223C43E0,$1B121D17,$090E0B0D,$8BF2ADC7,$B62DB9A8,$1E14C8A9, |
$F1578519,$75AF4C07,$99EEBBDD,$7FA3FD60,$01F79F26,$725CBCF5,$6644C53B,$FB5B347E, |
$438B7629,$23CBDCC6,$EDB668FC,$E4B863F1,$31D7CADC,$63421085,$97134022,$C6842011, |
$4A857D24,$BBD2F83D,$F9AE1132,$29C76DA1,$9E1D4B2F,$B2DCF330,$860DEC52,$C177D0E3, |
$B32B6C16,$70A999B9,$9411FA48,$E9472264,$FCA8C48C,$F0A01A3F,$7D56D82C,$3322EF90, |
$4987C74E,$38D9C1D1,$CA8CFEA2,$D498360B,$F5A6CF81,$7AA528DE,$B7DA268E,$AD3FA4BF, |
$3A2CE49D,$78500D92,$5F6A9BCC,$7E546246,$8DF6C213,$D890E8B8,$392E5EF7,$C382F5AF, |
$5D9FBE80,$D0697C93,$D56FA92D,$25CFB312,$ACC83B99,$1810A77D,$9CE86E63,$3BDB7BBB, |
$26CD0978,$596EF418,$9AEC01B7,$4F83A89A,$95E6656E,$FFAA7EE6,$BC2108CF,$15EFE6E8, |
$E7BAD99B,$6F4ACE36,$9FEAD409,$B029D67C,$A431AFB2,$3F2A3123,$A5C63094,$A235C066, |
$4E7437BC,$82FCA6CA,$90E0B0D0,$A73315D8,$04F14A98,$EC41F7DA,$CD7F0E50,$91172FF6, |
$4D768DD6,$EF434DB0,$AACC544D,$96E4DF04,$D19EE3B5,$6A4C1B88,$2CC1B81F,$65467F51, |
$5E9D04EA,$8C015D35,$87FA7374,$0BFB2E41,$67B35A1D,$DB9252D2,$10E93356,$D66D1347, |
$D79A8C61,$A1377A0C,$F8598E14,$13EB893C,$A9CEEE27,$61B735C9,$1CE1EDE5,$477A3CB1, |
$D29C59DF,$F2553F73,$141879CE,$C773BF37,$F753EACD,$FD5F5BAA,$3DDF146F,$447886DB, |
$AFCA81F3,$68B93EC4,$24382C34,$A3C25F40,$1D1672C3,$E2BC0C25,$3C288B49,$0DFF4195, |
$A8397101,$0C08DEB3,$B4D89CE4,$566490C1,$CB7B6184,$32D570B6,$6C48745C,$B8D04257), |
($5150A7F4,$7E536541,$1AC3A417,$3A965E27,$3BCB6BAB,$1FF1459D,$ACAB58FA,$4B9303E3, |
$2055FA30,$ADF66D76,$889176CC,$F5254C02,$4FFCD7E5,$C5D7CB2A,$26804435,$B58FA362, |
$DE495AB1,$25671BBA,$45980EEA,$5DE1C0FE,$C302752F,$8112F04C,$8DA39746,$6BC6F9D3, |
$03E75F8F,$15959C92,$BFEB7A6D,$95DA5952,$D42D83BE,$58D32174,$492969E0,$8E44C8C9, |
$756A89C2,$F478798E,$996B3E58,$27DD71B9,$BEB64FE1,$F017AD88,$C966AC20,$7DB43ACE, |
$63184ADF,$E582311A,$97603351,$62457F53,$B1E07764,$BB84AE6B,$FE1CA081,$F9942B08, |
$70586848,$8F19FD45,$94876CDE,$52B7F87B,$AB23D373,$72E2024B,$E3578F1F,$662AAB55, |
$B20728EB,$2F03C2B5,$869A7BC5,$D3A50837,$30F28728,$23B2A5BF,$02BA6A03,$ED5C8216, |
$8A2B1CCF,$A792B479,$F3F0F207,$4EA1E269,$65CDF4DA,$06D5BE05,$D11F6234,$C48AFEA6, |
$349D532E,$A2A055F3,$0532E18A,$A475EBF6,$0B39EC83,$40AAEF60,$5E069F71,$BD51106E, |
$3EF98A21,$963D06DD,$DDAE053E,$4D46BDE6,$91B58D54,$71055DC4,$046FD406,$60FF1550, |
$1924FB98,$D697E9BD,$89CC4340,$67779ED9,$B0BD42E8,$07888B89,$E7385B19,$79DBEEC8, |
$A1470A7C,$7CE90F42,$F8C91E84,$00000000,$09838680,$3248ED2B,$1EAC7011,$6C4E725A, |
$FDFBFF0E,$0F563885,$3D1ED5AE,$3627392D,$0A64D90F,$6821A65C,$9BD1545B,$243A2E36, |
$0CB1670A,$930FE757,$B4D296EE,$1B9E919B,$804FC5C0,$61A220DC,$5A694B77,$1C161A12, |
$E20ABA93,$C0E52AA0,$3C43E022,$121D171B,$0E0B0D09,$F2ADC78B,$2DB9A8B6,$14C8A91E, |
$578519F1,$AF4C0775,$EEBBDD99,$A3FD607F,$F79F2601,$5CBCF572,$44C53B66,$5B347EFB, |
$8B762943,$CBDCC623,$B668FCED,$B863F1E4,$D7CADC31,$42108563,$13402297,$842011C6, |
$857D244A,$D2F83DBB,$AE1132F9,$C76DA129,$1D4B2F9E,$DCF330B2,$0DEC5286,$77D0E3C1, |
$2B6C16B3,$A999B970,$11FA4894,$472264E9,$A8C48CFC,$A01A3FF0,$56D82C7D,$22EF9033, |
$87C74E49,$D9C1D138,$8CFEA2CA,$98360BD4,$A6CF81F5,$A528DE7A,$DA268EB7,$3FA4BFAD, |
$2CE49D3A,$500D9278,$6A9BCC5F,$5462467E,$F6C2138D,$90E8B8D8,$2E5EF739,$82F5AFC3, |
$9FBE805D,$697C93D0,$6FA92DD5,$CFB31225,$C83B99AC,$10A77D18,$E86E639C,$DB7BBB3B, |
$CD097826,$6EF41859,$EC01B79A,$83A89A4F,$E6656E95,$AA7EE6FF,$2108CFBC,$EFE6E815, |
$BAD99BE7,$4ACE366F,$EAD4099F,$29D67CB0,$31AFB2A4,$2A31233F,$C63094A5,$35C066A2, |
$7437BC4E,$FCA6CA82,$E0B0D090,$3315D8A7,$F14A9804,$41F7DAEC,$7F0E50CD,$172FF691, |
$768DD64D,$434DB0EF,$CC544DAA,$E4DF0496,$9EE3B5D1,$4C1B886A,$C1B81F2C,$467F5165, |
$9D04EA5E,$015D358C,$FA737487,$FB2E410B,$B35A1D67,$9252D2DB,$E9335610,$6D1347D6, |
$9A8C61D7,$377A0CA1,$598E14F8,$EB893C13,$CEEE27A9,$B735C961,$E1EDE51C,$7A3CB147, |
$9C59DFD2,$553F73F2,$1879CE14,$73BF37C7,$53EACDF7,$5F5BAAFD,$DF146F3D,$7886DB44, |
$CA81F3AF,$B93EC468,$382C3424,$C25F40A3,$1672C31D,$BC0C25E2,$288B493C,$FF41950D, |
$397101A8,$08DEB30C,$D89CE4B4,$6490C156,$7B6184CB,$D570B632,$48745C6C,$D04257B8) |
); |
{ |
Rijndael_Key: array[0..255] of UInt32 = ( |
$00000000,$0B0D090E,$161A121C,$1D171B12,$2C342438,$27392D36,$3A2E3624,$31233F2A, |
$58684870,$5365417E,$4E725A6C,$457F5362,$745C6C48,$7F516546,$62467E54,$694B775A, |
$B0D090E0,$BBDD99EE,$A6CA82FC,$ADC78BF2,$9CE4B4D8,$97E9BDD6,$8AFEA6C4,$81F3AFCA, |
$E8B8D890,$E3B5D19E,$FEA2CA8C,$F5AFC382,$C48CFCA8,$CF81F5A6,$D296EEB4,$D99BE7BA, |
$7BBB3BDB,$70B632D5,$6DA129C7,$66AC20C9,$578F1FE3,$5C8216ED,$41950DFF,$4A9804F1, |
$23D373AB,$28DE7AA5,$35C961B7,$3EC468B9,$0FE75793,$04EA5E9D,$19FD458F,$12F04C81, |
$CB6BAB3B,$C066A235,$DD71B927,$D67CB029,$E75F8F03,$EC52860D,$F1459D1F,$FA489411, |
$9303E34B,$980EEA45,$8519F157,$8E14F859,$BF37C773,$B43ACE7D,$A92DD56F,$A220DC61, |
$F66D76AD,$FD607FA3,$E07764B1,$EB7A6DBF,$DA595295,$D1545B9B,$CC434089,$C74E4987, |
$AE053EDD,$A50837D3,$B81F2CC1,$B31225CF,$82311AE5,$893C13EB,$942B08F9,$9F2601F7, |
$46BDE64D,$4DB0EF43,$50A7F451,$5BAAFD5F,$6A89C275,$6184CB7B,$7C93D069,$779ED967, |
$1ED5AE3D,$15D8A733,$08CFBC21,$03C2B52F,$32E18A05,$39EC830B,$24FB9819,$2FF69117, |
$8DD64D76,$86DB4478,$9BCC5F6A,$90C15664,$A1E2694E,$AAEF6040,$B7F87B52,$BCF5725C, |
$D5BE0506,$DEB30C08,$C3A4171A,$C8A91E14,$F98A213E,$F2872830,$EF903322,$E49D3A2C, |
$3D06DD96,$360BD498,$2B1CCF8A,$2011C684,$1132F9AE,$1A3FF0A0,$0728EBB2,$0C25E2BC, |
$656E95E6,$6E639CE8,$737487FA,$78798EF4,$495AB1DE,$4257B8D0,$5F40A3C2,$544DAACC, |
$F7DAEC41,$FCD7E54F,$E1C0FE5D,$EACDF753,$DBEEC879,$D0E3C177,$CDF4DA65,$C6F9D36B, |
$AFB2A431,$A4BFAD3F,$B9A8B62D,$B2A5BF23,$83868009,$888B8907,$959C9215,$9E919B1B, |
$470A7CA1,$4C0775AF,$51106EBD,$5A1D67B3,$6B3E5899,$60335197,$7D244A85,$7629438B, |
$1F6234D1,$146F3DDF,$097826CD,$02752FC3,$335610E9,$385B19E7,$254C02F5,$2E410BFB, |
$8C61D79A,$876CDE94,$9A7BC586,$9176CC88,$A055F3A2,$AB58FAAC,$B64FE1BE,$BD42E8B0, |
$D4099FEA,$DF0496E4,$C2138DF6,$C91E84F8,$F83DBBD2,$F330B2DC,$EE27A9CE,$E52AA0C0, |
$3CB1477A,$37BC4E74,$2AAB5566,$21A65C68,$10856342,$1B886A4C,$069F715E,$0D927850, |
$64D90F0A,$6FD40604,$72C31D16,$79CE1418,$48ED2B32,$43E0223C,$5EF7392E,$55FA3020, |
$01B79AEC,$0ABA93E2,$17AD88F0,$1CA081FE,$2D83BED4,$268EB7DA,$3B99ACC8,$3094A5C6, |
$59DFD29C,$52D2DB92,$4FC5C080,$44C8C98E,$75EBF6A4,$7EE6FFAA,$63F1E4B8,$68FCEDB6, |
$B1670A0C,$BA6A0302,$A77D1810,$AC70111E,$9D532E34,$965E273A,$8B493C28,$80443526, |
$E90F427C,$E2024B72,$FF155060,$F418596E,$C53B6644,$CE366F4A,$D3217458,$D82C7D56, |
$7A0CA137,$7101A839,$6C16B32B,$671BBA25,$5638850F,$5D358C01,$40229713,$4B2F9E1D, |
$2264E947,$2969E049,$347EFB5B,$3F73F255,$0E50CD7F,$055DC471,$184ADF63,$1347D66D, |
$CADC31D7,$C1D138D9,$DCC623CB,$D7CB2AC5,$E6E815EF,$EDE51CE1,$F0F207F3,$FBFF0EFD, |
$92B479A7,$99B970A9,$84AE6BBB,$8FA362B5,$BE805D9F,$B58D5491,$A89A4F83,$A397468D |
); |
} |
Twofish_8x8: array[0..1, 0..255] of Byte = ( |
($A9,$67,$B3,$E8,$04,$FD,$A3,$76,$9A,$92,$80,$78,$E4,$DD,$D1,$38, |
$0D,$C6,$35,$98,$18,$F7,$EC,$6C,$43,$75,$37,$26,$FA,$13,$94,$48, |
$F2,$D0,$8B,$30,$84,$54,$DF,$23,$19,$5B,$3D,$59,$F3,$AE,$A2,$82, |
$63,$01,$83,$2E,$D9,$51,$9B,$7C,$A6,$EB,$A5,$BE,$16,$0C,$E3,$61, |
$C0,$8C,$3A,$F5,$73,$2C,$25,$0B,$BB,$4E,$89,$6B,$53,$6A,$B4,$F1, |
$E1,$E6,$BD,$45,$E2,$F4,$B6,$66,$CC,$95,$03,$56,$D4,$1C,$1E,$D7, |
$FB,$C3,$8E,$B5,$E9,$CF,$BF,$BA,$EA,$77,$39,$AF,$33,$C9,$62,$71, |
$81,$79,$09,$AD,$24,$CD,$F9,$D8,$E5,$C5,$B9,$4D,$44,$08,$86,$E7, |
$A1,$1D,$AA,$ED,$06,$70,$B2,$D2,$41,$7B,$A0,$11,$31,$C2,$27,$90, |
$20,$F6,$60,$FF,$96,$5C,$B1,$AB,$9E,$9C,$52,$1B,$5F,$93,$0A,$EF, |
$91,$85,$49,$EE,$2D,$4F,$8F,$3B,$47,$87,$6D,$46,$D6,$3E,$69,$64, |
$2A,$CE,$CB,$2F,$FC,$97,$05,$7A,$AC,$7F,$D5,$1A,$4B,$0E,$A7,$5A, |
$28,$14,$3F,$29,$88,$3C,$4C,$02,$B8,$DA,$B0,$17,$55,$1F,$8A,$7D, |
$57,$C7,$8D,$74,$B7,$C4,$9F,$72,$7E,$15,$22,$12,$58,$07,$99,$34, |
$6E,$50,$DE,$68,$65,$BC,$DB,$F8,$C8,$A8,$2B,$40,$DC,$FE,$32,$A4, |
$CA,$10,$21,$F0,$D3,$5D,$0F,$00,$6F,$9D,$36,$42,$4A,$5E,$C1,$E0), |
($75,$F3,$C6,$F4,$DB,$7B,$FB,$C8,$4A,$D3,$E6,$6B,$45,$7D,$E8,$4B, |
$D6,$32,$D8,$FD,$37,$71,$F1,$E1,$30,$0F,$F8,$1B,$87,$FA,$06,$3F, |
$5E,$BA,$AE,$5B,$8A,$00,$BC,$9D,$6D,$C1,$B1,$0E,$80,$5D,$D2,$D5, |
$A0,$84,$07,$14,$B5,$90,$2C,$A3,$B2,$73,$4C,$54,$92,$74,$36,$51, |
$38,$B0,$BD,$5A,$FC,$60,$62,$96,$6C,$42,$F7,$10,$7C,$28,$27,$8C, |
$13,$95,$9C,$C7,$24,$46,$3B,$70,$CA,$E3,$85,$CB,$11,$D0,$93,$B8, |
$A6,$83,$20,$FF,$9F,$77,$C3,$CC,$03,$6F,$08,$BF,$40,$E7,$2B,$E2, |
$79,$0C,$AA,$82,$41,$3A,$EA,$B9,$E4,$9A,$A4,$97,$7E,$DA,$7A,$17, |
$66,$94,$A1,$1D,$3D,$F0,$DE,$B3,$0B,$72,$A7,$1C,$EF,$D1,$53,$3E, |
$8F,$33,$26,$5F,$EC,$76,$2A,$49,$81,$88,$EE,$21,$C4,$1A,$EB,$D9, |
$C5,$39,$99,$CD,$AD,$31,$8B,$01,$18,$23,$DD,$1F,$4E,$2D,$F9,$48, |
$4F,$F2,$65,$8E,$78,$5C,$58,$19,$8D,$E5,$98,$57,$67,$7F,$05,$64, |
$AF,$63,$B6,$FE,$F5,$B7,$3C,$A5,$CE,$E9,$68,$44,$E0,$4D,$43,$69, |
$29,$2E,$AC,$15,$59,$A8,$0A,$9E,$6E,$47,$DF,$34,$35,$6A,$CF,$DC, |
$22,$C9,$C0,$9B,$89,$D4,$ED,$AB,$12,$A2,$0D,$52,$BB,$02,$2F,$A9, |
$D7,$61,$1E,$B4,$50,$04,$F6,$C2,$16,$25,$86,$56,$55,$09,$BE,$91) |
); |
Twofish_Data: array[0..3, 0..255] of UInt32 = ( |
($BCBC3275,$ECEC21F3,$202043C6,$B3B3C9F4,$DADA03DB,$02028B7B,$E2E22BFB,$9E9EFAC8, |
$C9C9EC4A,$D4D409D3,$18186BE6,$1E1E9F6B,$98980E45,$B2B2387D,$A6A6D2E8,$2626B74B, |
$3C3C57D6,$93938A32,$8282EED8,$525298FD,$7B7BD437,$BBBB3771,$5B5B97F1,$474783E1, |
$24243C30,$5151E20F,$BABAC6F8,$4A4AF31B,$BFBF4887,$0D0D70FA,$B0B0B306,$7575DE3F, |
$D2D2FD5E,$7D7D20BA,$666631AE,$3A3AA35B,$59591C8A,$00000000,$CDCD93BC,$1A1AE09D, |
$AEAE2C6D,$7F7FABC1,$2B2BC7B1,$BEBEB90E,$E0E0A080,$8A8A105D,$3B3B52D2,$6464BAD5, |
$D8D888A0,$E7E7A584,$5F5FE807,$1B1B1114,$2C2CC2B5,$FCFCB490,$3131272C,$808065A3, |
$73732AB2,$0C0C8173,$79795F4C,$6B6B4154,$4B4B0292,$53536974,$94948F36,$83831F51, |
$2A2A3638,$C4C49CB0,$2222C8BD,$D5D5F85A,$BDBDC3FC,$48487860,$FFFFCE62,$4C4C0796, |
$4141776C,$C7C7E642,$EBEB24F7,$1C1C1410,$5D5D637C,$36362228,$6767C027,$E9E9AF8C, |
$4444F913,$1414EA95,$F5F5BB9C,$CFCF18C7,$3F3F2D24,$C0C0E346,$7272DB3B,$54546C70, |
$29294CCA,$F0F035E3,$0808FE85,$C6C617CB,$F3F34F11,$8C8CE4D0,$A4A45993,$CACA96B8, |
$68683BA6,$B8B84D83,$38382820,$E5E52EFF,$ADAD569F,$0B0B8477,$C8C81DC3,$9999FFCC, |
$5858ED03,$19199A6F,$0E0E0A08,$95957EBF,$70705040,$F7F730E7,$6E6ECF2B,$1F1F6EE2, |
$B5B53D79,$09090F0C,$616134AA,$57571682,$9F9F0B41,$9D9D803A,$111164EA,$2525CDB9, |
$AFAFDDE4,$4545089A,$DFDF8DA4,$A3A35C97,$EAEAD57E,$353558DA,$EDEDD07A,$4343FC17, |
$F8F8CB66,$FBFBB194,$3737D3A1,$FAFA401D,$C2C2683D,$B4B4CCF0,$32325DDE,$9C9C71B3, |
$5656E70B,$E3E3DA72,$878760A7,$15151B1C,$F9F93AEF,$6363BFD1,$3434A953,$9A9A853E, |
$B1B1428F,$7C7CD133,$88889B26,$3D3DA65F,$A1A1D7EC,$E4E4DF76,$8181942A,$91910149, |
$0F0FFB81,$EEEEAA88,$161661EE,$D7D77321,$9797F5C4,$A5A5A81A,$FEFE3FEB,$6D6DB5D9, |
$7878AEC5,$C5C56D39,$1D1DE599,$7676A4CD,$3E3EDCAD,$CBCB6731,$B6B6478B,$EFEF5B01, |
$12121E18,$6060C523,$6A6AB0DD,$4D4DF61F,$CECEE94E,$DEDE7C2D,$55559DF9,$7E7E5A48, |
$2121B24F,$03037AF2,$A0A02665,$5E5E198E,$5A5A6678,$65654B5C,$62624E58,$FDFD4519, |
$0606F48D,$404086E5,$F2F2BE98,$3333AC57,$17179067,$05058E7F,$E8E85E05,$4F4F7D64, |
$89896AAF,$10109563,$74742FB6,$0A0A75FE,$5C5C92F5,$9B9B74B7,$2D2D333C,$3030D6A5, |
$2E2E49CE,$494989E9,$46467268,$77775544,$A8A8D8E0,$9696044D,$2828BD43,$A9A92969, |
$D9D97929,$8686912E,$D1D187AC,$F4F44A15,$8D8D1559,$D6D682A8,$B9B9BC0A,$42420D9E, |
$F6F6C16E,$2F2FB847,$DDDD06DF,$23233934,$CCCC6235,$F1F1C46A,$C1C112CF,$8585EBDC, |
$8F8F9E22,$7171A1C9,$9090F0C0,$AAAA539B,$0101F189,$8B8BE1D4,$4E4E8CED,$8E8E6FAB, |
$ABABA212,$6F6F3EA2,$E6E6540D,$DBDBF252,$92927BBB,$B7B7B602,$6969CA2F,$3939D9A9, |
$D3D30CD7,$A7A72361,$A2A2AD1E,$C3C399B4,$6C6C4450,$07070504,$04047FF6,$272746C2, |
$ACACA716,$D0D07625,$50501386,$DCDCF756,$84841A55,$E1E15109,$7A7A25BE,$1313EF91), |
($A9D93939,$67901717,$B3719C9C,$E8D2A6A6,$04050707,$FD985252,$A3658080,$76DFE4E4, |
$9A084545,$92024B4B,$80A0E0E0,$78665A5A,$E4DDAFAF,$DDB06A6A,$D1BF6363,$38362A2A, |
$0D54E6E6,$C6432020,$3562CCCC,$98BEF2F2,$181E1212,$F724EBEB,$ECD7A1A1,$6C774141, |
$43BD2828,$7532BCBC,$37D47B7B,$269B8888,$FA700D0D,$13F94444,$94B1FBFB,$485A7E7E, |
$F27A0303,$D0E48C8C,$8B47B6B6,$303C2424,$84A5E7E7,$54416B6B,$DF06DDDD,$23C56060, |
$1945FDFD,$5BA33A3A,$3D68C2C2,$59158D8D,$F321ECEC,$AE316666,$A23E6F6F,$82165757, |
$63951010,$015BEFEF,$834DB8B8,$2E918686,$D9B56D6D,$511F8383,$9B53AAAA,$7C635D5D, |
$A63B6868,$EB3FFEFE,$A5D63030,$BE257A7A,$16A7ACAC,$0C0F0909,$E335F0F0,$6123A7A7, |
$C0F09090,$8CAFE9E9,$3A809D9D,$F5925C5C,$73810C0C,$2C273131,$2576D0D0,$0BE75656, |
$BB7B9292,$4EE9CECE,$89F10101,$6B9F1E1E,$53A93434,$6AC4F1F1,$B499C3C3,$F1975B5B, |
$E1834747,$E66B1818,$BDC82222,$450E9898,$E26E1F1F,$F4C9B3B3,$B62F7474,$66CBF8F8, |
$CCFF9999,$95EA1414,$03ED5858,$56F7DCDC,$D4E18B8B,$1C1B1515,$1EADA2A2,$D70CD3D3, |
$FB2BE2E2,$C31DC8C8,$8E195E5E,$B5C22C2C,$E9894949,$CF12C1C1,$BF7E9595,$BA207D7D, |
$EA641111,$77840B0B,$396DC5C5,$AF6A8989,$33D17C7C,$C9A17171,$62CEFFFF,$7137BBBB, |
$81FB0F0F,$793DB5B5,$0951E1E1,$ADDC3E3E,$242D3F3F,$CDA47676,$F99D5555,$D8EE8282, |
$E5864040,$C5AE7878,$B9CD2525,$4D049696,$44557777,$080A0E0E,$86135050,$E730F7F7, |
$A1D33737,$1D40FAFA,$AA346161,$ED8C4E4E,$06B3B0B0,$706C5454,$B22A7373,$D2523B3B, |
$410B9F9F,$7B8B0202,$A088D8D8,$114FF3F3,$3167CBCB,$C2462727,$27C06767,$90B4FCFC, |
$20283838,$F67F0404,$60784848,$FF2EE5E5,$96074C4C,$5C4B6565,$B1C72B2B,$AB6F8E8E, |
$9E0D4242,$9CBBF5F5,$52F2DBDB,$1BF34A4A,$5FA63D3D,$9359A4A4,$0ABCB9B9,$EF3AF9F9, |
$91EF1313,$85FE0808,$49019191,$EE611616,$2D7CDEDE,$4FB22121,$8F42B1B1,$3BDB7272, |
$47B82F2F,$8748BFBF,$6D2CAEAE,$46E3C0C0,$D6573C3C,$3E859A9A,$6929A9A9,$647D4F4F, |
$2A948181,$CE492E2E,$CB17C6C6,$2FCA6969,$FCC3BDBD,$975CA3A3,$055EE8E8,$7AD0EDED, |
$AC87D1D1,$7F8E0505,$D5BA6464,$1AA8A5A5,$4BB72626,$0EB9BEBE,$A7608787,$5AF8D5D5, |
$28223636,$14111B1B,$3FDE7575,$2979D9D9,$88AAEEEE,$3C332D2D,$4C5F7979,$02B6B7B7, |
$B896CACA,$DA583535,$B09CC4C4,$17FC4343,$551A8484,$1FF64D4D,$8A1C5959,$7D38B2B2, |
$57AC3333,$C718CFCF,$8DF40606,$74695353,$B7749B9B,$C4F59797,$9F56ADAD,$72DAE3E3, |
$7ED5EAEA,$154AF4F4,$229E8F8F,$12A2ABAB,$584E6262,$07E85F5F,$99E51D1D,$34392323, |
$6EC1F6F6,$50446C6C,$DE5D3232,$68724646,$6526A0A0,$BC93CDCD,$DB03DADA,$F8C6BABA, |
$C8FA9E9E,$A882D6D6,$2BCF6E6E,$40507070,$DCEB8585,$FE750A0A,$328A9393,$A48DDFDF, |
$CA4C2929,$10141C1C,$2173D7D7,$F0CCB4B4,$D309D4D4,$5D108A8A,$0FE25151,$00000000, |
$6F9A1919,$9DE01A1A,$368F9494,$42E6C7C7,$4AECC9C9,$5EFDD2D2,$C1AB7F7F,$E0D8A8A8), |
($BC75BC32,$ECF3EC21,$20C62043,$B3F4B3C9,$DADBDA03,$027B028B,$E2FBE22B,$9EC89EFA, |
$C94AC9EC,$D4D3D409,$18E6186B,$1E6B1E9F,$9845980E,$B27DB238,$A6E8A6D2,$264B26B7, |
$3CD63C57,$9332938A,$82D882EE,$52FD5298,$7B377BD4,$BB71BB37,$5BF15B97,$47E14783, |
$2430243C,$510F51E2,$BAF8BAC6,$4A1B4AF3,$BF87BF48,$0DFA0D70,$B006B0B3,$753F75DE, |
$D25ED2FD,$7DBA7D20,$66AE6631,$3A5B3AA3,$598A591C,$00000000,$CDBCCD93,$1A9D1AE0, |
$AE6DAE2C,$7FC17FAB,$2BB12BC7,$BE0EBEB9,$E080E0A0,$8A5D8A10,$3BD23B52,$64D564BA, |
$D8A0D888,$E784E7A5,$5F075FE8,$1B141B11,$2CB52CC2,$FC90FCB4,$312C3127,$80A38065, |
$73B2732A,$0C730C81,$794C795F,$6B546B41,$4B924B02,$53745369,$9436948F,$8351831F, |
$2A382A36,$C4B0C49C,$22BD22C8,$D55AD5F8,$BDFCBDC3,$48604878,$FF62FFCE,$4C964C07, |
$416C4177,$C742C7E6,$EBF7EB24,$1C101C14,$5D7C5D63,$36283622,$672767C0,$E98CE9AF, |
$441344F9,$149514EA,$F59CF5BB,$CFC7CF18,$3F243F2D,$C046C0E3,$723B72DB,$5470546C, |
$29CA294C,$F0E3F035,$088508FE,$C6CBC617,$F311F34F,$8CD08CE4,$A493A459,$CAB8CA96, |
$68A6683B,$B883B84D,$38203828,$E5FFE52E,$AD9FAD56,$0B770B84,$C8C3C81D,$99CC99FF, |
$580358ED,$196F199A,$0E080E0A,$95BF957E,$70407050,$F7E7F730,$6E2B6ECF,$1FE21F6E, |
$B579B53D,$090C090F,$61AA6134,$57825716,$9F419F0B,$9D3A9D80,$11EA1164,$25B925CD, |
$AFE4AFDD,$459A4508,$DFA4DF8D,$A397A35C,$EA7EEAD5,$35DA3558,$ED7AEDD0,$431743FC, |
$F866F8CB,$FB94FBB1,$37A137D3,$FA1DFA40,$C23DC268,$B4F0B4CC,$32DE325D,$9CB39C71, |
$560B56E7,$E372E3DA,$87A78760,$151C151B,$F9EFF93A,$63D163BF,$345334A9,$9A3E9A85, |
$B18FB142,$7C337CD1,$8826889B,$3D5F3DA6,$A1ECA1D7,$E476E4DF,$812A8194,$91499101, |
$0F810FFB,$EE88EEAA,$16EE1661,$D721D773,$97C497F5,$A51AA5A8,$FEEBFE3F,$6DD96DB5, |
$78C578AE,$C539C56D,$1D991DE5,$76CD76A4,$3EAD3EDC,$CB31CB67,$B68BB647,$EF01EF5B, |
$1218121E,$602360C5,$6ADD6AB0,$4D1F4DF6,$CE4ECEE9,$DE2DDE7C,$55F9559D,$7E487E5A, |
$214F21B2,$03F2037A,$A065A026,$5E8E5E19,$5A785A66,$655C654B,$6258624E,$FD19FD45, |
$068D06F4,$40E54086,$F298F2BE,$335733AC,$17671790,$057F058E,$E805E85E,$4F644F7D, |
$89AF896A,$10631095,$74B6742F,$0AFE0A75,$5CF55C92,$9BB79B74,$2D3C2D33,$30A530D6, |
$2ECE2E49,$49E94989,$46684672,$77447755,$A8E0A8D8,$964D9604,$284328BD,$A969A929, |
$D929D979,$862E8691,$D1ACD187,$F415F44A,$8D598D15,$D6A8D682,$B90AB9BC,$429E420D, |
$F66EF6C1,$2F472FB8,$DDDFDD06,$23342339,$CC35CC62,$F16AF1C4,$C1CFC112,$85DC85EB, |
$8F228F9E,$71C971A1,$90C090F0,$AA9BAA53,$018901F1,$8BD48BE1,$4EED4E8C,$8EAB8E6F, |
$AB12ABA2,$6FA26F3E,$E60DE654,$DB52DBF2,$92BB927B,$B702B7B6,$692F69CA,$39A939D9, |
$D3D7D30C,$A761A723,$A21EA2AD,$C3B4C399,$6C506C44,$07040705,$04F6047F,$27C22746, |
$AC16ACA7,$D025D076,$50865013,$DC56DCF7,$8455841A,$E109E151,$7ABE7A25,$139113EF), |
($D939A9D9,$90176790,$719CB371,$D2A6E8D2,$05070405,$9852FD98,$6580A365,$DFE476DF, |
$08459A08,$024B9202,$A0E080A0,$665A7866,$DDAFE4DD,$B06ADDB0,$BF63D1BF,$362A3836, |
$54E60D54,$4320C643,$62CC3562,$BEF298BE,$1E12181E,$24EBF724,$D7A1ECD7,$77416C77, |
$BD2843BD,$32BC7532,$D47B37D4,$9B88269B,$700DFA70,$F94413F9,$B1FB94B1,$5A7E485A, |
$7A03F27A,$E48CD0E4,$47B68B47,$3C24303C,$A5E784A5,$416B5441,$06DDDF06,$C56023C5, |
$45FD1945,$A33A5BA3,$68C23D68,$158D5915,$21ECF321,$3166AE31,$3E6FA23E,$16578216, |
$95106395,$5BEF015B,$4DB8834D,$91862E91,$B56DD9B5,$1F83511F,$53AA9B53,$635D7C63, |
$3B68A63B,$3FFEEB3F,$D630A5D6,$257ABE25,$A7AC16A7,$0F090C0F,$35F0E335,$23A76123, |
$F090C0F0,$AFE98CAF,$809D3A80,$925CF592,$810C7381,$27312C27,$76D02576,$E7560BE7, |
$7B92BB7B,$E9CE4EE9,$F10189F1,$9F1E6B9F,$A93453A9,$C4F16AC4,$99C3B499,$975BF197, |
$8347E183,$6B18E66B,$C822BDC8,$0E98450E,$6E1FE26E,$C9B3F4C9,$2F74B62F,$CBF866CB, |
$FF99CCFF,$EA1495EA,$ED5803ED,$F7DC56F7,$E18BD4E1,$1B151C1B,$ADA21EAD,$0CD3D70C, |
$2BE2FB2B,$1DC8C31D,$195E8E19,$C22CB5C2,$8949E989,$12C1CF12,$7E95BF7E,$207DBA20, |
$6411EA64,$840B7784,$6DC5396D,$6A89AF6A,$D17C33D1,$A171C9A1,$CEFF62CE,$37BB7137, |
$FB0F81FB,$3DB5793D,$51E10951,$DC3EADDC,$2D3F242D,$A476CDA4,$9D55F99D,$EE82D8EE, |
$8640E586,$AE78C5AE,$CD25B9CD,$04964D04,$55774455,$0A0E080A,$13508613,$30F7E730, |
$D337A1D3,$40FA1D40,$3461AA34,$8C4EED8C,$B3B006B3,$6C54706C,$2A73B22A,$523BD252, |
$0B9F410B,$8B027B8B,$88D8A088,$4FF3114F,$67CB3167,$4627C246,$C06727C0,$B4FC90B4, |
$28382028,$7F04F67F,$78486078,$2EE5FF2E,$074C9607,$4B655C4B,$C72BB1C7,$6F8EAB6F, |
$0D429E0D,$BBF59CBB,$F2DB52F2,$F34A1BF3,$A63D5FA6,$59A49359,$BCB90ABC,$3AF9EF3A, |
$EF1391EF,$FE0885FE,$01914901,$6116EE61,$7CDE2D7C,$B2214FB2,$42B18F42,$DB723BDB, |
$B82F47B8,$48BF8748,$2CAE6D2C,$E3C046E3,$573CD657,$859A3E85,$29A96929,$7D4F647D, |
$94812A94,$492ECE49,$17C6CB17,$CA692FCA,$C3BDFCC3,$5CA3975C,$5EE8055E,$D0ED7AD0, |
$87D1AC87,$8E057F8E,$BA64D5BA,$A8A51AA8,$B7264BB7,$B9BE0EB9,$6087A760,$F8D55AF8, |
$22362822,$111B1411,$DE753FDE,$79D92979,$AAEE88AA,$332D3C33,$5F794C5F,$B6B702B6, |
$96CAB896,$5835DA58,$9CC4B09C,$FC4317FC,$1A84551A,$F64D1FF6,$1C598A1C,$38B27D38, |
$AC3357AC,$18CFC718,$F4068DF4,$69537469,$749BB774,$F597C4F5,$56AD9F56,$DAE372DA, |
$D5EA7ED5,$4AF4154A,$9E8F229E,$A2AB12A2,$4E62584E,$E85F07E8,$E51D99E5,$39233439, |
$C1F66EC1,$446C5044,$5D32DE5D,$72466872,$26A06526,$93CDBC93,$03DADB03,$C6BAF8C6, |
$FA9EC8FA,$82D6A882,$CF6E2BCF,$50704050,$EB85DCEB,$750AFE75,$8A93328A,$8DDFA48D, |
$4C29CA4C,$141C1014,$73D72173,$CCB4F0CC,$09D4D309,$108A5D10,$E2510FE2,$00000000, |
$9A196F9A,$E01A9DE0,$8F94368F,$E6C742E6,$ECC94AEC,$FDD25EFD,$AB7FC1AB,$D8A8E0D8) |
); |
Gost_Data: array[0..3, 0..255] of UInt32 = ( |
($00072000,$00075000,$00074800,$00071000,$00076800,$00074000,$00070000,$00077000, |
$00073000,$00075800,$00070800,$00076000,$00073800,$00077800,$00072800,$00071800, |
$0005A000,$0005D000,$0005C800,$00059000,$0005E800,$0005C000,$00058000,$0005F000, |
$0005B000,$0005D800,$00058800,$0005E000,$0005B800,$0005F800,$0005A800,$00059800, |
$00022000,$00025000,$00024800,$00021000,$00026800,$00024000,$00020000,$00027000, |
$00023000,$00025800,$00020800,$00026000,$00023800,$00027800,$00022800,$00021800, |
$00062000,$00065000,$00064800,$00061000,$00066800,$00064000,$00060000,$00067000, |
$00063000,$00065800,$00060800,$00066000,$00063800,$00067800,$00062800,$00061800, |
$00032000,$00035000,$00034800,$00031000,$00036800,$00034000,$00030000,$00037000, |
$00033000,$00035800,$00030800,$00036000,$00033800,$00037800,$00032800,$00031800, |
$0006A000,$0006D000,$0006C800,$00069000,$0006E800,$0006C000,$00068000,$0006F000, |
$0006B000,$0006D800,$00068800,$0006E000,$0006B800,$0006F800,$0006A800,$00069800, |
$0007A000,$0007D000,$0007C800,$00079000,$0007E800,$0007C000,$00078000,$0007F000, |
$0007B000,$0007D800,$00078800,$0007E000,$0007B800,$0007F800,$0007A800,$00079800, |
$00052000,$00055000,$00054800,$00051000,$00056800,$00054000,$00050000,$00057000, |
$00053000,$00055800,$00050800,$00056000,$00053800,$00057800,$00052800,$00051800, |
$00012000,$00015000,$00014800,$00011000,$00016800,$00014000,$00010000,$00017000, |
$00013000,$00015800,$00010800,$00016000,$00013800,$00017800,$00012800,$00011800, |
$0001A000,$0001D000,$0001C800,$00019000,$0001E800,$0001C000,$00018000,$0001F000, |
$0001B000,$0001D800,$00018800,$0001E000,$0001B800,$0001F800,$0001A800,$00019800, |
$00042000,$00045000,$00044800,$00041000,$00046800,$00044000,$00040000,$00047000, |
$00043000,$00045800,$00040800,$00046000,$00043800,$00047800,$00042800,$00041800, |
$0000A000,$0000D000,$0000C800,$00009000,$0000E800,$0000C000,$00008000,$0000F000, |
$0000B000,$0000D800,$00008800,$0000E000,$0000B800,$0000F800,$0000A800,$00009800, |
$00002000,$00005000,$00004800,$00001000,$00006800,$00004000,$00000000,$00007000, |
$00003000,$00005800,$00000800,$00006000,$00003800,$00007800,$00002800,$00001800, |
$0003A000,$0003D000,$0003C800,$00039000,$0003E800,$0003C000,$00038000,$0003F000, |
$0003B000,$0003D800,$00038800,$0003E000,$0003B800,$0003F800,$0003A800,$00039800, |
$0002A000,$0002D000,$0002C800,$00029000,$0002E800,$0002C000,$00028000,$0002F000, |
$0002B000,$0002D800,$00028800,$0002E000,$0002B800,$0002F800,$0002A800,$00029800, |
$0004A000,$0004D000,$0004C800,$00049000,$0004E800,$0004C000,$00048000,$0004F000, |
$0004B000,$0004D800,$00048800,$0004E000,$0004B800,$0004F800,$0004A800,$00049800), |
($03A80000,$03C00000,$03880000,$03E80000,$03D00000,$03980000,$03A00000,$03900000, |
$03F00000,$03F80000,$03E00000,$03B80000,$03B00000,$03800000,$03C80000,$03D80000, |
$06A80000,$06C00000,$06880000,$06E80000,$06D00000,$06980000,$06A00000,$06900000, |
$06F00000,$06F80000,$06E00000,$06B80000,$06B00000,$06800000,$06C80000,$06D80000, |
$05280000,$05400000,$05080000,$05680000,$05500000,$05180000,$05200000,$05100000, |
$05700000,$05780000,$05600000,$05380000,$05300000,$05000000,$05480000,$05580000, |
$00A80000,$00C00000,$00880000,$00E80000,$00D00000,$00980000,$00A00000,$00900000, |
$00F00000,$00F80000,$00E00000,$00B80000,$00B00000,$00800000,$00C80000,$00D80000, |
$00280000,$00400000,$00080000,$00680000,$00500000,$00180000,$00200000,$00100000, |
$00700000,$00780000,$00600000,$00380000,$00300000,$00000000,$00480000,$00580000, |
$04280000,$04400000,$04080000,$04680000,$04500000,$04180000,$04200000,$04100000, |
$04700000,$04780000,$04600000,$04380000,$04300000,$04000000,$04480000,$04580000, |
$04A80000,$04C00000,$04880000,$04E80000,$04D00000,$04980000,$04A00000,$04900000, |
$04F00000,$04F80000,$04E00000,$04B80000,$04B00000,$04800000,$04C80000,$04D80000, |
$07A80000,$07C00000,$07880000,$07E80000,$07D00000,$07980000,$07A00000,$07900000, |
$07F00000,$07F80000,$07E00000,$07B80000,$07B00000,$07800000,$07C80000,$07D80000, |
$07280000,$07400000,$07080000,$07680000,$07500000,$07180000,$07200000,$07100000, |
$07700000,$07780000,$07600000,$07380000,$07300000,$07000000,$07480000,$07580000, |
$02280000,$02400000,$02080000,$02680000,$02500000,$02180000,$02200000,$02100000, |
$02700000,$02780000,$02600000,$02380000,$02300000,$02000000,$02480000,$02580000, |
$03280000,$03400000,$03080000,$03680000,$03500000,$03180000,$03200000,$03100000, |
$03700000,$03780000,$03600000,$03380000,$03300000,$03000000,$03480000,$03580000, |
$06280000,$06400000,$06080000,$06680000,$06500000,$06180000,$06200000,$06100000, |
$06700000,$06780000,$06600000,$06380000,$06300000,$06000000,$06480000,$06580000, |
$05A80000,$05C00000,$05880000,$05E80000,$05D00000,$05980000,$05A00000,$05900000, |
$05F00000,$05F80000,$05E00000,$05B80000,$05B00000,$05800000,$05C80000,$05D80000, |
$01280000,$01400000,$01080000,$01680000,$01500000,$01180000,$01200000,$01100000, |
$01700000,$01780000,$01600000,$01380000,$01300000,$01000000,$01480000,$01580000, |
$02A80000,$02C00000,$02880000,$02E80000,$02D00000,$02980000,$02A00000,$02900000, |
$02F00000,$02F80000,$02E00000,$02B80000,$02B00000,$02800000,$02C80000,$02D80000, |
$01A80000,$01C00000,$01880000,$01E80000,$01D00000,$01980000,$01A00000,$01900000, |
$01F00000,$01F80000,$01E00000,$01B80000,$01B00000,$01800000,$01C80000,$01D80000), |
($30000002,$60000002,$38000002,$08000002,$28000002,$78000002,$68000002,$40000002, |
$20000002,$50000002,$48000002,$70000002,$00000002,$18000002,$58000002,$10000002, |
$B0000005,$E0000005,$B8000005,$88000005,$A8000005,$F8000005,$E8000005,$C0000005, |
$A0000005,$D0000005,$C8000005,$F0000005,$80000005,$98000005,$D8000005,$90000005, |
$30000005,$60000005,$38000005,$08000005,$28000005,$78000005,$68000005,$40000005, |
$20000005,$50000005,$48000005,$70000005,$00000005,$18000005,$58000005,$10000005, |
$30000000,$60000000,$38000000,$08000000,$28000000,$78000000,$68000000,$40000000, |
$20000000,$50000000,$48000000,$70000000,$00000000,$18000000,$58000000,$10000000, |
$B0000003,$E0000003,$B8000003,$88000003,$A8000003,$F8000003,$E8000003,$C0000003, |
$A0000003,$D0000003,$C8000003,$F0000003,$80000003,$98000003,$D8000003,$90000003, |
$30000001,$60000001,$38000001,$08000001,$28000001,$78000001,$68000001,$40000001, |
$20000001,$50000001,$48000001,$70000001,$00000001,$18000001,$58000001,$10000001, |
$B0000000,$E0000000,$B8000000,$88000000,$A8000000,$F8000000,$E8000000,$C0000000, |
$A0000000,$D0000000,$C8000000,$F0000000,$80000000,$98000000,$D8000000,$90000000, |
$B0000006,$E0000006,$B8000006,$88000006,$A8000006,$F8000006,$E8000006,$C0000006, |
$A0000006,$D0000006,$C8000006,$F0000006,$80000006,$98000006,$D8000006,$90000006, |
$B0000001,$E0000001,$B8000001,$88000001,$A8000001,$F8000001,$E8000001,$C0000001, |
$A0000001,$D0000001,$C8000001,$F0000001,$80000001,$98000001,$D8000001,$90000001, |
$30000003,$60000003,$38000003,$08000003,$28000003,$78000003,$68000003,$40000003, |
$20000003,$50000003,$48000003,$70000003,$00000003,$18000003,$58000003,$10000003, |
$30000004,$60000004,$38000004,$08000004,$28000004,$78000004,$68000004,$40000004, |
$20000004,$50000004,$48000004,$70000004,$00000004,$18000004,$58000004,$10000004, |
$B0000002,$E0000002,$B8000002,$88000002,$A8000002,$F8000002,$E8000002,$C0000002, |
$A0000002,$D0000002,$C8000002,$F0000002,$80000002,$98000002,$D8000002,$90000002, |
$B0000004,$E0000004,$B8000004,$88000004,$A8000004,$F8000004,$E8000004,$C0000004, |
$A0000004,$D0000004,$C8000004,$F0000004,$80000004,$98000004,$D8000004,$90000004, |
$30000006,$60000006,$38000006,$08000006,$28000006,$78000006,$68000006,$40000006, |
$20000006,$50000006,$48000006,$70000006,$00000006,$18000006,$58000006,$10000006, |
$B0000007,$E0000007,$B8000007,$88000007,$A8000007,$F8000007,$E8000007,$C0000007, |
$A0000007,$D0000007,$C8000007,$F0000007,$80000007,$98000007,$D8000007,$90000007, |
$30000007,$60000007,$38000007,$08000007,$28000007,$78000007,$68000007,$40000007, |
$20000007,$50000007,$48000007,$70000007,$00000007,$18000007,$58000007,$10000007), |
($000000E8,$000000D8,$000000A0,$00000088,$00000098,$000000F8,$000000A8,$000000C8, |
$00000080,$000000D0,$000000F0,$000000B8,$000000B0,$000000C0,$00000090,$000000E0, |
$000007E8,$000007D8,$000007A0,$00000788,$00000798,$000007F8,$000007A8,$000007C8, |
$00000780,$000007D0,$000007F0,$000007B8,$000007B0,$000007C0,$00000790,$000007E0, |
$000006E8,$000006D8,$000006A0,$00000688,$00000698,$000006F8,$000006A8,$000006C8, |
$00000680,$000006D0,$000006F0,$000006B8,$000006B0,$000006C0,$00000690,$000006E0, |
$00000068,$00000058,$00000020,$00000008,$00000018,$00000078,$00000028,$00000048, |
$00000000,$00000050,$00000070,$00000038,$00000030,$00000040,$00000010,$00000060, |
$000002E8,$000002D8,$000002A0,$00000288,$00000298,$000002F8,$000002A8,$000002C8, |
$00000280,$000002D0,$000002F0,$000002B8,$000002B0,$000002C0,$00000290,$000002E0, |
$000003E8,$000003D8,$000003A0,$00000388,$00000398,$000003F8,$000003A8,$000003C8, |
$00000380,$000003D0,$000003F0,$000003B8,$000003B0,$000003C0,$00000390,$000003E0, |
$00000568,$00000558,$00000520,$00000508,$00000518,$00000578,$00000528,$00000548, |
$00000500,$00000550,$00000570,$00000538,$00000530,$00000540,$00000510,$00000560, |
$00000268,$00000258,$00000220,$00000208,$00000218,$00000278,$00000228,$00000248, |
$00000200,$00000250,$00000270,$00000238,$00000230,$00000240,$00000210,$00000260, |
$000004E8,$000004D8,$000004A0,$00000488,$00000498,$000004F8,$000004A8,$000004C8, |
$00000480,$000004D0,$000004F0,$000004B8,$000004B0,$000004C0,$00000490,$000004E0, |
$00000168,$00000158,$00000120,$00000108,$00000118,$00000178,$00000128,$00000148, |
$00000100,$00000150,$00000170,$00000138,$00000130,$00000140,$00000110,$00000160, |
$000001E8,$000001D8,$000001A0,$00000188,$00000198,$000001F8,$000001A8,$000001C8, |
$00000180,$000001D0,$000001F0,$000001B8,$000001B0,$000001C0,$00000190,$000001E0, |
$00000768,$00000758,$00000720,$00000708,$00000718,$00000778,$00000728,$00000748, |
$00000700,$00000750,$00000770,$00000738,$00000730,$00000740,$00000710,$00000760, |
$00000368,$00000358,$00000320,$00000308,$00000318,$00000378,$00000328,$00000348, |
$00000300,$00000350,$00000370,$00000338,$00000330,$00000340,$00000310,$00000360, |
$000005E8,$000005D8,$000005A0,$00000588,$00000598,$000005F8,$000005A8,$000005C8, |
$00000580,$000005D0,$000005F0,$000005B8,$000005B0,$000005C0,$00000590,$000005E0, |
$00000468,$00000458,$00000420,$00000408,$00000418,$00000478,$00000428,$00000448, |
$00000400,$00000450,$00000470,$00000438,$00000430,$00000440,$00000410,$00000460, |
$00000668,$00000658,$00000620,$00000608,$00000618,$00000678,$00000628,$00000648, |
$00000600,$00000650,$00000670,$00000638,$00000630,$00000640,$00000610,$00000660) |
); |
Q128_Data: array[0..1023] of UInt32 = ( |
$D6D92632,$5E84404D,$4F341282,$71654B06,$D48D6A0B,$245BECC4,$C8F84D80,$22C620C9, |
$66AA8B02,$0AC697FF,$8B755A36,$2577931C,$438D17B6,$BB7B1BD1,$E0A8F51E,$F4FD583D, |
$BECEEB95,$7945C1AE,$29CE9628,$3D7965CD,$80CFBDB9,$2F535A25,$7666A9BD,$6DF2324B, |
$98731A06,$E4D32444,$265FAF55,$41895427,$F2D2C55E,$8151930F,$77A888A3,$9CBA9A32, |
$A7EC629C,$55DCF904,$B35B9179,$1AB8E42E,$A0EF8027,$DB4C5CDE,$9FC2A9D3,$A9512439, |
$9C08CB5C,$4BFD92B6,$C23EDA7F,$037833E1,$40177A91,$BAE53567,$774AD665,$3CB744D3, |
$6E8A01AA,$65D2B8E3,$0507A12A,$EF69C3CB,$230801D7,$0BBAE78F,$62630B36,$ED6D805A, |
$5AAF9EBF,$721D78E7,$D33CD9DE,$6618DA6C,$9DC6EA42,$0D272B82,$3559EF65,$DCFDEF0B, |
$865271B4,$3621DC84,$885D667F,$92E58251,$2E9D7B3B,$E9165100,$99BD3B18,$B1ED8386, |
$84563225,$446CABCB,$7E462315,$A2BBCC1E,$3BE4A9C0,$320A0276,$416B0AE1,$C6A755E3, |
$5C8003DC,$36C38242,$97E2237B,$2AE6AA61,$8A5925EE,$3B56F8AE,$26BDF193,$96CE5CA3, |
$E51D055A,$AD2AF563,$2B9ADA11,$9F70F8BD,$3F9F789A,$89934761,$A8CF0A8F,$C78B2A3B, |
$8F5E84C4,$B8B1795E,$AFCCE834,$D9AA4189,$C28C8B11,$7636A615,$F2609430,$ECA3A144, |
$7869BE76,$12C8612E,$D18ACB21,$CC61C21C,$EDDFD134,$AD7AFACB,$7F6A5CCD,$0C0B545A, |
$584983E8,$04998F9C,$969E530B,$E21EE7E1,$FFF5EEDC,$FE3BCFC2,$97007DBD,$66FA84AA, |
$A375ED00,$3509E0CD,$1B76C530,$70193B76,$86E020DA,$C9366C9E,$49F9D127,$AE52C682, |
$260FA0FD,$E380C957,$CE358E25,$02044391,$AEB09844,$F31CE440,$F0D686CF,$8CC4E9E3, |
$BE2CB553,$1E933ADC,$C312A5A7,$1D0957FB,$A1C3FFFF,$BD5486B2,$E8D8701E,$6E685F6C, |
$1BC4945E,$062F9D63,$84063D8D,$C1F4B8F0,$A7BC6D34,$C4F319DA,$F81452A1,$4CAE7FA5, |
$1DBB0695,$AA9B46B6,$6BDDAF28,$61F96611,$9A27563F,$C2DC84B9,$6530E625,$E7494963, |
$6FF671DA,$B8532798,$C06A9646,$CC839CDA,$9EEED60B,$A70E3C5A,$F0868967,$02544C39, |
$87CC5F02,$B3B9CFBF,$F6F91BAC,$DCADE0A3,$8B9704F0,$6CDE4D93,$64AEC893,$3E515984, |
$7BF3D351,$3EB30742,$BE9EE43D,$B15FD2E8,$2C7B666C,$01CE211E,$3B06F706,$05E5FFEC, |
$24E9BDAA,$FDA1A2E5,$E04AABD8,$E9A4006E,$019E2EB6,$8D0AC8FD,$73D359F9,$6A43819E, |
$00500FA8,$DA302CAE,$C0D8C728,$62D15A58,$61A969B9,$1E216BB2,$0892DBC6,$3A7A8776, |
$34259F15,$79A79F68,$F96822D1,$7F88020B,$AF9CE79C,$017C7070,$F8445D09,$EE15B3BB, |
$E3629791,$20203D9E,$53413509,$25279CB4,$DF378D84,$8921160F,$A89F0527,$413B0549, |
$AD98A40D,$FB8E3F86,$00000000,$D717072C,$E6353913,$ACB4DBD5,$1F0D146A,$C411471C, |
$B9CD092E,$41D95B8F,$74D0BB42,$86027E1C,$DA827DC0,$57D8BA95,$12986E86,$9BB97889, |
$C9843DF0,$122A3FE8,$556EA86A,$D8346F3F,$693BB27F,$53113AA1,$2850B89E,$0CE90A9C, |
$FB3C6EE8,$7A6DFDE7,$917FEF76,$2A54FB0F,$E2ACB68F,$E4832BEC,$2E7F25FD,$110203A1, |
$AACB491E,$18ECA817,$9E5C8765,$14B7F3E5,$C146E99E,$2E2F2A55,$47A6C944,$23BA50B9, |
$D2F2F8C0,$FBDE302E,$A494517D,$B5740C1A,$72AF2989,$EE45BC13,$03283C49,$6FA67E72, |
$F767351A,$1A5ABAE8,$197286A1,$E71946CB,$0F7367BB,$DD33CE15,$31C060F9,$67D6FB72, |
$AEE097EC,$28E2E9F0,$E7AB17A5,$BA076BA1,$2595CDDA,$D43F3B65,$25C5C272,$C81A1346, |
$177D916A,$9B5B264F,$E166D400,$9EBED9A3,$7EF4727B,$611B38D7,$5DFC73AC,$0C5B5BF2, |
$8DE8963B,$C7DB2593,$31223E3F,$D7470884,$606748A7,$FFA5E174,$F3FEBA86,$40F52457, |
$A3C7BC6E,$DC4FBE65,$6233049E,$C26ED5D7,$4F8643EC,$468AB69C,$53A36BCF,$558CF6AC, |
$95043E2C,$1B26CA98,$4867FF91,$85C81C93,$B60C3FFB,$897119A7,$4AD1ED6E,$7480B4EA, |
$0BEAE827,$D0F6BB51,$58198C40,$6989E311,$5F1A6EFB,$696BBDD7,$6847C20F,$6C6C1CFD, |
$1EC33574,$F64B4AC2,$F41F06FB,$00B2516E,$644C9655,$8C94E64B,$6648D5C4,$A2EBC3B6, |
$4C1C2ECB,$F7856BDC,$7ADFAC89,$4837F039,$AE02C92A,$35BBB1A3,$E461752A,$F7D56474, |
$D210A606,$718715C0,$A4C45ED5,$BAB53ACF,$1C252823,$CB807E61,$CDAFE302,$AA791870, |
$0B58B949,$A00DDEE1,$60D519C9,$E1848AC6,$D9481F4F,$F148A879,$64FEC73B,$3C551A15, |
$E5AF5434,$4D605EBB,$A55A7063,$3C0515BD,$1DEB093D,$0D957AEC,$3EE308EA,$CCD39372, |
$D38E88B0,$FA401E98,$8F0E8B6C,$B023A298,$9207DC97,$7C126F2C,$D8863E51,$CD4DBDC4, |
$382ECB4F,$6A138E36,$631F7B46,$19228909,$1C75278B,$50DB582E,$90039F06,$A9B37AFF, |
$06CDC3A5,$210C4246,$8FECD5AA,$B227E109,$3D9B3B0B,$B92F57E8,$23EA5F11,$7839B1DE, |
$CAAC01B9,$127A3040,$F282CAF6,$9A950751,$8E22F4B4,$FC6F83FB,$56F4C54D,$BCCAA804, |
$0F91397D,$60851661,$807DECD7,$EADC338F,$51457698,$9F20F715,$E4317A82,$D7A55642, |
$F2309B98,$3F2D29F4,$EB121291,$DBAE0218,$99ED34B0,$FD13F38B,$91CDBE18,$C9666336, |
$7B118D97,$042BDEF2,$ED3D8FF2,$179FCFAC,$63AD2A28,$32B85318,$CDFFECAA,$724D774F, |
$21EE1C80,$42A1686E,$2A04F4A7,$95B66F42,$DE4BFDF4,$D240A9AE,$4A81E2C6,$A82D5449, |
$7D3E10F4,$614B377F,$FAA2405E,$3FCF7732,$90B1CE68,$FC8DDD3D,$8DB89993,$16E3BFDC, |
$B30B9ED1,$8229A0EE,$4EAA3C34,$B10FDD40,$56A4CAE5,$84E4634B,$D16895E7,$6E3850C4, |
$95543184,$58ABDD2E,$BE7CBAFB,$C8A84228,$DAD27268,$DB1C5376,$71D71A68,$BDB6D874, |
$EBF04C57,$DFD5D342,$852A4255,$D66B775C,$B4087C6A,$CBD071C9,$EB421D39,$DD819F7B, |
$4FD64C44,$305E4E4F,$7D8C419A,$D014E597,$DEA9A332,$1C97794D,$45A28AD5,$628155F0, |
$912FE0DE,$43DD181E,$FAF24FF6,$4EFA339C,$9399F221,$0EED490D,$B4BA2D04,$A193F057, |
$942841F4,$E136DBA8,$E7FB180D,$F5337923,$30BC1089,$BC9AA7AC,$CFFBAF3B,$6560E98D, |
$33942CC0,$0A969857,$5788B53D,$20703236,$31906F51,$A75E33F2,$5987A2F6,$6B3FF1EE, |
$C5DF6602,$A25992D8,$6AF1D0F0,$1651EEB2,$5FA83F95,$D8D631F9,$788BE0B0,$B6BE6E95, |
$A121A139,$19C0D7CF,$095CFAD8,$09BEA41E,$872E01C4,$C7397B55,$990F6A76,$1601E11A, |
$17CFC004,$3BB4A668,$8ABB7B28,$809FB211,$94CA1F32,$B277EEA1,$CFABA093,$5965FC30, |
$9AC508F9,$7F3A5365,$EF8B9D0D,$37EFFD9A,$949A109A,$9F92A67B,$90E1C1C0,$F8F60C67, |
$8A092A46,$F8A603CF,$F9382D79,$6F142F1C,$5AFF9117,$ACE4D47D,$FE899EAC,$13564F98, |
$D2A2F768,$76D4F8D3,$A2099D70,$08C2D46E,$42133900,$07E1BC7D,$F4AD5795,$EEF7ED7D, |
$932BA34F,$33267DAE,$CAFC0E11,$2FB104E3,$503906E8,$172D9EC2,$F61B456A,$6EDA0E02, |
$4E4862F2,$C56D376C,$526D4AD1,$E9465EA8,$448EF50D,$EA3E6D49,$3952BB3F,$2ECD7493, |
$AC068ABB,$59D7AD5E,$877E0E6C,$A397B3C6,$069DCC0D,$D63B78F4,$7CF031EA,$180EF6D1, |
$CA1E50D7,$DF85DCEA,$8C76B88D,$EA6E62E1,$090CF570,$E54D0AF2,$B2C5BFCF,$14E7FC4D, |
$B7204023,$7EA47DD3,$52DF1BBF,$6582B74B,$ECF3AEEC,$C03A99EE,$7E162CBD,$3A98D9B0, |
$0DC57544,$A325E2A8,$D5434B15,$E687687D,$6817CDA7,$6D406325,$4714982A,$102E7C79, |
$BC28F6C2,$78DBEF18,$2AB6A5C9,$C3A0F4C9,$7D6E1F5C,$9C58C4F4,$82CBFE28,$21BE1328, |
$576AEBFB,$8E72FB1C,$A6724C2A,$4638E7F2,$2B7884D7,$40477539,$5442D7B2,$EA8C3C27, |
$1455AD23,$2773D08D,$387EC4E7,$3AC8D618,$4B4FC3D8,$18BCA7BF,$83B78E58,$53F36467, |
$2723DF25,$4C4C2163,$8598133B,$1FBF4504,$2FE10B4B,$297CC746,$46DAB934,$56469423, |
$641C99FD,$4CFE700D,$8B25559E,$5D1E2D6A,$BC78F96A,$24B9B202,$EF39CC63,$C116E636, |
$989144C0,$EFDB92A5,$5D4E22C2,$68A59CC9,$77F8870B,$7A3DF24F,$7CA03E42,$FD43FC23, |
$70FB65B0,$905390AE,$443CA463,$6D106C8D,$1529DD53,$38CC9589,$5935F398,$2F03558D, |
$B8E176F6,$B073AD30,$5E661E8B,$11520C09,$573AE453,$8C26B725,$DDD190D3,$97507215, |
$27C181E3,$0557AE82,$F3AEB52E,$D51344BD,$9D96E5EA,$42F167C6,$A6C01D44,$982315AE, |
$2B288B7F,$A171AE91,$97B22CD3,$919DB1B0,$13B4115E,$7684F77B,$C342AA0F,$08208AA8, |
$08708500,$E5FF5B9C,$4E186D5A,$2800B736,$D5A115D3,$C4A31672,$159B8C3D,$FE6BC06A, |
$967C0DCD,$07B1B3D5,$433F46D8,$E8887FB6,$4668E85A,$45F2857D,$2BCAD5B9,$D4DD65A3, |
$72FF2621,$B99D0686,$8EC0AA72,$2DE548DA,$E01AA470,$8355D09E,$5E361123,$E66536BB, |
$5F4A6153,$5DAC7C04,$23580E7F,$B52403B2,$93C9FD89,$B6EE613D,$C6F75A4B,$3A2A88DE, |
$70AB6A18,$4D305113,$C3F0FB61,$22247E0F,$49A9DE8F,$8D5AC755,$95E660EA,$C088C880, |
$C6450B25,$F7373AB2,$F1AAF6BF,$3CE74B7B,$FDF1AD4D,$634F74EE,$ABE736C6,$436F4970, |
$4A63BC00,$94784E5C,$27918E4B,$300E41E7,$9BE97721,$DBFE0DB0,$ED8FDE9C,$81E3C261, |
$FED99104,$33C42368,$5ED44FE5,$0753ED13,$47F6C6EC,$704934DE,$2CC93702,$02B612FF, |
$3F7D265C,$A4760FBB,$1A0AB540,$09EEABB6,$ADC8ABA5,$13E41EF6,$88BF38B9,$D91810E7, |
$523D4579,$6734A5B4,$370DA35C,$DC1FB1CD,$04C98034,$2DB54772,$4DD20FD5,$86B02F72, |
$BB994517,$D044EA3F,$D1DAC489,$4885A157,$3902B497,$C1A4B758,$0FC136D5,$FF17B01A, |
$5B83E167,$7A8FA321,$1579D2FB,$EBA043FF,$50690940,$802DE37F,$A6224382,$6B8DA080, |
$0A74C691,$7432E584,$528F1417,$A5E8210D,$88EF3711,$9A775997,$0CB90534,$292CC8EE, |
$47449782,$20C26358,$C615048D,$AA2917D8,$494B8049,$84B46CE3,$73610897,$7BA3DCF9, |
$4510DBBB,$68F59361,$8279AF46,$BD04891A,$CE87DF4B,$553EA7C2,$CB322F0F,$5C625D1A, |
$4F641D2A,$325A0DDE,$A50A7FCB,$11B052CF,$1D595853,$F563768B,$98C14B68,$3D296A65, |
$DE1BF25C,$3671D32C,$E3329839,$F581284D,$37BFF232,$DEF9AC9A,$8E90A5DA,$754E95F4, |
$5B31B009,$B4EA22AC,$713544AE,$CE65818D,$067F92CB,$39E0EA51,$B0C1FC5E,$C84A1CEE, |
$6AA1DF58,$E9F40FC6,$F1FAF917,$13064030,$05B5F044,$424336A8,$0A24C939,$C44148B4, |
$6F4420B4,$047BD15A,$39B0E5F9,$8BC70B58,$0E5F1863,$D1389A4F,$AF2EB6F2,$C9D43258, |
$107E73D1,$89C348C9,$9CEA959A,$11E05D67,$BB2B1479,$73835651,$F34CEBE8,$D36CD676, |
$4540D413,$5CD00C74,$31723197,$EEA7E2D5,$0F236813,$81B3CDC9,$7FD80DA3,$D7F559EA, |
$03CA628F,$3DCB34A3,$33767206,$2C2B69C4,$51F727F6,$829BF180,$039A6D27,$56169B8B, |
$4D82007D,$9D24B484,$BDE6D7DC,$389C9A21,$69D9ECB9,$B792114D,$44DEFAA5,$8FBCDA02, |
$92B58DF9,$962C0265,$CF19F1FD,$7462EA2C,$227471A7,$C53D38C4,$9257D33F,$32E85CB0, |
$ABB7396E,$30EC1F21,$58FBD286,$5B61BFA1,$240BE36C,$B7704F8B,$A69012EC,$1F5D1BC2, |
$8305DF36,$299E9980,$5FF8303D,$C58F69AA,$7DDC4E32,$E6D767D5,$880D69D7,$D46F34CD, |
$FF47BFB2,$22962F61,$A9E37557,$FA101130,$83E781F0,$CF49FE55,$FCDDD295,$2D07161C, |
$E83A2ED8,$CA4E5F7F,$75FCC49A,$7915CE06,$54F086DC,$A9012B91,$0EBD46A5,$DF67822C, |
$D9FA4E21,$AF7EB95A,$81019CA7,$F118A7D1,$00E25EC6,$9B0B29E7,$E2FCB927,$EC11F02A, |
$857A4DFD,$3497CE7B,$1B949BF6,$9D74BB2C,$CC31CDB4,$E3D0C6FF,$BF00CA8B,$36938DEA, |
$16B3B074,$CED7D0E3,$6037470F,$CD1DB26C,$6DA23DE3,$BBC94ABF,$5A1DCFD1,$C76974FD, |
$A05DD149,$F034D809,$A4260013,$B091F3F6,$A5B82EA5,$6786F4DA,$4BAD9D1E,$1E71641A, |
$B59652DC,$BA576409,$B1BD8C2E,$2D5719B4,$7331073F,$AC568513,$B97F5840,$BF50C523, |
$0703E2BB,$6764AA1C,$20926CF0,$012C7FD8,$1CC776E5,$9E0C88CD,$995F65DE,$F44F0953, |
$E86A2170,$1FEF4AAC,$7C426084,$771AD9CD,$2C9938AA,$B8032830,$4A33B3A8,$751E9A5C, |
$DD63C1BD,$79F790C0,$51157930,$D5F11A7B,$D8646097,$CB6220A7,$D689299A,$879C50AA, |
$B7C21EE5,$4B1FCC70,$0B08B6E1,$28B2E658,$B295B067,$AB056800,$75ACCB32,$BFB29BE5, |
$F5D127E5,$6C8E423B,$6B6FFE46,$215C4DEE,$F9DA73BF,$7B41823F,$48D5AEFF,$1405A28B, |
$BFE2944D,$347590BD,$B45873C2,$B65C3053,$A0BF8F8F,$937BACE7,$1AE8EB86,$40A52BFF, |
$E24EE849,$D3DE8718,$6C3C1355,$1990D867,$54A08974,$375DACF4,$508B5786,$63FD2580, |
$F98A7C17,$34C7C1D3,$D0A6B4F9,$3E01562C,$185EF979,$5412D81A,$B5C65D74,$26EDFE3B, |
$35EBBE0B,$02E61D57,$15CB8395,$0E0F17CB,$FC3F8C53,$5A4DC079,$E0F8FAB6,$5BD3EECF, |
$E1D4856E,$8AEB7480,$5C3252B2,$AB5567A8,$FB6C6140,$B3E9C017,$EC41FF82,$F064D7A1, |
$491B8FE1,$A87D5BE1,$10CC22BF,$F6A91404,$0D77242A,$DA602306,$51A7285E,$109C2D17 |
); |
Misty_Data7: array[0..$7F] of Byte = ( |
$1B,$32,$33,$5A,$3B,$10,$17,$54,$5B,$1A,$72,$73,$6B,$2C,$66,$49, |
$1F,$24,$13,$6C,$37,$2E,$3F,$4A,$5D,$0F,$40,$56,$25,$51,$1C,$04, |
$0B,$46,$20,$0D,$7B,$35,$44,$42,$2B,$1E,$41,$14,$4B,$79,$15,$6F, |
$0E,$55,$09,$36,$74,$0C,$67,$53,$28,$0A,$7E,$38,$02,$07,$60,$29, |
$19,$12,$65,$2F,$30,$39,$08,$68,$5F,$78,$2A,$4C,$64,$45,$75,$3D, |
$59,$48,$03,$57,$7C,$4F,$62,$3C,$1D,$21,$5E,$27,$6A,$70,$4D,$3A, |
$01,$6D,$6E,$63,$18,$77,$23,$05,$26,$76,$00,$31,$2D,$7A,$7F,$61, |
$50,$22,$11,$06,$47,$16,$52,$4E,$71,$3E,$69,$43,$34,$5C,$58,$7D |
); |
Misty_Data9: array[0..$1FF] of Word = ( |
$01C3,$00CB,$0153,$019F,$01E3,$00E9,$00FB,$0035, |
$0181,$00B9,$0117,$01EB,$0133,$0009,$002D,$00D3, |
$00C7,$014A,$0037,$007E,$00EB,$0164,$0193,$01D8, |
$00A3,$011E,$0055,$002C,$001D,$01A2,$0163,$0118, |
$014B,$0152,$01D2,$000F,$002B,$0030,$013A,$00E5, |
$0111,$0138,$018E,$0063,$00E3,$00C8,$01F4,$001B, |
$0001,$009D,$00F8,$01A0,$016D,$01F3,$001C,$0146, |
$007D,$00D1,$0082,$01EA,$0183,$012D,$00F4,$019E, |
$01D3,$00DD,$01E2,$0128,$01E0,$00EC,$0059,$0091, |
$0011,$012F,$0026,$00DC,$00B0,$018C,$010F,$01F7, |
$00E7,$016C,$00B6,$00F9,$00D8,$0151,$0101,$014C, |
$0103,$00B8,$0154,$012B,$01AE,$0017,$0071,$000C, |
$0047,$0058,$007F,$01A4,$0134,$0129,$0084,$015D, |
$019D,$01B2,$01A3,$0048,$007C,$0051,$01CA,$0023, |
$013D,$01A7,$0165,$003B,$0042,$00DA,$0192,$00CE, |
$00C1,$006B,$009F,$01F1,$012C,$0184,$00FA,$0196, |
$01E1,$0169,$017D,$0031,$0180,$010A,$0094,$01DA, |
$0186,$013E,$011C,$0060,$0175,$01CF,$0067,$0119, |
$0065,$0068,$0099,$0150,$0008,$0007,$017C,$00B7, |
$0024,$0019,$00DE,$0127,$00DB,$00E4,$01A9,$0052, |
$0109,$0090,$019C,$01C1,$0028,$01B3,$0135,$016A, |
$0176,$00DF,$01E5,$0188,$00C5,$016E,$01DE,$01B1, |
$00C3,$01DF,$0036,$00EE,$01EE,$00F0,$0093,$0049, |
$009A,$01B6,$0069,$0081,$0125,$000B,$005E,$00B4, |
$0149,$01C7,$0174,$003E,$013B,$01B7,$008E,$01C6, |
$00AE,$0010,$0095,$01EF,$004E,$00F2,$01FD,$0085, |
$00FD,$00F6,$00A0,$016F,$0083,$008A,$0156,$009B, |
$013C,$0107,$0167,$0098,$01D0,$01E9,$0003,$01FE, |
$00BD,$0122,$0089,$00D2,$018F,$0012,$0033,$006A, |
$0142,$00ED,$0170,$011B,$00E2,$014F,$0158,$0131, |
$0147,$005D,$0113,$01CD,$0079,$0161,$01A5,$0179, |
$009E,$01B4,$00CC,$0022,$0132,$001A,$00E8,$0004, |
$0187,$01ED,$0197,$0039,$01BF,$01D7,$0027,$018B, |
$00C6,$009C,$00D0,$014E,$006C,$0034,$01F2,$006E, |
$00CA,$0025,$00BA,$0191,$00FE,$0013,$0106,$002F, |
$01AD,$0172,$01DB,$00C0,$010B,$01D6,$00F5,$01EC, |
$010D,$0076,$0114,$01AB,$0075,$010C,$01E4,$0159, |
$0054,$011F,$004B,$00C4,$01BE,$00F7,$0029,$00A4, |
$000E,$01F0,$0077,$004D,$017A,$0086,$008B,$00B3, |
$0171,$00BF,$010E,$0104,$0097,$015B,$0160,$0168, |
$00D7,$00BB,$0066,$01CE,$00FC,$0092,$01C5,$006F, |
$0016,$004A,$00A1,$0139,$00AF,$00F1,$0190,$000A, |
$01AA,$0143,$017B,$0056,$018D,$0166,$00D4,$01FB, |
$014D,$0194,$019A,$0087,$01F8,$0123,$00A7,$01B8, |
$0141,$003C,$01F9,$0140,$002A,$0155,$011A,$01A1, |
$0198,$00D5,$0126,$01AF,$0061,$012E,$0157,$01DC, |
$0072,$018A,$00AA,$0096,$0115,$00EF,$0045,$007B, |
$008D,$0145,$0053,$005F,$0178,$00B2,$002E,$0020, |
$01D5,$003F,$01C9,$01E7,$01AC,$0044,$0038,$0014, |
$00B1,$016B,$00AB,$00B5,$005A,$0182,$01C8,$01D4, |
$0018,$0177,$0064,$00CF,$006D,$0100,$0199,$0130, |
$015A,$0005,$0120,$01BB,$01BD,$00E0,$004F,$00D6, |
$013F,$01C4,$012A,$0015,$0006,$00FF,$019B,$00A6, |
$0043,$0088,$0050,$015F,$01E8,$0121,$0073,$017E, |
$00BC,$00C2,$00C9,$0173,$0189,$01F5,$0074,$01CC, |
$01E6,$01A8,$0195,$001F,$0041,$000D,$01BA,$0032, |
$003D,$01D1,$0080,$00A8,$0057,$01B9,$0162,$0148, |
$00D9,$0105,$0062,$007A,$0021,$01FF,$0112,$0108, |
$01C0,$00A9,$011D,$01B0,$01A6,$00CD,$00F3,$005C, |
$0102,$005B,$01D9,$0144,$01F6,$00AD,$00A5,$003A, |
$01CB,$0136,$017F,$0046,$00E1,$001E,$01DD,$00E6, |
$0137,$01FA,$0185,$008C,$008F,$0040,$01B5,$00BE, |
$0078,$0000,$00AC,$0110,$015E,$0124,$0002,$01BC, |
$00A2,$00EA,$0070,$01FC,$0116,$015C,$004C,$01C2 |
); |
RC2_Data: array[0..255] of Byte = ( |
$D9,$78,$F9,$C4,$19,$DD,$B5,$ED,$28,$E9,$FD,$79,$4A,$A0,$D8,$9D, |
$C6,$7E,$37,$83,$2B,$76,$53,$8E,$62,$4C,$64,$88,$44,$8B,$FB,$A2, |
$17,$9A,$59,$F5,$87,$B3,$4F,$13,$61,$45,$6D,$8D,$09,$81,$7D,$32, |
$BD,$8F,$40,$EB,$86,$B7,$7B,$0B,$F0,$95,$21,$22,$5C,$6B,$4E,$82, |
$54,$D6,$65,$93,$CE,$60,$B2,$1C,$73,$56,$C0,$14,$A7,$8C,$F1,$DC, |
$12,$75,$CA,$1F,$3B,$BE,$E4,$D1,$42,$3D,$D4,$30,$A3,$3C,$B6,$26, |
$6F,$BF,$0E,$DA,$46,$69,$07,$57,$27,$F2,$1D,$9B,$BC,$94,$43,$03, |
$F8,$11,$C7,$F6,$90,$EF,$3E,$E7,$06,$C3,$D5,$2F,$C8,$66,$1E,$D7, |
$08,$E8,$EA,$DE,$80,$52,$EE,$F7,$84,$AA,$72,$AC,$35,$4D,$6A,$2A, |
$96,$1A,$D2,$71,$5A,$15,$49,$74,$4B,$9F,$D0,$5E,$04,$18,$A4,$EC, |
$C2,$E0,$41,$6E,$0F,$51,$CB,$CC,$24,$91,$AF,$50,$A1,$F4,$70,$39, |
$99,$7C,$3A,$85,$23,$B8,$B4,$7A,$FC,$02,$36,$5B,$25,$55,$97,$31, |
$2D,$5D,$FA,$98,$E3,$8A,$92,$AE,$05,$DF,$29,$10,$67,$6C,$BA,$C9, |
$D3,$00,$E6,$CF,$E1,$9E,$A8,$2C,$63,$16,$01,$3F,$58,$E2,$89,$A9, |
$0D,$38,$34,$1B,$AB,$33,$FF,$B0,$BB,$48,$0C,$5F,$B9,$B1,$CD,$2E, |
$C5,$F3,$DB,$47,$E5,$A5,$9C,$77,$0A,$A6,$20,$68,$FE,$7F,$C1,$AD |
); |
Shark_SE: array[0..255] of Byte = ( |
177, 206, 195, 149, 90, 173, 231, 2, 77, 68, 251, 145, 12, 135, 161, 80, |
203, 103, 84, 221, 70, 143, 225, 78, 240, 253, 252, 235, 249, 196, 26, 110, |
94, 245, 204, 141, 28, 86, 67, 254, 7, 97, 248, 117, 89, 255, 3, 34, |
138, 209, 19, 238, 136, 0, 14, 52, 21, 128, 148, 227, 237, 181, 83, 35, |
75, 71, 23, 167, 144, 53, 171, 216, 184, 223, 79, 87, 154, 146, 219, 27, |
60, 200, 153, 4, 142, 224, 215, 125, 133, 187, 64, 44, 58, 69, 241, 66, |
101, 32, 65, 24, 114, 37, 147, 112, 54, 5, 242, 11, 163, 121, 236, 8, |
39, 49, 50, 182, 124, 176, 10, 115, 91, 123, 183, 129, 210, 13, 106, 38, |
158, 88, 156, 131, 116, 179, 172, 48, 122, 105, 119, 15, 174, 33, 222, 208, |
46, 151, 16, 164, 152, 168, 212, 104, 45, 98, 41, 109, 22, 73, 118, 199, |
232, 193, 150, 55, 229, 202, 244, 233, 99, 18, 194, 166, 20, 188, 211, 40, |
175, 47, 230, 36, 82, 198, 160, 9, 189, 140, 207, 93, 17, 95, 1, 197, |
159, 61, 162, 155, 201, 59, 190, 81, 25, 31, 63, 92, 178, 239, 74, 205, |
191, 186, 111, 100, 217, 243, 62, 180, 170, 220, 213, 6, 192, 126, 246, 102, |
108, 132, 113, 56, 185, 29, 127, 157, 72, 139, 42, 218, 165, 51, 130, 57, |
214, 120, 134, 250, 228, 43, 169, 30, 137, 96, 107, 234, 85, 76, 247, 226 |
); |
Shark_SD: array[0..255] of Byte = ( |
53, 190, 7, 46, 83, 105, 219, 40, 111, 183, 118, 107, 12, 125, 54, 139, |
146, 188, 169, 50, 172, 56, 156, 66, 99, 200, 30, 79, 36, 229, 247, 201, |
97, 141, 47, 63, 179, 101, 127, 112, 175, 154, 234, 245, 91, 152, 144, 177, |
135, 113, 114, 237, 55, 69, 104, 163, 227, 239, 92, 197, 80, 193, 214, 202, |
90, 98, 95, 38, 9, 93, 20, 65, 232, 157, 206, 64, 253, 8, 23, 74, |
15, 199, 180, 62, 18, 252, 37, 75, 129, 44, 4, 120, 203, 187, 32, 189, |
249, 41, 153, 168, 211, 96, 223, 17, 151, 137, 126, 250, 224, 155, 31, 210, |
103, 226, 100, 119, 132, 43, 158, 138, 241, 109, 136, 121, 116, 87, 221, 230, |
57, 123, 238, 131, 225, 88, 242, 13, 52, 248, 48, 233, 185, 35, 84, 21, |
68, 11, 77, 102, 58, 3, 162, 145, 148, 82, 76, 195, 130, 231, 128, 192, |
182, 14, 194, 108, 147, 236, 171, 67, 149, 246, 216, 70, 134, 5, 140, 176, |
117, 0, 204, 133, 215, 61, 115, 122, 72, 228, 209, 89, 173, 184, 198, 208, |
220, 161, 170, 2, 29, 191, 181, 159, 81, 196, 165, 16, 34, 207, 1, 186, |
143, 49, 124, 174, 150, 218, 240, 86, 71, 212, 235, 78, 217, 19, 142, 73, |
85, 22, 255, 59, 244, 164, 178, 6, 160, 167, 251, 27, 110, 60, 51, 205, |
24, 94, 106, 213, 166, 33, 222, 254, 42, 28, 243, 10, 26, 25, 39, 45 |
); |
Shark_G: array[0..7, 0..7] of Byte = ( |
($CE,$95,$57,$82,$8A,$19,$B0,$01),($E7,$FE,$05,$D2,$52,$C1,$88,$F1), |
($B9,$DA,$4D,$D1,$9E,$17,$83,$86),($D0,$9D,$26,$2C,$5D,$9F,$6D,$75), |
($52,$A9,$07,$6C,$B9,$8F,$70,$17),($87,$28,$3A,$5A,$F4,$33,$0B,$6C), |
($74,$51,$15,$CF,$09,$A4,$62,$09),($0B,$31,$7F,$86,$BE,$05,$83,$34) |
); |
Shark_I: array[0..7, 0..7] of Byte = ( |
($E7,$30,$90,$85,$D0,$4B,$91,$41),($53,$95,$9B,$A5,$96,$BC,$A1,$68), |
($02,$45,$F7,$65,$5C,$1F,$B6,$52),($A2,$CA,$22,$94,$44,$63,$2A,$A2), |
($FC,$67,$8E,$10,$29,$75,$85,$71),($24,$45,$A2,$CF,$2F,$22,$C1,$0E), |
($A1,$F1,$71,$40,$91,$27,$18,$A5),($56,$F4,$AF,$32,$D2,$A4,$DC,$71) |
); |
{$IFNDEF CPU64BITS} |
Shark_CE: array[0..7, 0..511] of UInt32 = ( |
($16F3A365,$060D838F,$5CAE56F6,$A68857EE,$3C2C4D89,$EBF51635,$88E85BDC,$652174BE, |
$86C17921,$0D4E9A80,$CFFA58A1,$27BA7D33,$A237B530,$88D9E104,$A4FBE816,$693B8755, |
$26B254A0,$DAC95918,$FB336AF3,$45C2E369,$7B3E4EF4,$A96E1FB8,$35EB7EF0,$B7578F14, |
$32056F74,$839AF80B,$C71F277A,$AE37F55C,$FDFF37D5,$A4208538,$AD3CDB6F,$35991E74, |
$B32A07D1,$BA191594,$2E572B7B,$5344D177,$103FFE43,$E7EFE5DE,$41DE5E5B,$A3796FDC, |
$5FC882E5,$2CF9643C,$48196D22,$FFDBF6FD,$BBCF780A,$33949DFB,$D0CEC8BD,$7D15679D, |
$024498B1,$5F5E229C,$62C683CE,$12236347,$3041F7C5,$DCC4DA97,$9032DA44,$0B43190F, |
$DFC5A6E2,$C05598ED,$7753F4B8,$9E5FD31A,$C0F136FE,$9AFA8243,$F3D61528,$CC4F6B06, |
$3BC25C0D,$DF38612A,$EDC0C996,$43CF60E6,$F855BEE0,$CFB3D0BB,$ECE28534,$96E071A8, |
$D909FBC4,$21B7FEBC,$B4C41655,$8ED4628B,$B04CD3C2,$30682646,$94BA1FD3,$B5FF5DC2, |
$4B7FB931,$75AAC52F,$37AFE641,$E809AD88,$8D42D2E9,$0EB2213D,$61A057DD,$98525095, |
$70BDE53C,$AA92A405,$C63D6BD8,$7B18E412,$F67C9C1D,$A7DC3E85,$87E33583,$D8618BCE, |
$A79D3C05,$E34AB487,$73DB312F,$20E397D7,$1D7008AD,$05F13832,$7FB68B63,$17D25B75, |
$0366D413,$8A7133D2,$00000000,$00000000,$96FE8762,$EAA17F5E,$75176C09,$C101F186, |
$0488C597,$BEBC44CD,$8C609E4B,$DB9D3073,$DA6F2FD7,$ABC6CD6E,$1F34901C,$5AAF1AAE, |
$89CA177E,$B00E65F0,$ABF08649,$D47B7825,$5B404772,$924520F1,$D5644188,$1686321E, |
$3F4A999A,$618425E7,$0D4FF6EE,$E21EDDEC,$A0732D81,$D787C398,$E407FAEF,$1F6DF9C7, |
$676C0AFB,$79B036C4,$27901802,$0FE64856,$D602959B,$9CF701CC,$AE5A0F7C,$BFE82DA6, |
$CB729D36,$990639FE,$E525B64D,$CA42E889,$8249BCB6,$B3F2DE4D,$E643625E,$4033DB5B, |
$4C91A8B5,$4167B230,$C397E2ED,$108BB191,$58269361,$18341323,$927642F5,$541D3B93, |
$FA112651,$90EDF227,$45569BCC,$1DC52B11,$BAED34A8,$E6BB8CB5,$BD03252C,$D276FBAA, |
$1A9E1929,$313C4F2D,$E9480C01,$FD73242B,$6A23FC15,$9BAEEB28,$EEA61D85,$C9BE5334, |
$63E4CF6C,$C70C7209,$3D0E012B,$3EDA077B,$46304FDF,$97B418C3,$111DB2E1,$32C0F490, |
$E3E9EB6B,$2BA08ED8,$A9B41EF8,$8B255AB9,$50C3ECBA,$91B99B4C,$E2CBA7C9,$FE8F9F96, |
$8AACC36D,$3A7F5622,$2318DD95,$B15A0C9B,$14B73BD4,$5953A113,$640ADEE8,$F3C10516, |
$2ADFEEEC,$EDF895BA,$CC9C8CB2,$ADCB4EE1,$911096E6,$DE6C0841,$8E2406FA,$84C312EF, |
$D1EC841F,$A83A76D3,$EF845127,$1C91427A,$A6BF70A7,$3665A5C9,$797AD645,$F6303D24, |
$5904DFC3,$CD1B026D,$53A538A9,$1BC8A89E,$DB4D6375,$7EE9DC20,$8F064A58,$51EC03A1, |
$686764A4,$C4F0C9B4,$9A933D2E,$DD90B3FC,$6CEFA133,$7A4C8D79,$5D8C1A54,$73A746A0, |
$BC21698E,$0759EAE4,$4474D76E,$C8EA3A5F,$2BFDA24E,$38D784F4,$78589AE7,$231F2C6A, |
$D4460D2A,$C3A92350,$F75ED0BF,$72F32FCB,$0F0B6E5F,$BD40FF70,$DEE7EA40,$157A89A3, |
$85A7AD32,$873FA952,$60821B7F,$4D7D41DB,$4ED53004,$1E3990AC,$3AE010AF,$0A177064, |
$F1928D99,$9311499A,$223A9137,$64751DD5,$5569658F,$FA2ACECF,$7A1C0256,$7C410EF6, |
$332723D6,$56B5E945,$B2084B73,$6F3604DA,$9D7D2CAA,$E95DC4E3,$C8144925,$13770A2C, |
$A5D9A4B4,$BC14961B,$B8A9AC19,$B9E5AE29,$C55BBFCB,$F169D7C0,$C479F369,$2446C68E, |
$3986C4BC,$806643B6,$719FA99E,$7FBDB54B,$B7A2C246,$04A55159,$215C4524,$EE042E07, |
$B5E65AF7,$5BFB73C5,$2C13B3CA,$0C1AF3EB,$EB0C94B0,$A22D06B7,$127B66F2,$B8B1C742, |
$E86A40A3,$285C3565,$207E0986,$3B2B3F49,$9C5F6008,$3C72D5AD,$EA2ED812,$770217F9, |
$439AC6EA,$FC274D40,$C1D37A5C,$4FD5930D,$FE99E3C6,$2E51B6EA,$05AA8935,$6B935583, |
$F2F4598A,$19607A48,$9BB1718C,$08BFA2B2,$97DCCBC0,$3F8E6E10,$812F68A5,$3983ED9F, |
$664E4659,$AC9F278A,$98D7A59F,$82CE9160,$7E94C7C1,$C2FD4A3B,$836BF014,$66DDCF03, |
$06CC5D26,$E1E26651,$E1AD73DA,$74FEAC44,$BF47BD9D,$8D28D936,$34C93252,$62789E5A, |
$93540E57,$81322ADD,$4FF77CA6,$CB1681E2,$6EAB3982,$2512AFE5,$B6808EE4,$D18A4017, |
$560FB19C,$705BFD1D,$7671B81A,$4B70C254,$D720D939,$49D81082,$AC1E97CD,$E0B60F3A, |
$6B01B0B7,$4E81FA66,$E7612EFC,$951CCA15,$F0B0C13B,$463E58D4,$9E1BF8B9,$632CF731, |
$09C73379,$5CA29921,$D3A81CAE,$F764544F,$AF7843DE,$6AC73CE8,$DD813E53,$9F0BBA71, |
$24F6CC11,$85977B84,$BE65F13F,$5807C878,$0E2922FD,$686FEE3E,$CDBEC010,$78E45FAF, |
$B98BE0BB,$6CCABF67,$69452806,$11DFD8FA,$5287740B,$CEE7B9D0,$25D480B3,$50B86ACA, |
$A315F992,$5DF6F04A,$A896525A,$5E0A4BF7,$0B83ABC8,$03FCBBBD,$1E16DCBE,$8F800BE0, |
$17D1EFC7,$D32292C1,$B16E9F60,$E5473708,$D28A500C,$224B4501,$FFBBAF64,$FB7EA7A4, |
$368DAAE3,$3D26BCC6,$2F7567D9,$866BC039,$0C6DBA4C,$3731CCA2,$9F39B41B,$B603E67F, |
$E08F3F78,$A1D1BD0A,$2D31FF68,$D935E2A5,$6DCDED91,$AF639C37,$AAD2CAEB,$0154696B, |
$800D2407,$ECACFCD1,$6F897520,$F03DBEAB,$A1516123,$02A8D2D6,$D82BB766,$F498EFF2, |
$FCDD7B77,$710F9476,$F43804AC,$F8821C19,$5EEACE47,$F9D67572,$F977F242,$1A9CC1F5, |
$8485E190,$5210B81C,$13592A50,$6D9ED60C,$CED81403,$F2956C7D,$19F8CD3A,$BB4D7CFF, |
$CA50D194,$4C2928B0,$18DA8198,$6E626DB1,$1BBC558B,$E4135E63,$7CD05F70,$9DA368A7, |
$572DFD3E,$A574EC53,$3163BB67,$09EBCBD9,$DCA372F1,$4A24AB3F,$4712037D,$429B098D, |
$99F5E93D,$57E1802E,$8B8E8FCF,$EF50476C,$4A5DF593,$A085D461,$07EE1184,$34CD771F, |
$C9360587,$C6581B62,$F51A480E,$2DAD0D57,$08E57FDB,$898D886F,$0AA1E76A,$D6D3AAF3, |
$40FC12F9,$76567E92,$3E68D538,$B4AB34A9,$289B765D,$B2A6B726,$15957776,$8C7CB05D, |
$38A4881E,$554952F8,$01224CA2,$D52F114E,$95985371,$60D04C8C,$29B93AFF,$6789A668, |
$544B292D,$2F05DF81,$5A620BD0,$476A31BF,$72F97D8D,$F5CC8699,$7DF213D2,$488C79E9, |
$51E1A018,$44968A02,$6528924A,$26EE1458,$1C52440F,$D0DE297C,$C2B5AE4F,$C5A4A0DF, |
$42B88A48,$29085C0E,$743520AB,$142EE0C8,$493B2180,$2AF4E7B3,$4DB3E417,$9448A37E), |
($05BA30CE,$E2795BA1,$F5E0FBDD,$65B5D634,$64DD8C55,$2D7D7F14,$ADD1C20B,$EEFBF778, |
$F11968E7,$1EB0FBD1,$CE30CD8D,$E6073F45,$CCB67E90,$21FFD3CD,$A750A262,$DF0941CF, |
$B75EF18A,$C61DF5B1,$9DC337C6,$C5C7DEFA,$073C83D3,$2581B729,$167173CF,$A5E97513, |
$381526B9,$DD3673BD,$F91EBB93,$E8BAA1EE,$F625EB34,$3B314CF8,$D5FC5DF8,$579D4BC8, |
$E7681B28,$BB598EC2,$80708794,$C8A06B1A,$6E5CEC3C,$1C8FC9A3,$0807D374,$F60A5A3F, |
$3A9395A4,$1ACE9F35,$7AAB2CEE,$7E9E5038,$D0466D36,$B5E41069,$B92602D9,$8CEA6EE3, |
$8AF1E7FD,$F952DDAD,$1BCC9075,$B19A748D,$B2E4C144,$2464AE10,$F4A35829,$FCC9A070, |
$A06C21B1,$FA88F6E6,$D105CEC2,$2C98662D,$D77AEEE5,$9065A740,$AAED41D8,$CB7A4051, |
$4AB9D923,$55A279BA,$98790708,$27BE855B,$52B059BF,$BABC97FB,$DDFB8E8C,$A19711F7, |
$CB8AFD43,$047E64E4,$C90C4E5E,$C386886C,$281B7551,$C422C7C3,$15B46326,$FB6DEFDF, |
$B5D84297,$01E51939,$9C809432,$5CBBA8BE,$09447080,$6F762C7B,$D4BFFE0C,$CEE13D8C, |
$FF619BB4,$54476083,$BC9C3217,$6E933542,$0E78F353,$4AF79B52,$B49BE163,$98996F7D, |
$6823CC1B,$A07208CE,$3012F5CD,$2B3C2982,$FDE728A9,$93BF8C0B,$E62BB8DC,$2225F886, |
$CF736E79,$7F7B4901,$00000000,$00000000,$9F4584DB,$023F3272,$5BF4293F,$D5CABB80, |
$E1173B0F,$07A44FAF,$4CC6F904,$E95FB8D7,$04F9933A,$7B052DE5,$7716CF54,$6AED51A6, |
$E8534B8F,$68D263D4,$BE1A810A,$A96BD9CA,$DB84AEAB,$1D6AD09A,$1DB3B052,$0D67B5E0, |
$ABAEE22C,$52063615,$93BBC495,$8F3045A8,$4647996D,$D8AD0E60,$EAD5F892,$AF2A8F5C, |
$BF5922FE,$3017AF8E,$F2DC780E,$4034611D,$D2C0DE2B,$721CFCE1,$1A8F3381,$28E602C9, |
$2F27F682,$E1A370EA,$AF577116,$29031BF0,$100E53E8,$1914B47E,$60241F6F,$567852F1, |
$9BBC17E1,$793A1F97,$1809809C,$EF1EEE41,$14F7C0D2,$6211999B,$7E52BFD4,$059B7DDD, |
$D841BE42,$43EE4A56,$E910E87B,$F1AE1590,$95C4E4B2,$33CD84C5,$BBA0B1C4,$4B12826B, |
$D3837DDF,$EB608AA5,$796E3C07,$201ACAF4,$2CE2E66B,$BF27EA26,$570A6971,$58C5CC5A, |
$5E4E19F1,$37B3E021,$215F05D1,$AB54EBB8,$26638602,$8ED55C91,$2BDE65B8,$9AA65D0F, |
$C4B1ADE4,$D7F589F2,$34EB66F7,$50390467,$23D9B6CC,$6CAC0730,$81332460,$51DC1D5E, |
$272025F6,$17A92AD5,$13CB4301,$47902EB2,$8F4BD733,$1B2B860C,$702A4C87,$4F6CE68F, |
$6167BC9B,$CF0424B5,$0143A3F4,$997C7644,$B121D1AD,$7AE034DC,$C6371EF9,$100D657A, |
$FCA48B5D,$0AC3FA4F,$1288E0F5,$DEEC58F6,$2DA1459F,$265B9C62,$8DCD642E,$DCD36A84, |
$51754956,$E4380D37,$ECAAD8B5,$13D74E31,$417B1ABE,$FD2CB949,$83B5977D,$9624F1D6, |
$A6130196,$4675378B,$497CC9CA,$0B26E376,$47043A99,$41D17824,$B0627259,$E39C4298, |
$FE223840,$CD3B16C7,$AC9261FF,$7787813C,$24E5351F,$492DB019,$C84FEDAA,$5AFAFE28, |
$583139D6,$8B4E214C,$4BFA7AD7,$CCDE0FFE,$194A2368,$76629805,$E5EEA835,$7CA1624A, |
$3E6A069E,$61CBB2D0,$913D7788,$48C8A920,$114DF01C,$8068C23A,$0F3B50A7,$D38BED16, |
$201CA625,$32289DFC,$5649CA85,$C1B9BA1E,$874C0447,$ED21DC33,$42BE0A57,$A3A82385, |
$7D97AF3D,$5B1FE711,$A2EA92AC,$3D701A6E,$67189CBC,$73F9E5D8,$E05498FB,$9ED839EB, |
$E2D22BE6,$5920D563,$1F35034F,$CA9F5968,$73EF5C6E,$11E87C43,$366DD5EA,$97C1E8EF, |
$C0483EDE,$ACF0A417,$BAE31230,$D26EF42F,$067F2027,$BCFDC16D,$993AA4FC,$BEC2F31F, |
$8C8EC7DA,$45AF1CC0,$0A816069,$31F2B6B7,$F39FDBFA,$D9481759,$E4AD0BC1,$E5DD140E, |
$3CECB583,$A6335E58,$DCB82D78,$38EB67B3,$229A1538,$F5D07174,$B61D527E,$5F6183F5, |
$82F63489,$0F588792,$92F86761,$164C33EC,$3956854D,$444A05F9,$A495B28B,$818DDB03, |
$EF6FC85C,$4D53D4FD,$0CFE404E,$8D0F77DA,$DAC70D5F,$8416A6DE,$DF7D3D91,$666FFD7F, |
$FADBAB7A,$B63E3B22,$C38D2E37,$F2743EDB,$A3A93158,$A40C6C2A,$558CDA6C,$9F3D20D2, |
$6BE6DCF2,$FEF69202,$4E404A19,$2EA7545F,$31515639,$B2405FC6,$53F3FA4B,$23C0E1BF, |
$3BD03650,$83B2E971,$54CF7998,$06415696,$CDF5DD64,$B883A589,$43FDA9A3,$3AD455C1, |
$483F6A3E,$925A9532,$94874746,$AAB1F281,$974257AF,$F435684D,$907ED47C,$D1B4DF64, |
$69606FEF,$390E7E8A,$25A696EB,$D051C65D,$659E2FA1,$B4010950,$A86BF2C5,$0C82ACD9, |
$72ACFF9A,$88940A07,$76556CA0,$F39127E2,$5F0DBA05,$AECF9665,$2A9DC64C,$03DA2B4B, |
$3DAF1677,$3F4F281C,$74D3DFBD,$3469CB6A,$5CC8AAEC,$F04B0CA9,$44C12A70,$1F55E2E8, |
$5AB78ACB,$4CB6CDC4,$E3918812,$C05CA327,$A9285131,$95FEDA9D,$782D9FF3,$B966BCB0, |
$8934F714,$A7D64761,$7169EF73,$D61090CB,$F85D1867,$71C6D7AA,$329446D0,$ECC4C50A, |
$4038B94A,$6450CF0D,$6D99FCD5,$420B536F,$33D7E524,$75B8B34E,$7CD40CC9,$C2639155, |
$D9021DB6,$DA923C12,$C5F20E10,$4E89FFB6,$D6394D11,$0919D104,$EDE97B41,$8AAB3875, |
$0BC2C39D,$A88EC0F3,$4F03E9ED,$B7DB221B,$0286B31D,$C7F8EC88,$FB98088E,$2F424D66, |
$9AFFB415,$E04669D3,$887754E0,$3EAA3125,$03C510E9,$5E849ACC,$8E0874C7,$8257F048, |
$B3A762B0,$BD18D854,$848914AE,$B3A546FF,$7F111C20,$9CE70B99,$1732D03B,$3C950357, |
$7BE88F1A,$E7E2267C,$A12F8245,$63F480A2,$8BB24409,$602EABE9,$1CF013A6,$941BC3A4, |
$6AA57F06,$678AE446,$59729A22,$12325708,$9601F45B,$6D491E09,$2958D6A5,$5D5EB187, |
$0DBDE3BA,$1473019E,$F76648C0,$A24D3ABC,$6F1F4FC8,$85F3BFE7,$63E10F86,$08FCC83D, |
$860FA7B3,$745DAA77,$62A2AC72,$9180BE79,$F05ACB13,$87CC8D95,$2E645576,$78DF06AE, |
$A5D6117F,$18F1AD47,$C10B9D2A,$358CD253,$372E761E,$0EBD9EAB,$BDDF91E3,$F7EF4306, |
$4D855AF0,$7023CE93,$EE2C6BA8,$D42FA2B9,$EB965B66,$3656F918,$CAC95EB7,$9D0212A0, |
$85CAB75A,$2AD930BB,$45828984,$862994AC,$5036EAA2,$7D447B73,$AE14D2E2,$B07F6DB4, |
$C2CE8DC3,$6B08489F,$9E06272F,$9B434436,$75907C49,$AD15BD2E,$6CDA5F21,$DB77252B, |
$665B3F48,$EA85939C,$35A8C503,$C9457223,$B865A12D,$159618A7,$5D8B0918,$69377AED, |
$C774BD0D,$8971133E,$1E76A0BB,$53E32F2C,$3F29A56A,$F8B7C494,$DE3E9E65,$FF138B3B), |
($FDABECC6,$7C6A2EB5,$752BBEA0,$401CDA0A,$56DC57C4,$19252171,$01D70787,$56DEC6D3, |
$73C6AC58,$41C751FF,$A92CB5F9,$C9067697,$AAA0BC85,$3391C917,$0E742AFE,$AE0A9A4C, |
$162A62F4,$AA8CA972,$2935DF99,$5AA19391,$FE27E5BA,$86FD9135,$1D3F538E,$FFCA074B, |
$24CDFC1B,$0E3CB65D,$7FE9885D,$4384B2E0,$8DE149E2,$C73AC0CA,$45972EB4,$48E5BC76, |
$6EF9FFD6,$BE0D56B4,$C0EF5F50,$200E6D05,$597F7ABD,$E1F17DEE,$0C2F2405,$0243E31F, |
$2741F567,$F4AB09DD,$47CC204F,$E4ACC525,$B83CC272,$348F92C3,$1F645D75,$53837E18, |
$CF4C7229,$D8DA319A,$ECBB9B4D,$81E3CAE1,$EB818E32,$D6E687C7,$8E6D409E,$3DAD7F4A, |
$F053CF44,$28F70B79,$437A3C4C,$493E3783,$461B27C8,$B27203F6,$FFF0E23D,$D02357E6, |
$6F2EF851,$E8D39067,$D49E335F,$26CBBD24,$7B5F945E,$EE164046,$49B80AB1,$4AA65F69, |
$5487593F,$B56C5822,$570B5043,$4FFBE7A2,$3C93B411,$0ABA8563,$E5F5A4CC,$78EC1D8B, |
$15A66B88,$501B16F2,$D27321A7,$271036D1,$F769DA3B,$7FF2465F,$BED1D08A,$35541936, |
$7A8893D9,$B8C88695,$E2CFB1B3,$2FE950AD,$094E3F81,$F90FD76A,$EEE095B6,$2DAAB3B2, |
$5C1E6139,$1ABD499B,$28E2D81E,$0C7F5542,$79049AA5,$425F3915,$95BF01E8,$C3BCF3F4, |
$526A4BC7,$B4B7D3D7,$00000000,$00000000,$2AB9D6E5,$A0362C11,$8C364E65,$91E40619, |
$6B98E452,$454162C1,$6A4FE3D5,$139FA412,$06ED12F8,$01DB8BF5,$B648E88C,$9A85088F, |
$9CF13E69,$3AB3249E,$E143B8CF,$D57EEF2D,$4CD91135,$B1EA6B1C,$E9DA80C9,$7AAFFE94, |
$04B61C03,$AD92F2A6,$207BE018,$A3AE44FB,$65ECCEAC,$EB4BF88D,$9F7D3715,$C0249B1E, |
$1A0546F1,$A8CF4A6D,$8B0C5B1A,$C6E14B3F,$BBB0CB0E,$CE182D43,$17FD6573,$FC526FA1, |
$C2B451AB,$8C471456,$025B0EFB,$AC497953,$185E480A,$0486333E,$5031453C,$18FEAA84, |
$2C54C41D,$A1EDA7E4,$14716C0F,$06C5D021,$1EB35AF2,$055DB8CB,$412132B7,$E5774ED0, |
$B413E677,$36CC71DC,$67B7C057,$470281DE,$251AFB9C,$58E2708E,$1CE85409,$A914C198, |
$40F63530,$B3A98803,$BF06D70D,$638ADFE5,$3A7EA6E9,$0B610E96,$86F47898,$927C6EF3, |
$719DA2A3,$ED8E28AC,$CBFA6E2A,$7548C33C,$35DD8B90,$F3B55209,$C4594353,$8D9C9FA3, |
$A68F9880,$31D22A08,$2E0FCAE6,$0DA4DEB7,$C8766756,$8FDF7CBC,$3BA9A16E,$5DBFC845, |
$CE9B75AE,$8E04F749,$E094BF48,$83A029FE,$32E79EEF,$A4B01F2F,$486F0D36,$1C7899BA, |
$AB77BB02,$654F0FC4,$FB46FE3E,$7DB1A540,$134B7970,$51C09D07,$A50391FC,$CB459588, |
$8242649B,$3FEE9C55,$1BD24176,$FE118CBE,$C13858D7,$76D0ABD6,$316B9793,$5E27A0AF, |
$8395631C,$69305A86,$9A1C2C91,$3B68AF6B,$9BCB2B16,$6DB669B8,$3825A812,$A72877C5, |
$F532D4C0,$D3BB3F0C,$97E40F13,$6FF58AA7,$9EAA3092,$96FA5DCD,$E80D874E,$2C713847, |
$81CE6DE7,$C57923D5,$FA91F9B9,$2B6F6393,$365182EC,$0922ED89,$AC4DAE7D,$324A42E2, |
$74FCB927,$16C21CD9,$9468066F,$95623527,$EF379231,$7B747561,$6D75F6AA,$449AE934, |
$21ACE79F,$F5708228,$23F7E964,$5939FB7B,$E318B634,$7937967E,$F208C1BF,$84BE722A, |
$30BC9014,$08F9667C,$7DB286A6,$EFCDCBB3,$3EC8BAEA,$A6F3FC30,$6301DC54,$EA907378, |
$B9EBC5F5,$62515410,$F3DFC638,$D260B4F9,$AE16A086,$9E033BB1,$90DE1A6C,$38F0C781, |
$93521310,$C2677801,$EA5689B5,$80384114,$B0A5FA74,$9B5E837A,$2D83C39A,$F7336137, |
$A0628A78,$3009A1FD,$E7AEAA37,$D4A564D8,$05611B84,$FB4C3475,$2FD8CD61,$5B7A1864, |
$CA2D69AD,$239605EF,$0FA32D79,$F8D45C9F,$704AA524,$BB50EE7F,$96330894,$392B4C74, |
$2220EEE3,$0FE73DA8,$B2FEF48F,$3717FA29,$33309968,$F26ED9FC,$ED6C9CCA,$D73D0C32, |
$C363562C,$DA99D285,$DB3D1E26,$DE1FE1BB,$DF8B0225,$738D131D,$F6BEDDBC,$292C808C, |
$62D6DBD3,$BC4EB5AB,$0AC236FD,$039868EA,$B79FEF0B,$CC5BCE5C,$4A3403CD,$B031E0E9, |
$87237F1F,$C4A2A820,$58A87D3A,$B72FBB3D,$08993806,$AFD111B9,$857871E4,$68EBD173, |
$A4D4967B,$9D9B535B,$69C3EAA9,$E9081B92,$D3A42620,$71CEF002,$80196A60,$93A7E506, |
$DC070B59,$891AAC9D,$7E3E8FDA,$155A7433,$51E642BB,$4E206C57,$9847226A,$9721D638, |
$6CA2F12D,$12442FE7,$DE5C05A2,$2553D5CE,$2696F2E0,$A275CF0E,$D8B1175A,$24885E3B, |
$A7589F07,$670CECDB,$CD177CD2,$749348C9,$AD9AA9FA,$64948431,$FC7CEB41,$2AB4E866, |
$4BE3044A,$E6EF263A,$4D0E16B2,$E734ADCF,$8ADB5C9D,$903F8DEC,$3F1FBD6D,$F02D3AE3, |
$D96610DD,$725698E8,$4E821FCE,$1DA3124F,$7211ABDF,$1719972C,$6660C7D0,$11DC470D, |
$7770B05B,$EC55A359,$6814ED2E,$BFD6DD41,$073A157F,$57054D26,$44402933,$1E3B7AA5, |
$3786856B,$5FFC2B5A,$B329F308,$61C93CFA,$84AF7663,$3E3517A0,$2B6ED162,$F6E8EAC2, |
$608DD528,$1007CCF8,$A1B58DFF,$66D7672E,$D0282F5C,$8B594F82,$42AD3BCB,$1FE0F150, |
$4F551849,$4B7DD49C,$5DC966BE,$4C638F48,$BD5DD9F6,$CFC3A6B6,$615AD2AF,$46D90A2B, |
$F4E5D347,$8565F9DF,$92851497,$94B9BED2,$038C097C,$FA97BF80,$7C658121,$B9130D60, |
$D7123A23,$DC5C02A4,$CCC07B55,$224D8E1A,$F8CAF742,$87261AC0,$C9A160D1,$D901BA6F, |
$10C7700C,$AB572287,$C6024DA8,$21D5E6F0,$BA67CC89,$98C6EB90,$E679ADB0,$827BA20B, |
$BC8ADE71,$991D6065,$0B15317A,$5546AE39,$340A8C17,$A56B94DA,$129C7EF7,$071E5BD4, |
$5F926845,$E02AF61B,$8FBA4719,$6B73B999,$DDD00CDE,$DFC46A4E,$C7D54A2F,$770B2023, |
$F184C8C3,$7E29CDAA,$76A7B7DC,$BA8B658A,$A2398483,$9C40D8AE,$A8FBB27E,$9FD8B044, |
$C58E44D4,$DB425970,$53BD4C40,$E2691504,$88805266,$3C76F4BF,$39F2AF95,$F1F6B116, |
$0DF82382,$549D25CC,$5B247446,$4DB804BD,$D6C53DA4,$8A82C477,$19894F8D,$5258F5ED, |
$91091DEB,$6E2E0152,$999025ED,$C1FF10EB,$643BC92B,$BD953E5E,$AFC1A701,$C8DDFD62, |
$3D44B396,$5C6443B0,$9D2639EE,$6C6DE24D,$78D39D22,$1481FFC6,$F91DF0C5,$D1F8DC13, |
$A3EE8304,$CA9E1E7D,$D1FF28DB,$DD878951,$B5C4E1F0,$6012B70F,$5AF373C1,$1B66C26E, |
$55505EB8,$E3B29EF1,$D54934D8,$70157BF7,$E422A34B,$2E32DB58,$895755E1,$6AA8326C, |
$5E456FC2,$B6F430C8,$1110778B,$FD89E454,$DAEA19A1,$88C12768,$B172FDF3,$CD8045A9), |
($6655B742,$99183E61,$A50D6860,$B2872032,$060528EF,$0946F63B,$141EF07D,$36612B9A, |
$DD49579B,$0634DA84,$486C8A57,$FC9C9E9B,$744E6FD0,$A63FE3C0,$D8B46BF9,$F1515758, |
$CD5197FF,$3E82559F,$2BC40177,$92E12D26,$5A7752C5,$C3BB433A,$5183267A,$21C3852A, |
$CF528F09,$39130725,$2DC12998,$9BA7DB1D,$873E055E,$C58F99BE,$8F32656C,$D9D42449, |
$8CCA71E1,$27F75FAE,$A8FC3430,$59B91019,$CAAFB36B,$CE768AF9,$F0887E03,$9D930199, |
$F3706A8E,$63B07A7E,$A70E7096,$B5167288,$E967D22E,$40CC1A28,$79BF3380,$4D01D3EB, |
$6456AFB4,$9E896CDB,$C75EEF3B,$2548BAD2,$AB0420BD,$A79A6BFE,$BB1CE0D9,$9F2CE4E5, |
$82C3393C,$32EA1462,$F7765A97,$6D67DEFF,$B31080EB,$83775912,$4E69A2B8,$F5DA68A0, |
$98D4819C,$11967434,$4D91B635,$0BF91347,$7DB90399,$43D6776A,$7FBA1B6F,$444725D0, |
$2E393D15,$6584A0FA,$121BD892,$3F27DDA1,$DAB7730F,$F6C005E2,$73B04B44,$56CB3CA6, |
$F1737278,$642128C4,$35D589CE,$BF4AE9F1,$EE99F6BA,$B038C54E,$9123EDD5,$F47FE09E, |
$69A7F3E4,$75B75CF0,$1FEA84C2,$D419ED8A,$B4EEA47F,$73838674,$EF62FAC1,$498AEC13, |
$8EC96917,$20660D14,$3FDAF10A,$A48006BC,$55851663,$2F1421AB,$92DBF958,$0A5C9B79, |
$567D02EE,$D1375A4C,$00000000,$00000000,$17E6E4F0,$C842507D,$9320F523,$F3EEB224, |
$C8ACAB9D,$C9E7D843,$DCB25BE0,$FF86F3D9,$78443FFB,$B4B3FAB6,$31D3B9D7,$B19D4D70, |
$26355D27,$79DF1D0D,$23C86145,$8EBA90D1,$3BDCC113,$AA57A23D,$83383547,$CB583D3F, |
$50782A01,$D871AC77,$9F2AA508,$E162AB52,$1018C064,$38B68F1B,$1A17B8A0,$237C6056, |
$3DD9E9FC,$A3115406,$FF7A3AA5,$713C6308,$D54537A9,$1A6F6773,$D94F6782,$08E37E05, |
$80C021CA,$357B46D8,$283C15FA,$6CC256C1,$15E5FC06,$CFD302C7,$7E411714,$BDF50C8D, |
$6FA2DB0B,$7CF1AACB,$E56D8205,$5240035E,$6DA1C3FD,$7B60F871,$DF4A4F6D,$01A5883E, |
$19EFAC2D,$DD5F1BB1,$3824D59E,$5474D9DA,$DB4C7F74,$0F722CBF,$459DD607,$17A2AEB0, |
$CB54BF10,$37C4A3A4,$853D1DA8,$C21ECB04,$A2F34CF4,$4273FF54,$1BECB4DB,$DACE490B, |
$F5754261,$6AF68C45,$342E85B5,$46F8C0AC,$6E59D770,$85438396,$F8841E31,$81C8BC6E, |
$84C611D3,$3BACE259,$479ECEF1,$1033FC0A,$080C6032,$1C5BBDF7,$B6EDBC89,$7412D4CE, |
$70485FC9,$A8E84741,$37D69138,$B8DBBB4B,$020318F6,$079152BA,$6BA4EB12,$72260E4A, |
$60509FAD,$905EC85A,$1E1188B9,$2DABC4D7,$89374D83,$D092D272,$B8E4F454,$610F9F02, |
$4B949EDA,$02BFE57C,$29C71981,$95707F9C,$BCE2C44D,$6FD83B83,$3E21FD71,$5D322FE1, |
$5F8A6EA7,$34DECEE6,$5E7162DC,$CD6CE7BB,$4A6F92A1,$FB0DCC21,$8ACF590E,$2EB1A995, |
$C6A5E340,$DCFA938F,$BAE7ECA2,$669ECDB8,$0E0948DD,$151D4BCC,$9726C53A,$FD3916A5, |
$77B67B5D,$581C9827,$0A0F78C4,$1BCAEF4D,$527B32F7,$DFE0FECD,$0C0A502B,$128C1976, |
$B113981D,$84E60BA8,$86C50925,$3C3DB0E3,$FB7C0ABC,$7FEBC789,$B0E89466,$7D5422F5, |
$8B345575,$D70380C8,$A308408F,$BBC1D609,$0BF474BF,$E278C610,$AAFF2CC6,$5E2842A3, |
$2A3F0D0C,$6B53047B,$05FD3C62,$F7658DDC,$F28B66F5,$9A025323,$685CFF9F,$8C0575AD, |
$FD792253,$76AD31B2,$BEE1DCBB,$68496939,$243645D1,$7E4E4FB7,$D6BD2324,$E44C1C94, |
$EA9FC6A3,$BEEF61CF,$BF1AD0C0,$91FB4064,$4997862C,$052EB7C6,$7BBC2B76,$4A908151, |
$FC822E28,$8F1F18EF,$5B8C5EBE,$3A096A67,$4466DA7C,$EE1087ED,$53803E8C,$2652D790, |
$203075C8,$7099EB36,$CCAA9B84,$C7307CC2,$E16BB21C,$5C97A7DF,$AEF91CDF,$50FFE622, |
$B716B0F2,$8DA0FD93,$61AB93D6,$69ECE107,$161DE88B,$31F07920,$D3401F46,$13299148, |
$94DED1B7,$031A6D42,$813B2DB1,$CCC96F85,$D14307B0,$14B8C3F2,$FA8706C7,$8659EED4, |
$7C420FE2,$BA645E37,$88CC41F8,$2920FB2F,$25CD49AA,$87FC66EA,$4398FEE8,$1EE4588B, |
$0FF244A6,$ECAF6291,$DEB14316,$F817A163,$A0F05402,$45E2ADEE,$27CE515C,$806D3450, |
$ACFA0429,$576EB498,$E090BE67,$A5258E82,$21CB79B3,$892BC26B,$63A88B20,$6E7DB3BD, |
$ED61E237,$4E1BBEA9,$39DFD9E5,$ADC6F087,$6A5FE769,$8B942717,$764D7726,$A1AEB17A, |
$A4F6641B,$4B35096F,$C55DF7CD,$22D9E868,$E76E9AF3,$55D151E4,$BD19C836,$966A12DE, |
$90D8E1AE,$0DCDC9C3,$4C6ABA4E,$F24B3A1A,$1814A056,$24ED32EC,$724B473F,$AF7915FB, |
$57860E95,$28857311,$2FC2316E,$9C3689A7,$EB64CAD8,$475D4892,$E6959688,$AC6378B9, |
$A907384B,$A00B3944,$13E0D4E9,$C695F4FC,$C957A7E6,$3055F11E,$2C3A25E3,$6215F240, |
$8D317D9A,$DE4576F3,$F48E4E1A,$9344A518,$6C5ACF86,$82D2D12C,$9B2C9511,$EFB50FD3, |
$4665C28A,$E981D557,$75B563AB,$5F8DCA9D,$33D0A121,$B60C1FCA,$03F8148D,$FE237BE7, |
$547E1A18,$D6A608F6,$E89CDE55,$B97E3375,$1DE99C34,$D388BF30,$E368AAEA,$5B06F565, |
$07FE2494,$F0F4DF66,$9AD7996A,$1607268E,$AD010852,$AEDC9DC5,$4060EA65,$E0C7236C, |
$D2BB133D,$EA9BB815,$FE8136DE,$888E4A55,$3C22E587,$5AA37D5B,$11E3CC1F,$C104A646, |
$71B353B2,$515A6E1C,$58744A33,$C42A1180,$22336D3E,$7708B98C,$1C12904F,$2A3A966D, |
$B515A804,$8A31AF29,$D0B80BCB,$ED0AEAAF,$C15BC7D4,$2C0E4CE9,$4F92AEC3,$0C6841FD, |
$B91FF82F,$98BDB65F,$9CD2B185,$1F41D0B5,$7A47270D,$B322A80C,$9D29BDFE,$E6F3F9E8, |
$B2EB8C90,$7AC5704F,$AF0210A4,$A94DCF7F,$F97F124A,$787A9533,$C4A6FBB6,$DB6BC135, |
$96DDC941,$048B3FF8,$992F8DE7,$E8245D69,$D4BE3BD2,$E3DD4E2E,$5C727A2A,$CAFDB501, |
$EC9AEE4C,$B7A997F4,$4263F293,$E75671D6,$C358DF22,$2B9F1E53,$9ED1A973,$18D0820F, |
$E4968E7E,$ABF22A03,$E293A691,$A2B4DC38,$65ADA3CF,$673B4586,$01FB0C7B,$F9B2295D, |
$C2A3D359,$D22D370E,$6253875B,$97CF9AE0,$04063019,$0ED7A481,$3028B5AC,$482F642D, |
$CEA98372,$C0A12E78,$322BAD5A,$4FBE3697,$419BE61E,$19750A31,$362D9D43,$41699216, |
$C0A0CBAF,$D5BC65B4,$09F76C49,$E5E994AA,$0DF15C50,$EB3E302B,$F68D56EC,$94D5F7A2, |
$3A27CD68,$53E58B60,$598F4648,$3D9838DD,$67AEBB39,$60AA173C,$D7462F5F,$1DFE35C9, |
$A6F57CED,$4CA45BD5,$A10B5879,$BC5084B3,$9525DDCC,$FAA8441F,$5D897651,$334F9C5C), |
($83ADF27E,$DA1687A8,$578D9F22,$E35C9378,$1637FA40,$303CA453,$74B20375,$A088321F, |
$9ACB95E9,$C9863F3A,$7D0B0ED4,$5FCF47C5,$E1280B4B,$4AA211E4,$871D1289,$E1A4C9BA, |
$59F03A4F,$49266647,$E3707BCA,$ADFB36ED,$1F8EF7E1,$CF7BD189,$8F882792,$9735559E, |
$F84E6CDC,$5932A976,$F547818A,$9DC792BE,$85456208,$06FDEEB3,$1EA2CF5B,$46AD3877, |
$1543B27B,$5EB36AA4,$D1BCB511,$8B2EB33C,$E598EBBC,$71105FF6,$6F8C1463,$5441AD84, |
$646D6943,$4C5FFF57,$F633C9B1,$F3485C49,$9D0F3D25,$9CBBBFDF,$67192178,$22D031A0, |
$2213A4ED,$CA024899,$63A9C18F,$19627FB2,$DA5DC831,$9330E1EF,$19666797,$1390B892, |
$9893E568,$2EDF1833,$D3E4C590,$6C779435,$8281CAC4,$53C06E56,$6B3CF494,$6FF3E396, |
$61F1B10E,$FE3B58BB,$60DD89B4,$77EDB145,$D0908DAB,$02F85AC2,$712EDB38,$12EC95F3, |
$FEA6FCAA,$85D9C06D,$6285F935,$90B4964C,$26A3441A,$F1B0068B,$5D40DAB8,$72942855, |
$C5D33FD0,$5C4B3066,$AD9B837F,$5D371D07,$2167ECD6,$A48D866E,$504937EE,$B661139D, |
$A4228EDE,$A27068DD,$E4B4D306,$F8C6B608,$3EE91B37,$6BF657E7,$8B38C765,$AC871B8C, |
$B4FDE4E8,$4EA7A595,$97C278BF,$0D7304F2,$38018B41,$B71D3EFC,$5BA84ACE,$AE7F414E, |
$33E0F661,$AF036C2F,$00000000,$00000000,$7F537E55,$B89660CC,$F1F7617D,$A675DCAC, |
$4426BD2F,$610490C7,$3094BE5A,$C18CA2D8,$CD460ACB,$2ADAAC42,$1A122FAC,$7D1F7665, |
$654151F9,$C58916A9,$7897D699,$EDABE029,$204BD46C,$2D5B6F90,$32CCCEDB,$26D585D1, |
$25D70C21,$9F3FC87C,$DD9960FD,$C60D610A,$C33BAFA6,$80A0597D,$F9625466,$D0E44088, |
$367C2E2C,$1D67CBC3,$480368C3,$2C2742F1,$012C38BA,$89D6E9FE,$2D42393A,$E9AE5458, |
$392DB3FB,$3ECBD702,$E89106EA,$B5E5643E,$DEED28C6,$A882AFFD,$DB71F08B,$1AE60811, |
$B215749E,$924CCC8E,$B1613CA5,$FCC30279,$13AB220D,$825803BF,$3B75C37A,$D992F00B, |
$F2832946,$C8FA125B,$2BAAA94C,$35453D43,$8CFC6FA9,$F9BA9B69,$FB3A24E7,$37BD6781, |
$4FC7C00F,$791AC214,$24FB349B,$16E92182,$EBE54ED1,$DB6AAAC9,$533D7FD5,$D8EEDD6A, |
$725A9303,$7C635B04,$07C4A8CC,$553D80E5,$184A5F2D,$9A46516C,$F46BB930,$14117B40, |
$8EA41F28,$1EE3BC60,$5A847274,$27A9A8B0,$9BE7AD53,$4050D6C4,$9F574DA4,$7BE298D6, |
$56A1A798,$6A8A7A86,$0C25D5EC,$4D23D236,$A1BE5693,$1014CF31,$059CD84D,$B264A7EC, |
$959A083E,$EA2A23FB,$4EEBF8B5,$F0CC2BEA,$0895351B,$76919C24,$12871AB7,$0B8EEA41, |
$76EA73F4,$47D11516,$42CE2D59,$BDEFF9DC,$A50EB664,$2BA68123,$3D9D530C,$05799910, |
$02587081,$E7592709,$A8075B32,$EF53BAEB,$DCB55847,$4FDB88F4,$0374483B,$6E8FCEF7, |
$C9F6EA3C,$1168E250,$B3394C24,$1B9A2570,$8DD05713,$706C7297,$467ECDAE,$865DB7CE, |
$EAC9766B,$52BC4337,$3A59FBC0,$504419F5,$84695AB2,$8F2B074D,$2C6E0180,$6078BDA6, |
$233F9C57,$43D4A167,$2F1A49BB,$0EF77351,$FF8AC410,$0C0F2993,$8960B7E4,$4BDE3C85, |
$A92B6388,$66855315,$41BA6562,$D360372B,$9006D073,$584E8417,$7002E382,$9B3A7C0D, |
$492F5079,$A5F1AB0F,$1DD68760,$2822F680,$CE3242F0,$445562B5,$0E7DA56D,$AA7AF53F, |
$E9BD3E50,$3C338DC0,$04B0E0F7,$3BB24E12,$C4FF076A,$D59DD998,$0ACD459A,$91C8BB2D, |
$96EE4005,$84A5ED0C,$AEEFCB44,$33B8D3F0,$D7542567,$57C5DA27,$C6A777EB,$32C4FE91, |
$43E215E3,$34391022,$B5D1DC52,$C7714C6B,$51650F54,$3FB7FA63,$2E367101,$87219AAF, |
$7376ABB9,$F5B5B2FA,$F3AF11FC,$412CFBA5,$06E89076,$DCEB691B,$C78B4F51,$BB12176F, |
$35086617,$73E80534,$3FC5238D,$E220BE19,$D50C55E6,$B09CFD2E,$171BC2FA,$B9EA4DAD, |
$4D9FB08E,$9E43E51D,$93729848,$36C14AE0,$B6A59469,$A9FE829C,$55D5EFA3,$0405B471, |
$7ACFA618,$0AF2C720,$A2CA1EA8,$7E9B01C6,$6EA02CD9,$DD97447A,$ED0DDEA7,$0781C3D2, |
$278F7CA0,$7866EF75,$912AE8C9,$D1986DE9,$4A5B1842,$CB7E65F8,$CF1E7A4A,$CD838B4B, |
$663519C2,$AB06D85E,$ACB7BBC5,$D4E1F4F9,$D929800A,$FDBF2F18,$9E7B751E,$F2347128, |
$2A8691F6,$BC93D4BD,$81F582FF,$3D4FA0A1,$AFC3F3FE,$BA6E3A0E,$40965DD8,$5AB6DED5, |
$FDD2B491,$EB560E9A,$C217971C,$0976B083,$10DF6A36,$ECD7CD48,$0F519DD7,$23AC1CC1, |
$FA161C5D,$BE6B8E7F,$CA82A207,$7FE72CA7,$58DC02F5,$C0F08FB9,$F71FF10B,$7A9EB5B7, |
$99BFDDD2,$A709F1CD,$54F9D719,$8DD35D8F,$3CB16BB6,$8CAF70EE,$BA804185,$E4DD50AA, |
$7BE39EA2,$83242EDE,$C8DAD286,$98BE0BAE,$EE79969C,$690E0D25,$5F18AA39,$95CD0F5C, |
$BF1C99C8,$56B9F746,$D805B8B0,$7469C6E6,$B9F409BE,$8A529E5D,$6A10CC2E,$E6250A68, |
$F0DB59C7,$2FA33552,$4B7720F8,$42A88C06,$BBAC793F,$6D0BB954,$0BE17D20,$181E52D3, |
$925EA0F2,$BF17A31E,$37501696,$94B1223D,$450A8595,$E8D27939,$A756C6E5,$CCFFA62A, |
$BC68D1F3,$383639B1,$C04FE79D,$EE2F978A,$CC6A3271,$A30C45BC,$E6ECA387,$1F9F9101, |
$BD44E949,$B1E0D04F,$E25C4370,$242DDF13,$9C23059F,$156D5621,$69648415,$88AAC49F, |
$FCFE8C2B,$6280E764,$BE30A172,$DF6F1EB8,$D2C8FD2A,$E5A17DCB,$EF55AE26,$E0D8E4DB, |
$94B63084,$63FCCA05,$1CFABFDA,$A1F41F7E,$759E3BCF,$295EDBE1,$C163DF27,$67F97E74, |
$B8D83104,$038477A3,$D6781DDD,$DE1333D9,$6CF85C58,$3ACE6373,$7C27366E,$D619AE3B, |
$28DEE177,$5BCAF3B4,$6DD464E2,$B3188A8D,$5E349283,$1C1BE6A2,$6848BCAF,$017C2D61, |
$EC21E61D,$8E572A2C,$CBAE9ABD,$F631C559,$AB731309,$81DC741C,$09B90DA1,$FF4775DA, |
$80D9BA45,$B499495F,$4752F514,$0F8B5E30,$D4206D5C,$394A14D0,$77C64B4E,$CE07FCE8, |
$1B3E1716,$F4C99F9B,$0D09ED56,$C4F53BC8,$884C8F5E,$C208D57B,$AA5F2BB3,$080A9DE2, |
$7E7F46EF,$31408932,$34245EAD,$FA3EECCA,$B789ACD3,$20286B62,$B04D041F,$7515EB87, |
$5211476F,$51383494,$11F3528C,$650124B6,$4CB38834,$17950CE3,$A67AFE5F,$45294FD4, |
$DFC1107C,$21544603,$31B886E0,$485A4B26,$86312A33,$68722044,$79BBEE23,$647D09D7, |
$8A14FFDF,$2551F272,$146F8AC1,$D765835A,$29F2D9CD,$D21C1A4A,$A0926E29,$99C226CF, |
$5C6CE202,$FB42C1AB,$E00433F1,$C374F81A,$E7C09B3D,$964978FF,$A3E62612,$F74DE838), |
($B0592C6A,$74B87B36,$FFB4B81C,$3D82D75D,$15267825,$88842467,$7ED4E5DE,$DAF2D8A7, |
$0E53F9C7,$FEB11865,$59226B06,$BD2D1AEA,$DBABB191,$26CE87F6,$EB66BD0A,$32772ECB, |
$C5104C8C,$D4BBF82B,$0C4E03A1,$05535772,$32D0F6FD,$EF5BE62A,$5D186ACA,$BE1C84C4, |
$65A1643C,$ACC7E4A5,$19687B84,$8DD77315,$3C830F3A,$11EAFE4F,$A358AFE5,$04EF8E68, |
$534B930D,$40AD9CA1,$855A5C0E,$E44191D4,$809420F1,$6001D20B,$173B8243,$73666B70, |
$E728BEAB,$372479B9,$5F0590AC,$45FECBD3,$1301838F,$7057F55E,$A1455583,$FF0DC17F, |
$10E804DA,$0CC467B8,$FA7AC4E3,$B9C29482,$754960E6,$A003831D,$BE0AD5AD,$8A096353, |
$D9B64BF7,$DD2CC8E1,$52BFEE3E,$C7DC4150,$21D17572,$9F0C1374,$4C041323,$35A93E8D, |
$2D9F76D3,$9A5F4406,$BC172FCB,$71EB2C44,$14D20516,$0FF5F996,$B4632DA6,$7789E518, |
$E97B476C,$C99561DC,$6BF29DFB,$5276FCC0,$4BD795BA,$4A0B3245,$9E2FDDEC,$9274ADD6, |
$4799961B,$4F586537,$4DF06E10,$B2D8E37C,$5685EFF2,$C4EDDF7E,$E2E6C254,$B3643A66, |
$6A06E0C8,$D5072131,$111C79E9,$8BB5BA49,$6455190F,$2BB63954,$0627FBAA,$F8D3D139, |
$F3FABBBD,$38D1802F,$729AE67F,$DFA18FD5,$E88F3A5F,$4EE4BC2D,$12F5FEBC,$F72628AF, |
$189C06B7,$0AA6AEE4,$00000000,$00000000,$8EC7D936,$9EB0CA6E,$4257EAE4,$CB1826E8, |
$20250841,$187DCE85,$5EF1ED9F,$C28F1622,$F1E741DB,$C333CF38,$F8673E85,$4220DB95, |
$76A0E7B3,$DC9011FB,$9395A37E,$10562755,$C70DB6EA,$2F59B73C,$89145FAF,$E112C6A6, |
$0DBA7E92,$82228A83,$681B1AAE,$2EE56E26,$CB43B54B,$2A0AE04E,$F4293D24,$47738CE7, |
$D22BCECF,$A7DD935B,$CD644EE1,$D2D93177,$91885918,$EBB46842,$BBC4A952,$0E49208C, |
$79076347,$A550D46F,$FC5D3F49,$411145BB,$2E76F186,$E6CCD6E0,$E4C139FE,$4BB7EB5F, |
$7F2098ED,$5D830556,$394D73C5,$95AABD90,$DF91B05D,$25FF19D8,$AEE2D177,$86CD04EB, |
$043A01CC,$03319E2E,$371E8A02,$6B1BA5F5,$1B7581E2,$76353C02,$23CC8F14,$64EE5C63, |
$D03634A9,$5C3FDC4C,$9C32278A,$6996E2C1,$BA30D461,$8938FD7D,$A48B297C,$7B4D82A0, |
$F20EC68E,$BFA05DDE,$1D527A48,$8EE6ED3B,$2F828CB5,$61BD0B11,$88E0229C,$66631B57, |
$CC9033D2,$55A8EC86,$837DA7A4,$1C9240ED,$9FDBA0DF,$15057027,$C4E431BF,$53CA25DA, |
$6E3CE104,$D636BF1F,$ED4146A0,$CAA4FFF2,$A0B128B0,$787C1C8E,$CAB7C878,$AD7B3DBF, |
$A57F544F,$FC3C5F51,$41BE6DB1,$B78BB40E,$B67ED7C0,$8C6BAA0F,$4E19E945,$CE4B719A, |
$A93157EE,$F96F0823,$ACFF2B11,$7D2F4BFC,$FB8EB9D0,$3EB34973,$2238F227,$E39F8192, |
$D7E5B230,$239DD084,$8747A668,$1FA3DEC3,$F99343B6,$C5510664,$466DEB28,$C829B8C6, |
$AAD8D0BB,$85FC9AC5,$EEA8C1F5,$B6376D14,$8AFDD8FA,$9D815440,$F7C0BA71,$3BE01E01, |
$2BB88D79,$628C953F,$3F6A886F,$6D796CA9,$AD0B5622,$FA5E960D,$2A4CF04A,$E5FD48CE, |
$81605DC2,$E7700FFA,$6C211B62,$2DD4F008,$78F31E74,$2221099E,$D1C2499A,$DB4E01BD, |
$16CFFF70,$F417B681,$EA92C039,$B506F33A,$6FC89C37,$514762EE,$25EB74BE,$9C3D8D5A, |
$5CEC17F9,$396D5935,$E53544CD,$CCC636AE,$B78AAAF3,$0B1A77FE,$3AA4F490,$E9392F76, |
$6DD56651,$AAA52DF9,$5B3F9160,$46CF55FD,$D611CF03,$A4EC0D75,$619B65F0,$AFF67A8B, |
$E312BF67,$3415E797,$0B9D8538,$7AF15BBA,$09807F5E,$811314AD,$01F47D33,$8771DDF1, |
$3D777209,$969B23BE,$6272E2A5,$D365E86D,$736E9B4C,$58D05224,$FDA9427A,$C660984A, |
$63869F96,$5414359C,$95B258D4,$E885F66C,$8CDA2350,$65528579,$907C242B,$6CC5B5B3, |
$944625E7,$6FF42B9D,$F5DD4017,$C0025116,$DE65CD6E,$A28EC429,$84AE213D,$63304C25, |
$07D38699,$7FA20CC8,$29A5771F,$996EDA28,$241F098D,$1B4C50AB,$28510A2C,$1E1F07D9, |
$4470114E,$33CBF7D1,$E6DCC398,$B055A448,$86B3DB5B,$98D20332,$36EAF731,$EC6A7804, |
$DA5FCCA2,$A1BF5A07,$FE40C52F,$BAF30AAC,$1A81FCD1,$F144E1F3,$2602F3EB,$E0AE1FBC, |
$30CD0C9B,$14B9A93D,$DC783708,$596C8B3E,$33248BCE,$682A3BDB,$556C68A7,$B87E4D98, |
$A696D31A,$80AFCDB7,$67BC9E5A,$5725ABB2,$9A15DC20,$914533F8,$7B1A9921,$5EB29B78, |
$AF16AC44,$01BCD91A,$5ACBEC53,$C1BE880C,$99FC5B75,$EDD6A11E,$AB2CAD88,$028D4734, |
$B244D60C,$8F5A3421,$ECB53B93,$4DD52203,$54981594,$3F0F9069,$CE8DC9B4,$AE4AA391, |
$483E12EF,$3698A0A3,$B9D95334,$F5AB6F9B,$B3B0AB3F,$082BE9D0,$C95E4F2D,$D1E8AF59, |
$D5F84856,$D87F9F93,$3B5089A3,$6E48F287,$70871C19,$2443C0C2,$49CA6FDC,$B1E97D52, |
$03E98755,$7C9392E6,$A2ACD2D6,$839E5399,$8F33A405,$19C1179F,$DD8C4A3B,$DE1D56CF, |
$D3DFB3FC,$20AC4EAA,$8B09A5C9,$1AF089B1,$58D61635,$3A5CC71B,$F0133CE8,$444212C9, |
$B82D2E07,$72DAB26A,$43A397D7,$4C69FB19,$B1AD5159,$F3C9A6C7,$2C6B0BE0,$1D2E99F7, |
$45846C7D,$B4BA2A20,$8D2E5E63,$E2235888,$606F18C3,$2887A77A,$C6F9CBD9,$A8286ACD, |
$D40C3565,$5F0E4262,$9DC65AB9,$EEE73F30,$8289DA97,$9BE39D1C,$9BE1A113,$1634EE09, |
$3E9EF55C,$EA08B158,$9261DE4D,$9727FAA4,$C337B726,$2C682912,$E10F4501,$CFF7A880, |
$34F70D57,$17883713,$74BD1DD5,$27725EEC,$EF5CBCC6,$3146B0E5,$1CA6077B,$099730CA, |
$1EBBFD1D,$F2757FDD,$98082646,$6AA77CEF,$5156696B,$BB4FD3B6,$C8AA321E,$569972A8, |
$7173612A,$A3321D33,$C0DE3073,$50FBBBF4,$D84236C4,$5A5D1510,$0A69F80B,$FD80864B, |
$A762AE29,$07DE1046,$7D3D628B,$A6614A41,$C12A4D40,$D78A6605,$27F68ED8,$67DFC24D, |
$F634C742,$BC91C3F0,$6648E369,$D0547643,$4FED9476,$493AAC6B,$38B90EF6,$12DB6061, |
$69EF679D,$A994B3D7,$7CC91FB8,$211097B0,$404A1082,$30FA69FF,$50A21458,$3C3E0E47, |
$1F4F802E,$7504A22C,$05CE7CFF,$844043DF,$B5975095,$F0F838E9,$A8C52ADD,$7E1ED5D2, |
$35037064,$90F9EAE2,$0874026D,$0662C95C,$965BDF81,$9416648A,$BDE352F8,$F69AF1B5, |
$BFFEA89E,$0D78BEA2,$CF79B487,$293B7E60,$7AEEE412,$D9C34689,$021DFA66,$FBE24F17, |
$97AFA2B2,$1367B97B,$C2C3CA15,$AB19F4E3,$E0FB3832,$48867571,$313971A8,$93C874CC, |
$0FA784F4,$79C0C594,$4A23E889,$CD7AEFB4,$577192C1,$439C028F,$77549A80,$5BE1CC0A), |
($78656928,$714D28D7,$84F64F7C,$C88A7C6B,$AB89AACA,$EC43CAC5,$10DC16A3,$777FA381, |
$E4213B5C,$0F7D5C87,$F3A1EF51,$73F051E5,$C330D541,$EA714193,$E016C4F3,$95E5F3DA, |
$95A0E173,$63D37380,$8FF379D6,$9825D66F,$48F45338,$E8CC38A1,$25F06BB0,$A840B0C0, |
$5F748735,$944135C3,$247AD31C,$74661CAA,$ACD56864,$E7B16426,$6E6F0589,$D1E689DF, |
$C1D150EC,$A73DEC47,$427BDD3E,$64453ECF,$5B43789A,$0ED99A9E,$C05BE840,$7B1B402D, |
$6FE5BD25,$0DC025B5,$4E22293A,$3F183A28,$160A6CA1,$A0ABA108,$05BD4703,$46BE0337, |
$B2B10F6E,$86DF6E94,$9DCEEAD8,$A216D83A,$EDC5885B,$129E5B57,$9C445274,$7E307450, |
$A8E297CB,$7D29CB7B,$0EB871A9,$1611A933,$5EFE3F99,$486799A9,$5828459B,$9FB39B20, |
$D10D464F,$D0424FC6,$F79610FE,$E968FEB8,$64E08B8F,$5D6F8FB1,$AE34EDC9,$AAFDC9F2, |
$8BC48679,$02BD7932,$BB55BC69,$9B3C6944,$2AC2A2B5,$6277B599,$0DD34CA8,$877BA88D, |
$A531DB63,$FA5263F6,$974164DE,$2E9FDE54,$D8E9F548,$CDA14816,$76DD1881,$675C81E4, |
$743C9D2C,$2A102C30,$7DD82E2B,$37F32BE0,$901DA670,$256D70B7,$BD83C66B,$4CE86BCD, |
$0B0536AA,$50AFAA04,$9F2F6F75,$EF5A75EE,$44ADA73C,$B3913C46,$D9634DE4,$1187E47C, |
$EB13F259,$C54A59DE,$00000000,$00000000,$BF6243C6,$01A4C619,$BC097EC7,$90CEC7A7, |
$91971EDC,$F94BDCDD,$814B087F,$8E347F5C,$60D77420,$C7F720EC,$F61CA852,$354E52D2, |
$497EEB94,$34EA94CB,$4D49143B,$AE723B96,$FE72A3F9,$F48BF968,$CD88A4E8,$FC60E8A0, |
$409A5893,$2909931B,$1FEEDFA6,$BD48A6D8,$7181DA2F,$6CAE2F07,$79EFD184,$AD6B84BD, |
$55FB0933,$18C833AD,$CC021C44,$204644CA,$269B56B1,$392AB17E,$857CF7D0,$14ACD001, |
$6236F18D,$8ABB8D38,$204D2CB3,$EEFEB3F7,$75B62580,$F636805A,$CB5EDEEA,$2BB4EA29, |
$DFB537E6,$C653E6F5,$B5EDCDC0,$8D2DC077,$156151A0,$31C1A0B6,$2EF55D1A,$F8EF1AC4, |
$D65184E1,$DBB0E125,$51CCF69C,$82509CF0,$4FA89196,$E33E9642,$352C7D13,$DF3F1341, |
$3E294BB9,$8F90B945,$66010E22,$10232265,$4A15D695,$A5809575,$1C85E2A7,$2C22A766, |
$C46C17EF,$E183EF70,$F22B57FD,$AFD6FD8F,$BADF04C5,$471AC52E,$02E185AD,$4D4CADD4, |
$036B3D01,$916A01BE,$FFF81B55,$28AD5502,$C2BA6DED,$3657EDF9,$5AC9C036,$D2FF36F4, |
$A26D19CD,$F1A0CD15,$5D950298,$D90D9817,$CAD46646,$F7924643,$BEE8FB6A,$DD826A73, |
$D3ECC3E2,$9D0EE212,$18B21D08,$B6BA083B,$C5E6AF43,$3DA5431A,$33FA0711,$08EB11C8, |
$5C1FBA34,$052B347D,$45271F90,$6FB7902C,$52A7CB9D,$133A9D4E,$FA455C56,$6E135635, |
$4CC3AC97,$725497FC,$29A99FB4,$F31DB427,$39758917,$846217A6,$6A58FA26,$4B7E2682, |
$F8A4D9FB,$235FFBE1,$F92E6157,$FF79578B,$6933C727,$DA14273C,$DD54B24B,$8B1F4B21, |
$6C8E8024,$9CAA240B,$086E0BAB,$C1C5ABBA,$8A4E3ED5,$DE9BD558,$A3E7A161,$2D86617F, |
$942A59DF,$BFF5DFEA,$C9BF5B47,$66F847FD,$AD5FD0C8,$3B97C84C,$F1406AFC,$3EBCFC31, |
$0F32C905,$CA370559,$2F7FE5B6,$24C9B6AE,$6D043888,$408C8861,$88AFBB78,$93D7788C, |
$EA994AF5,$196CF5B4,$0437FFAF,$9A98AF5D,$0A8F8E06,$8C89066E,$1156AE0F,$AB590FEB, |
$06D67A02,$D7D40289,$9873ADDB,$E4A8DB0D,$83AA8DD2,$C378D288,$892503D4,$4FF1D4E6, |
$B9B439C4,$D670C490,$FD199EF8,$65E1F8D6,$96CBDC72,$F2B9723E,$CF692145,$B12C4574, |
$63BC4921,$569D2152,$2D9E601B,$69851B7A,$50464E30,$5E76309A,$EF240DF6,$5FD2F683, |
$E2F7415E,$D8A95E0E,$F0CAD250,$E29A505B,$D4B0014C,$96FC4CF1,$E9F277F4,$8806F40A, |
$3FA3F315,$53B6152F,$B686F0C1,$1C47C1C9,$DA0870E5,$80EDE5C2,$8D12FC7B,$D5697BBB, |
$72EAE72E,$FDC42EB9,$075CC2AE,$0BF2AEE3,$47C69A3D,$22FB3DF8,$C835E3EB,$BADEEB97, |
$018AB8AC,$DC26AC6A,$A08C9C60,$BCEC60C1,$E6C0BEF1,$4231F153,$9EA5D7D9,$337CD984, |
$0C59F404,$5B5D04E7,$4B9F6E39,$79A6391F,$80C1B0D3,$5212D336,$2C14D8B7,$B5A3B710, |
$232611B2,$7F94B249,$B1DA326F,$17B56F2A,$879D727D,$59E07DD5,$7C529687,$EBD5878A, |
$7757A02D,$BB7A2D8E,$34A6C5BF,$0319BF2B,$DB82C849,$5CCB49A8,$09E4B307,$1DE307D0, |
$E19C7C5F,$49C35FB0,$571A8C9E,$55849E79,$7F39AB86,$7ABF8634,$37CDF8BE,$9273BE95, |
$13B72BA2,$E615A23F,$92FC23DD,$6821DD63,$B33BB7C2,$5AF9C2FE,$68B97F8B,$06328B56, |
$8E79C17A,$44037A05,$EEAEB55A,$83F45AE9,$DCDE0AE7,$5739E74B,$1A5398A5,$FBF6A5EF, |
$2711EE1D,$E50C1D14,$DE3F8F4A,$1A754A9F,$F4FD2DFF,$7802FF06,$4110E03F,$F52F3F71, |
$A4BB63CF,$2674CF9C,$A10624CC,$60CACCAB,$700B6283,$B088836D,$7EB3132A,$A6992A5E, |
$9A922876,$A9E476D9,$A65AE662,$6B386248,$3CC8CE14,$C2DC1491,$AFBE5565,$76DB6598, |
$21C7941F,$32D81F9D,$73605F82,$21E282D3,$B70C486D,$C0616DA3,$1E64670A,$616E0AB2, |
$CEE399E9,$6D0AE91E,$1BD92009,$27D00985,$464C2291,$FEDD9192,$311B82BC,$45A7BC1C, |
$E878CF58,$54205860,$A9682F67,$A10F6711,$30913A10,$99811076,$14EBE90C,$EDE70CDC, |
$C7072AEE,$70E9EECE,$8220357E,$1F5E7EE2,$28232718,$2F3B184D,$D2667B4E,$41284E78, |
$F5779553,$A424536C,$22ACA91E,$A3B21E23,$36474012,$4E5512FF,$3D4276B8,$1EFAB8FB, |
$56903432,$89A23213,$B0508AC3,$CB93C340,$AA031266,$306566AF,$D53AB9E0,$4ADAE09B, |
$3B940CBA,$C92EBA72,$8C9844D7,$094FD7D1,$678BB68E,$CC058E0F,$3270BFBD,$D4CDBDA2, |
$B83E8168,$0A5668FA,$B467756C,$510B6C1D,$43F16592,$B86392A5,$E37DF9F2,$048FF264, |
$123D930E,$3A330E55,$FBCFE4FA,$B235FA5F,$FC932654,$B9C754BC,$7A84EC85,$3C018503, |
$D087FEE3,$0C64E3AC,$7B0E5429,$E0272969,$D7DB3C4D,$07964D4F,$656A3323,$814923DB, |
$99F91577,$388E7767,$1938A5A4,$6A9CA451,$615DCC8C,$1BD18C86,$93769B71,$B4077109, |
$3A1EB416,$15081618,$59A2FD37,$4395374A,$5471B19F,$C4EE9FC7,$38FF31BB,$5844BBCC, |
$532D7331,$CF1C3124,$A7D05ECE,$B71ECE22,$C68D9242,$ACCF42A4,$6BD2428A,$97588AE8, |
$9B1890DA,$75C2DAB3,$E74A065D,$9E175D39,$1D0F5A0B,$F0040B0C,$EC4F30F7,$CEB8F73D, |
$2B481A19,$BE5119F3,$E5AB83F0,$D35BF0ED,$1780D40D,$7C8D0D62,$8617CAD1,$85C6D1BF), |
($7B66F2A4,$B1C74212,$D7A59FC1,$CE916098,$2406FA70,$C312EF8E,$D81403D5,$956C7DCE, |
$18DD9520,$5A0C9B23,$1A480E8B,$AD0D57F5,$87740B01,$E7B9D052,$2ED81268,$0217F9EA, |
$F8CD3A06,$4D7CFF19,$572B7B67,$44D1772E,$E65AF72E,$FB73C5B5,$84512705,$91427AEF, |
$E4CF6C85,$0C720963,$732D8117,$87C398A0,$FE87620E,$A17F5E96,$8E8FCF1D,$50476C8B, |
$9C8CB225,$CB4EE1CC,$91A8B59A,$67B2304C,$D2CAEBCD,$54696BAA,$6BF01437,$DDCF0383, |
$79F3690F,$46C68EC4,$CBA7C942,$8F9F96E2,$F5E93DB9,$E1802E99,$C179215A,$4E9A8086, |
$6764A427,$F0C9B468,$94C7C196,$FD4A3B7E,$83ABC8A2,$FCBBBD0B,$63BB6784,$EBCBD931, |
$C882E546,$F9643C5F,$41F7C5FC,$C4DA9730,$13B3CA97,$1AF3EB2C,$3E4EF4FB,$6E1FB87B, |
$4498B1F0,$5E229C02,$2C4D89C3,$F516353C,$F97D8DA9,$CC869972,$E57FDB2A,$8D886F08, |
$612EFC2F,$1CCA15E7,$FC12F9A5,$567E9240,$32DA44EB,$43190F90,$AD73DACA,$FEAC44E1, |
$65F13F8C,$07C878BE,$E3358322,$618BCE87,$DFEEEC72,$F895BA2A,$3A913758,$751DD522, |
$21698E7C,$59EAE4BC,$BA1FD3FE,$FF5DC294,$39B41B5C,$03E67F9F,$D1EFC7C9,$2292C117, |
$808EE4A6,$8A4017B6,$8F3F78B2,$D1BD0AE0,$BC558BF6,$135E631B,$28924A60,$EE145865, |
$AE56F6CE,$8857EE5C,$00000000,$00000000,$CA177EED,$0E65F089,$269361DB,$34132358, |
$CEC8BD4E,$15679DD0,$16DCBE9B,$800BE01E,$CF780AE1,$949DFBBB,$DB312FD1,$E397D773, |
$1126513C,$EDF227FA,$2723D674,$B5E94533,$B73BD441,$53A11314,$C683CEFD,$23634762, |
$8A500CBE,$4B4501D2,$6E9F603B,$473708B1,$E010AF26,$1770643A,$8C1A54B6,$A746A05D, |
$933D2E31,$90B3FC9A,$31FF68EF,$35E2A52D,$68D53833,$AB34A93E,$20D939D3,$D81082D7, |
$D480B3C5,$B86ACA25,$4528065F,$DFD8FA69,$D615286E,$4F6B06F3,$EB7EF091,$578F1435, |
$056F740C,$9AF80B32,$BDE53C59,$92A40570,$196D228F,$DBF6FD48,$04DFC3A3,$1B026D59, |
$9E19298E,$3C4F2D1A,$A538A979,$C8A89E53,$3CDB6F50,$991E74AD,$5C4524D0,$042E0721, |
$DCCBC076,$8E6E1097,$E285348D,$E071A8EC,$FDA24E0A,$D784F42B,$821B7F0D,$7D41DB60, |
$5DF5937F,$85D4614A,$ED34A899,$BB8CB5BA,$0B6E5FB7,$40FF700F,$1BF8B924,$2CF7319E, |
$EC841F36,$3A76D3D1,$40477253,$4520F15B,$7008AD13,$F138321D,$25B64DDF,$42E889E5, |
$BF70A7F2,$65A5C9A6,$FF37D5A1,$208538FD,$1C025683,$410EF67A,$3D6BD8FF,$18E412C6, |
$5F6008D4,$72D5AD9C,$B41EF845,$255AB9A9,$AA89356D,$93558305,$71B81ABC,$70C25476, |
$084B73B3,$3604DAB2,$4B292DE4,$05DF8154,$49BCB64F,$F2DE4D82,$813E5309,$0BBA71DD, |
$D05F7066,$A368A77C,$DE5E5BDD,$796FDC41,$064A5808,$EC03A18F,$B88A4855,$085C0E42, |
$9AC6EA2D,$274D4043,$6DBA4C3F,$31CCA20C,$540E5763,$322ADD93,$1E97CD28,$B60F3AAC, |
$95777639,$7CB05D15,$6C0AFB90,$B036C467,$96525A3D,$0A4BF7A8,$480C01E0,$73242BE9, |
$0FB19C14,$5BFD1D56,$F08649B5,$7B7825AB,$09FBC41C,$B7FEBCD9,$01B0B7AF,$81FA666B, |
$B68B63EE,$D25B757F,$F3A365B1,$0D838F16,$620BD02B,$6A31BF5A,$8DAAE319,$26BCC636, |
$592A50DC,$9ED60C13,$36058748,$581B62C9,$77F242B4,$9CC1F5F9,$2F68A5C7,$83ED9F81, |
$2DFD3E6C,$74EC5357,$55BEE0CC,$B3D0BBF8,$0D2407BF,$ACFCD180,$7AD6450B,$303D2479, |
$E7EA4081,$7A89A3DE,$5BBFCB77,$69D7C0C5,$14492530,$770A2CC8,$DD7B77D9,$0F9476FC, |
$23FC15D7,$AEEB286A,$E85BDC95,$2174BE88,$52440F6B,$DE297C1C,$98537186,$D04C8C95, |
$3520AB4C,$2EE0C874,$F6CC11BD,$977B8424,$85E190AA,$10B81C84,$B5AE4FEA,$A4A0DFC2, |
$2BB76664,$98EFF2D8,$5161236F,$A8D2D6A1,$C4165556,$D4628BB4,$4CD3C243,$682646B0, |
$0C94B010,$2D06B7EB,$DA81987E,$626DB118,$50D194C0,$2928B0CA,$07FAEFA7,$6DF9C7E4, |
$F77CA612,$1681E24F,$A4881ED6,$4952F838,$03252C04,$76FBAABD,$7843DEA0,$C73CE8AF, |
$5A0F7CD8,$E82DA6AE,$0ADEE818,$C1051664,$E1A01889,$968A0251,$1F277A87,$37F55CC7, |
$A9AC1969,$E5AE29B8,$8BE0BB11,$CABF67B9,$3B2180F7,$F4E7B349,$4D6375EC,$E9DC20DB, |
$CDED914A,$639C376D,$AB3982C2,$12AFE56E,$336AF344,$C2E369FB,$9B765D82,$A6B72628, |
$D9A4B47A,$14961BA5,$88C59715,$BC44CD04,$A1E76ADA,$D3AAF30A,$47BD9DF4,$28D936BF, |
$34901CE3,$AF1AAE1F,$224CA278,$2F114E01,$90180235,$E6485627,$A372F171,$24AB3FDC, |
$A057DD75,$52509561,$6F2FD794,$C6CD6EDA,$E9EB6B3A,$A08ED8E3,$AFE64161,$09AD8837, |
$9FA99E21,$BDB54B71,$F213D21E,$8C79E97D,$C0C996F5,$CF60E6ED,$7D2CAAAC,$5DC4E39D, |
$928D999E,$11499AF1,$53F4B8C4,$5FD31A77,$176C0934,$01F18675,$569BCCC8,$C52B1145, |
$4E4659E8,$9F278A66,$897520BA,$3DBEAB6F,$C7337952,$A2992109,$12037D38,$9B098D47, |
$B254A04D,$C9591826,$FBE81602,$3B8755A4,$A61D857D,$BE5334EE,$99E3C629,$51B6EAFE, |
$2A07D1CB,$191594B3,$589AE773,$1F2C6A78,$A7AD32D2,$3FA95285,$6A40A398,$5C3565E8, |
$42D2E9F8,$B2213D8D,$3FFE4354,$EFE5DE10,$9D3C058A,$4AB487A7,$EE11849D,$CD771F07, |
$B1718C49,$BFA2B29B,$FA58A1AD,$BA7D33CF,$2922FDCF,$6FEE3E0E,$A81CAEC6,$64544FD3, |
$37B530E7,$D9E104A2,$5ED0BF7B,$F32FCBF7,$B0C13BE6,$3E58D4F0,$304FDF40,$B418C346, |
$7FB93107,$AAC52F4B,$7C9C1D03,$DC3E85F6,$D37A5C62,$D5930DC1,$729D36B8,$0639FECB, |
$1DB2E12C,$C0F49011,$BBAF6451,$7EA7A4FF,$15F9929F,$F6F04AA3,$86C4BCAE,$6643B639, |
$1096E693,$6C084191,$4A999A4B,$8425E73F,$66D41388,$7133D203,$C25C0D5E,$38612A3B, |
$C3ECBAF1,$B99B4C50,$7642F51B,$1D3B9392,$ACC36D65,$7F56228A,$609E4B80,$9D30738C, |
$B3E417E2,$48A37E4D,$97E2ED92,$8BB191C3,$69658F9C,$2ACECF55,$0E012BBB,$DA077B3D, |
$A2C246DE,$A55159B7,$43625E57,$33DB5BE6,$3804ACF3,$821C19F4,$D530046A,$3990AC4E, |
$EACE473E,$D675725E,$C93252E9,$789E5A34,$64418823,$86321ED5,$F136FE1A,$FA8243C0, |
$BEC0105D,$E45FAFCD,$7E0986A8,$2B3F4920,$460D2A5B,$A92350D4,$4FF6EE47,$1EDDEC0D, |
$B93AFFFA,$89A66829,$F4598A16,$607A48F2,$7567D91F,$6BC0392F,$74D76EB0,$EA3A5F44, |
$C5A6E2F9,$5598EDDF,$EFA13332,$4C8D796C,$02959BAB,$F701CCD6,$CC5D26E5,$E2665106) |
); |
Shark_CD: array[0..7, 0..511] of UInt32 = ( |
($5E55AFF3,$E6126AF0,$310B0835,$4B6C893F,$EBFC8D57,$AA4C0E84,$F3B3090D,$FB9B5C7B, |
$CCBA5CE2,$4508A6A9,$4DC6BDE9,$E5D1D206,$5288EDDE,$34834375,$E46B250C,$B684505D, |
$5A1E91E8,$A8CEDE20,$F9FA6ACC,$40B89B46,$FAB080BA,$8EE1EC1A,$408E0A45,$DE77D6B7, |
$2E455802,$9A3E184C,$3F0955EF,$BE93FAD2,$AF39B909,$3AE76CE3,$6F5EA7C6,$AD7EE3CF, |
$CFF0B694,$8B51D1F5,$3C43BF99,$70CA8D8E,$B2A8F6C9,$CCDBA7F8,$B5A922A4,$4C5E6474, |
$541CCC32,$5D31ADCD,$8C3456A7,$9B7F701E,$ECFD593A,$2AC9CD08,$58C18E1F,$8FA08448, |
$745BC9EA,$32F0C66C,$CBBB888F,$C58D6525,$4B529C05,$8C633CBE,$8AA0774B,$F2CD9EA6, |
$CA2E7D0E,$2CBA4811,$C9649778,$E2E33F4D,$AC73537F,$F4BE1BBF,$379F29D9,$22DE6787, |
$79137E46,$0956C2DD,$78868BC7,$E061EFE9,$0F97A85B,$1CC85ED9,$67C8DBF0,$31337E9A, |
$E36AF161,$360193D1,$6383E5EB,$7FEFCA4A,$3241E243,$8535FE63,$ED68ACBB,$C3FEE03C, |
$A570DAC8,$81C4ABDE,$FB25753B,$67D6C12E,$164DD980,$A4282112,$A13BE4D3,$CF181F0E, |
$F86F9F4D,$A98FB672,$F66DC297,$5C70C59F,$C2B80138,$B0F7D544,$EE2246CD,$0DA79760, |
$411BFFC4,$3740FB83,$114C0DED,$24ADE29E,$E0201B17,$F858E48D,$FDB154D7,$0E642F96, |
$531D185F,$DDB46E41,$B33D0348,$25EC8ACC,$B1E21CBF,$0282D0A4,$8B3582CA,$1BFAB392, |
$DEBCBB79,$AFFC336B,$F0F9E37B,$35C22B27,$1393121A,$03C3B8F6,$19DA71DB,$B8E07FCB, |
$3DD64A18,$99FDA0BA,$034AEA76,$CE59775C,$80E9148A,$49EE599B,$C6F33F23,$FE2B6194, |
$044B3E1B,$4EDCB4D0,$887F68BC,$D5A3C4CE,$E2FF04E0,$DF36BEE5,$C766CAA2,$171C4CA0, |
$C8F162F9,$0BD41279,$EFB7B34C,$E490BA54,$72CFE806,$5B4228D4,$A9AD98E5,$5355825B, |
$1B056E2C,$9F8E25A3,$10D9F86C,$CD9ACFAA,$DC63A48E,$88926903,$558939B3,$B40680F9, |
$95EE277C,$239F0FD5,$34D5C3AF,$EC8710DB,$83A3FEFC,$87B72EC7,$6C144DB0,$63279493, |
$DF294EF8,$46CB1E5F,$1492C677,$83467B7A,$08967C36,$9C4D9D55,$9BEC7AA6,$D6607C38, |
$6517C407,$165D24F2,$69CA862A,$C4CC0D77,$360ADC58,$CBE94AB3,$9030ECE6,$84749631, |
$56C3D3C5,$7A5FF7A5,$FEFBBEA1,$C03D58CA,$1A909BAD,$76B90897,$D9BD6F14,$2F79F0E7, |
$3AD79E75,$19786336,$D7BF32CE,$DA86830A,$D0BEE6A3,$5A034086,$C0671ECF,$97998F2C, |
$8F7EBCD1,$55260742,$184F845A,$51D752FF,$0A4963C1,$BB23C73D,$4E8C579F,$2B88A55A, |
$665D2E71,$D80453AE,$8537DF10,$EE05C07F,$48187673,$423A4BE2,$947BD2FD,$CAA822E1, |
$29448C6F,$1ABBDBC0,$6216106A,$96D8E77E,$CE654315,$6266FCC1,$7E12AA2B,$89D30151, |
$2FD0AD83,$73093578,$0701D46D,$8085C38C,$B7763D53,$6B303E1C,$9A798F27,$3F57510C, |
$6ECB5247,$4449CEFB,$22981A2F,$48AF31C9,$9FA744BD,$98BCC8E8,$069421EC,$69B2EEB8, |
$B077E93E,$EBB5FD90,$150733F6,$6A71564E,$E1B5EE96,$116FC9B9,$937A0690,$4A2DE16D, |
$BBAB7F7E,$B9A11799,$57562644,$9368DA91,$9E32B13C,$718BE5DC,$2599CE42,$C82AF245, |
$F7F83716,$B547E8AB,$D62AC74F,$33B1AE3E,$4550C1DF,$799C4F53,$38088182,$3E16395E, |
$7010F7F1,$7C2C72BC,$28D179EE,$F38CF6F4,$0CDD422D,$D2912985,$5B8B6469,$41F9F314, |
$D3F40CD5,$945A37DA,$090389B7,$757AB061,$4AC76984,$6554118A,$D261F954,$7D6D1AEE, |
$A2710EA5,$01416852,$735A1D87,$B27505E0,$B8E19508,$77F860C5,$E721CF7A,$78DD2701, |
$DAF78562,$E12087BB,$21D2F059,$86F64695,$2746D1B5,$EF44A82D,$8EEB4950,$BC112A76, |
$4F19A21E,$C2BF886E,$C5B9D555,$307216C8,$87E8C0E7,$C96B9A17,$92EFF311,$A31ACC59, |
$817CE10B,$A0D974AF,$F16C16FA,$DCF50613,$7711239C,$FCA9B130,$3E9CA06E,$57A4D7E6, |
$D8289A95,$C64EDDD3,$309EFDB4,$A25BA40B,$7BCC61B1,$2E3898B5,$0E025DDA,$F5FF73ED, |
$A7AFC53F,$A6AAF1B6,$C42C20D4,$D9453BFC,$AAE77293,$9D0CF507,$FF6E4B20,$290A75FE, |
$05DECB9A,$A7EB99E4,$230DEFAE,$A1981CFD,$F226FC8C,$12AC714F,$AB728712,$743BD833, |
$33D417C2,$6C02D357,$0195F581,$E9372D34,$BFE04165,$F77DA349,$A4E52F49,$68F386EA, |
$240C3BC3,$211DDF71,$5057F229,$13ED191D,$A3E4FB24,$E8764566,$425115B2,$F9198CDF, |
$BD3F5E92,$D013F921,$E6B43AFB,$91EA0A35,$84A22A91,$0732ED4B,$1206E79B,$EAF495C2, |
$0BDC9640,$5214EA09,$00000000,$00000000,$D12B1322,$B3346DB2,$4C534868,$0CE6FF32, |
$7CCDB5DC,$AEBD5B39,$6A806C5C,$0A957A2B,$1C04BA41,$1F0BE62F,$D4F5D8B8,$14DFF456, |
$615CFA1C,$58819022,$3540362E,$05B03DEF,$6B1599DD,$E3A2571F,$F52728E1,$9229B2C3, |
$A8386D64,$BA62AF6F,$26D32434,$06738519,$E8B66721,$641579D8,$9731388B,$04F155BD, |
$B9746089,$9ECF4DF1,$867D3566,$205CB723,$43C4E033,$102EA1EB,$0D48B7AC,$3BA604B1, |
$BA3E8AFF,$50963AAD,$CD2FA963,$AC3F8B9D,$F4B2DD60,$7B1E9FF7,$1D914FC0,$F63CCB1B, |
$C1F2EB4E,$7EAEA218,$E5FED08D,$5FB37D69,$9CEDAECB,$56E5BFB4,$685F73AB,$2DFB2043, |
$DDF6510F,$61A54437,$204705D8,$6FC16BA1,$FC24A156,$E75302A2,$2B9B9398,$3DD581A8, |
$75CE3C6B,$DBC7EB58,$44C5345E,$90AB6267,$C32DF4B9,$59C0F870,$59547B9E,$6697A97C, |
$D5602D39,$FDE8D962,$AEAC4C88,$D3D041D7,$478FDE28,$5EF2153B,$2A0E6619,$D4E2AC9C, |
$BE75B4E4,$1E4A8E7D,$8DA1A326,$72485D2A,$EA6978D6,$437B23B0,$7684D61D,$159E9C04, |
$5FC05A72,$0F2547C4,$99336551,$F10E2650,$89EA9D3D,$3C94E9FA,$9D785B4A,$BFD29280, |
$DB6270E3,$0817AA8F,$7F875FAA,$60E42C65,$98A690D0,$18390B64,$7D58405D,$478A760D, |
$5D1F4585,$284B1DAC,$60C90F9D,$B1B6BD16,$1F4E5037,$D1529173,$17D82C01,$4D1F0C26, |
$7A599430,$C70FB581,$91A51967,$6D43BB05,$82360B7D,$6E8003F3,$ADE6A6FE,$1D89368B, |
$A63A30BE,$4F9DDC82,$96A4CD0A,$EDC67889,$498D83F2,$AB0D66D6,$2D0FB274,$54676F10, |
$5C8AB004,$C17C3098,$1EDBA5B6,$3865BC47,$BCAAAB13,$3924D415,$71850270,$951B5F88, |
$6D81B831,$8A10B9A7,$2C9A47F5,$BD504224,$B43CD725,$A5694940,$64823186,$FF6A09C6, |
$E92392A0,$8D2254EC,$461A2BA9,$B7C5380F,$B6E3C8D2,$82071328,$399D7403,$D721146A, |
$51C207A8,$FADA3429,$A0AE1152,$262F323A,$3B426BF4,$F04F4E02,$02DF1FF7,$276E5A68), |
($FD16E203,$3B4016DB,$1174530A,$9A7574C5,$C02EC8D3,$90012E69,$D780E076,$F44580E3, |
$49ECA14B,$F81DEC2B,$A6E3D7EF,$26CAE3E8,$0C41F6AB,$0962419E,$70EBD951,$54D1EB40, |
$0188EEC8,$865E884B,$A406FE8A,$DF76067E,$E594FBA0,$29849412,$6869C0F2,$46156989, |
$BBD6724E,$B5DDD6B3,$9E6C413D,$0C586CC8,$54D904EA,$6B0AD970,$EC62B109,$A135621E, |
$087EA461,$0EEF7E47,$DFFE4417,$FAAAFEA4,$80342331,$E0AD344E,$3D382AD0,$AB4138B2, |
$8E90FCFF,$10739046,$218561B9,$BE0885A2,$7D22C132,$DBED2295,$7FC7E857,$2251C703, |
$BA5E9C86,$33835EF8,$F4E0A8AA,$B3F1E0D7,$2432DDBB,$3FDB3230,$A3546BED,$A719547A, |
$CB3DAB1F,$E10C3DF3,$8AAFAE35,$17FEAF9F,$154B01C0,$9DF84B1C,$93A5595E,$8364A51D, |
$74D48B9B,$535CD499,$4B09882E,$01A109BD,$B0C51182,$C4D0C529,$E1ABA96A,$2E09ABCB, |
$CDE7D0B0,$1F3DE7BC,$1D35A5A1,$9317355B,$50E65620,$6C87E6A9,$42FFC287,$8910FFB1, |
$275F1A16,$40395FED,$DA49F815,$7B794936,$98B63A92,$F269B687,$DBC116DD,$FD27C17D, |
$9BDBFD3F,$8D8BDB5A,$14C3EF08,$1BA6C357,$C6F4B37C,$6E30F426,$036DC7AD,$7FE26DDD, |
$57B4C347,$14E8B4AD,$25BA3373,$B985BA7B,$8C75D59A,$E9CF75D0,$5898F241,$626898EE, |
$339CF51E,$5B9F9CBA,$BFE92084,$B250E96A,$C1A6261B,$165FA622,$9C896858,$F5E4895E, |
$2DC49712,$B76AC43C,$9612E55C,$02B7128F,$5BF535EC,$1D8AF533,$28732B10,$36B973AE, |
$E02347A2,$A8572380,$4192052A,$F6F2926C,$D0D27511,$8C2AD2E7,$3A6ABFB7,$D32E6AB6, |
$FC9E0CCB,$BD1E9E90,$DD1B6D72,$03161B32,$F23AD305,$4DC03A98,$05B7BC02,$81D3B792, |
$B572AD80,$450372BB,$3CB0C418,$2D1FB0F9,$388F96D2,$2A928F20,$D6080EBE,$721B08A8, |
$563C2D8F,$92B63CE6,$1A6730C6,$EB78675F,$538B918D,$13658B74,$B14DFF4A,$428E4D62, |
$09F64AA9,$88B1F60C,$D2375C74,$75963771,$9140703B,$7AD8408B,$ADF0B423,$57C7F072, |
$121994A7,$E5971918,$E6F93C0D,$5666F9CF,$0DC91863,$8F3CC9D5,$86EE589E,$1E9CEE01, |
$9FE4AFF5,$8A06E483,$6EB3BB5D,$B824B3C6,$AC785AEB,$D1997839,$CAB545D7,$6752B5B8, |
$F0DFFA60,$B47CDF0E,$190AF76B,$949A0A82,$69E12E3A,$C04BE1C2,$90C89EF3,$FC86C8C0, |
$5D2F4E43,$E3BB2F7C,$1FD08CC4,$6AABD0CD,$A2DC8525,$2147DC31,$B8BBB5E3,$CA3FBB6E, |
$60176493,$48FA17CE,$17AE28A5,$6444AE8A,$73861EFC,$2B33869D,$E771D2C5,$D0387184, |
$DE76AADF,$7CF476EF,$13917A6F,$63C99153,$65A0D891,$C929A05C,$362B491C,$DA4C2B28, |
$06DA7BAF,$FE31DA4F,$22E8A614,$C1EAE87F,$37A3A7D4,$5C12A363,$C9D8827A,$18B0D865, |
$840B71FB,$E7200B97,$BD0C09E1,$4BEC0CFC,$43772C4F,$0F4E77FA,$B9335B2B,$4C613325, |
$D3BFB2BC,$F3C8BF3A,$4A8166E6,$87FF81F6,$7A705455,$A3827091,$82D10A54,$1911D1D8, |
$FE7B25AE,$44A27B06,$D9243FB8,$049B24EB,$B3A8D62F,$BB32A8F4,$8B2740FD,$91A027D4, |
$B22038E7,$3D6C20BF,$CF02F9D5,$E681022A,$45AD57E0,$F17FADB5,$F78D6F07,$CC138D0A, |
$2B1EECBD,$495B1E73,$200D8F71,$38560DE9,$AB2ACF8C,$A9F62A3D,$236048DC,$47B46034, |
$46C0904D,$8E9DC068,$3907781A,$ACCC076B,$F15714A8,$32225745,$3E55ED7D,$D4A3556F, |
$E34E800F,$D7B54E5D,$32141BD6,$DDC114F1,$1BEFDE0E,$6D26EF14,$DC9383BA,$85489379, |
$9A5313F7,$0BD55311,$07529567,$786F5204,$F3B23DCD,$CB9EB2D3,$3179DC7B,$A223792C, |
$D15A9BD9,$0A745AAC,$0B1363CC,$710D139A,$89C26998,$681CC242,$5FCA6726,$1A07CAEA, |
$D8ACD170,$82C5ACA0,$7BF8BA9D,$25DCF8DA,$6DDE7CF0,$C7C6DE1B,$B4FA4348,$C35DFAF0, |
$EF0F76A4,$DED70FC3,$A9CFE6E9,$504ACFAB,$FBCC99AC,$C571CC94,$A1B14288,$5EA5B1EC, |
$AF159D46,$AE7B15E4,$2EA950BF,$C888A9E1,$0A9B8D04,$F7539BD1,$8F181237,$962D180D, |
$59101C89,$E43610A5,$4425B928,$772125FE,$979A0B94,$84E99AC4,$26D7F4DE,$C667D7A6, |
$C3430F7E,$EFE343B4,$755C6553,$D5025CD2,$E85DE3C3,$A6B85DC7,$A8470821,$D61447E0, |
$6F3B5595,$3E7A3B8D,$3FDD03B5,$52FDDD24,$4EBE342C,$8072BE2F,$188219A3,$12C482C9, |
$C8506CB2,$9EEE502E,$720EF034,$AD6D0ED6,$A58E1042,$59288E35,$1626C66D,$E21A26C1, |
$30F132B3,$247DF167,$0EA4DFCE,$F0DEA408,$2C4C79DA,$31344C77,$64283659,$4F772817, |
$4C5B1D49,$79CE5BB9,$00000000,$00000000,$9D018690,$73BA0115,$993ED45A,$74373ECC, |
$B79784E5,$BCBF972D,$2F21BE77,$4ED621AA,$EB30246E,$D95A301A,$5E4289EE,$9C5942A1, |
$637AA33E,$37187A13,$EDEA5FC1,$276BEA55,$10FCBDC2,$1C2BFC8E,$5551EA22,$ED54513B, |
$E9D50D0B,$20E6D58C,$B61F6A2D,$3AE11F66,$81BCCDF9,$66F3BC05,$77B94C36,$2CBEB944, |
$CC6F3E78,$99636FF7,$52037F45,$953B033F,$29FBC5D8,$B0E7FBE5,$CE8A171D,$60DF8A61, |
$8DFD3B52,$6F91FD9B,$7631A2FE,$AAE0310F,$6A8CE997,$BFA98C1F,$D4ED27DB,$8BA7ED3E, |
$8766B656,$98C2664A,$4F36DAE4,$062C3664,$3BE2517F,$5570E2FD,$516EB8E8,$EAD96EE2, |
$6C569238,$41985650,$34CE6079,$23F0CEBE,$6745F1F4,$309545CA,$78957D30,$5A3E9507, |
$85839F33,$617E83DC,$94F7CC39,$FB0BF719,$F929B0C9,$3CCD2902,$401AEBE2,$70AC1A27, |
$619F8A5B,$CEA49F85,$6B04075F,$39F70454,$D565C913,$0DF96575,$47487E85,$08C34823, |
$71633799,$D28F630B,$1E58620C,$ECF55886,$FFF3CB66,$C2FCF34D,$C4119A19,$978C11B0, |
$C2CBE1B6,$69BDCBFF,$F8A15E01,$BA93A149,$E2C66EC7,$51EBC616,$043F52CA,$078D3FD9, |
$EE87986C,$58898788,$F60581CF,$4A4D0541,$C77C5DB4,$E86E7C6D,$884A8750,$EE424A09, |
$BC84E729,$CDB284B7,$5CA7A08B,$65E5A737,$AAA22144,$2FA8A276,$A76B3927,$A0946BA3, |
$35468EB1,$A5AE46F5,$F5684662,$35AF689C,$AE9D738E,$28259DAF,$2A960275,$CF059638, |
$66CD1F3C,$B6CBCD81,$48644F83,$7E436460,$5A7DDB24,$9BD47D78,$FA447764,$432F44DF, |
$8359E49C,$9F4F5993,$957F22F1,$7D557F52,$0F2C3106,$76802C43,$791D93F8,$DC601D4C, |
$922DB796,$053A2D56,$C59974D1,$11D299FB,$02E52965,$F9BCE596,$A039AC40,$D8FB39A7, |
$BE61CE4C,$340E6121,$EAB8CAA6,$5F04B851,$7CAA2FFA,$5DB3AADE,$1CBD4B69,$1549BD10, |
$4DD3F381,$FF90D3F2,$E41C1568,$AFDA1C59,$62F24DF6,$B146F258,$7E4F069F,$A40F4F48), |
($F8F0F94C,$A1A35CEB,$0F3F095D,$2C203D65,$4084A2A7,$1A2BDAEE,$4D7BCC68,$D3240457, |
$94A9ADC4,$F785BEA5,$6206949C,$F2EB5445,$0475CED1,$3F5E334D,$835D1F60,$5994299B, |
$AC204794,$785B7989,$CF461A41,$025DA6A2,$F01A901B,$DF1F3A71,$8BB77637,$27284F01, |
$694C5310,$E1955A6D,$D9D261AC,$24A1BAF2,$9FE36A48,$E4FBB08D,$F7CFF011,$8D83618E, |
$ABF5279E,$2AC72276,$E68EEBF6,$F9E32621,$D3F86F69,$BF323FB4,$B8745BEB,$BB888605, |
$7ACD2F65,$70DAFE1E,$1F1EDBF3,$D0ADF1A4,$2B089625,$1E91635F,$864818F8,$EE2791B8, |
$C56C1484,$99CE23E4,$FF259946,$F33F0714,$1CBE7528,$BD6F9916,$61A63A47,$9F293CF7, |
$EA114C70,$B80173F6,$D54DC62A,$6543EF25,$A0BFE012,$39B92C5E,$7187E8E9,$63A4F036, |
$2CDDF62F,$4C0D38A0,$39E92319,$07334C42,$C3D9BDC7,$43BFF375,$5F9A7954,$CA862B4A, |
$E8D12BE2,$5D2E902A,$0B4AC78C,$137E0E28,$30638307,$F162A1B6,$3E3C4313,$55AF17BD, |
$1DDEBC61,$35821278,$E52E452D,$94214E93,$DB12063E,$C18E592E,$490E02B9,$EC7A371A, |
$DA72CF77,$4963D240,$0C9FA786,$41E255D7,$4244C535,$FF043932,$0160C949,$88ED8B6E, |
$9E83A301,$6C163BE3,$B09E32BC,$C534E09F,$D78DA1B8,$806C0CF9,$9B96A499,$DBA583C0, |
$11411BE7,$746047AF,$C6CCBA5F,$F40C4B56,$ECA4E533,$6270A367,$7492EF71,$D4174815, |
$1B6B1522,$EFF3C2E9,$72274632,$0E669884,$9AF66DD0,$534808AE,$18CBBBF9,$8231AA5B, |
$F3BA3EC0,$B2DD52C3,$3F5C8A5A,$DD429CD3,$E39BEC6E,$4E509E02,$16947BED,$26FC1C50, |
$54D0BED8,$D9F82562,$4BCE652B,$0955D4C6,$FDE5FED4,$1610E4C8,$03A0AEDB,$6DC268B2, |
$C079131C,$2E7D9BC7,$14541C7F,$C3D3FF8C,$BBD4F530,$D64AEEB7,$E15B8BFC,$AB7F7DDE, |
$32A3E495,$144D426A,$A5AAE78A,$8E0A947D,$31034A4E,$798F2AD8,$6FF9FA53,$3BE48AFC, |
$07D5600A,$529C5BFF,$4EDB62B3,$BEE66CE5,$DCC76634,$931202D1,$C8937A4B,$50C1FD5D, |
$0E5FC014,$A4CDB60B,$F17A5952,$57F2B11F,$A8558945,$47054AC4,$D13808FB,$5A1DDC68, |
$75F22638,$5CFAC37B,$897711A5,$C207ACDD,$64B33DDF,$289A84D4,$46310BE4,$C05A0A7F, |
$50A57009,$E6A6162F,$A4CA2EC3,$06E71F13,$279731A3,$5F733688,$70E721A0,$EB497B58, |
$98360A42,$B667EB72,$A60A4951,$E3C8FCCF,$CD867DD3,$E772457E,$682C9A59,$6978D103, |
$204251A9,$0DEF6D77,$0DFF6ECF,$C90FDEB9,$823DD629,$D179A2F5,$5D5A1EC6,$2FA9C896, |
$4AAEAC62,$81B85FA8,$A27F8780,$DC96CF82,$23E2FF72,$602D05C5,$12E1B53C,$19A22F1D, |
$02C06792,$E52FE3DC,$1E7E12BA,$58407ACA,$BEC1F2A8,$61F95694,$4751C2AD,$48B78111, |
$7C788626,$AAAB2E8F,$6B8C3482,$04BAB9B1,$921C0487,$2DF46E34,$C40CDDCD,$1123A88A, |
$E2FB2527,$C6BD156C,$95C9648D,$7F6835CB,$85E8B623,$83E5F90A,$7EB8E1B4,$4F84CD53, |
$F9903005,$294ED785,$E44E8C64,$1CCCC5FD,$C2B9748E,$CB52781B,$796D81BE,$1D1896AC, |
$6E99331A,$B3090192,$4591A53F,$AD9862CD,$90DC6315,$C8DB8DE8,$FE45500F,$7BD28C7A, |
$19AB72B0,$0ADC2135,$B33E9C67,$A8F6882D,$CA531DD9,$B5EE1E81,$B25E552E,$201B0343, |
$91BCAA5C,$40360686,$17F4B2A4,$AE11973E,$FC85379D,$9EFD6FA6,$B91492A2,$33650D6B, |
$F2DAF789,$3A30D9AD,$BD615C73,$0C3B3E26,$098AA01E,$F651EDF4,$E7EE22BF,$710EAD4F, |
$765288E3,$3138ABC9,$AEE02006,$9D749A55,$51C5B940,$6E4B9D41,$BC01953A,$84D6B548, |
$4FBBABFA,$360BE78B,$AA95EED7,$A22AA918,$D42D0F63,$EDAE644B,$3576849F,$46D11995, |
$486ECBF0,$6497BC74,$29C8F1B7,$FBBE8083,$8817D8EC,$4AEA27B3,$6C595488,$5626E24E, |
$F6AF3958,$056EEAE0,$67139304,$4558EC66,$FA309EDE,$448CBF37,$CCE6B49A,$6F9FCE10, |
$65D3F496,$A0770FBA,$1A0BDC6B,$671E4987,$06B5A943,$DA71D091,$D6ED68F1,$08818797, |
$37B6E30D,$A3FEFA49,$3CFC2481,$B080F461,$DE0701A6,$763DE10D,$B1FEFBF5,$4DD96BF1, |
$41E46BEE,$92C65180,$80FDB1BB,$34564129,$584F195E,$981A70B5,$CB33D490,$3D0395EF, |
$25575631,$BA5CD554,$1534D536,$4B3E74E2,$3A498DC2,$6AF124F0,$08EA6957,$7EBC669A, |
$EB718539,$30ECF898,$2E1D91BD,$A922DB7C,$63665DD5,$7A06DF2B,$A1DF295B,$B154A730, |
$1021D2AE,$FC8DCCC1,$A935400C,$CFE8C1AA,$B74B52B6,$97A8BB60,$8FC2B8E6,$18767C4C, |
$9709031F,$9A47D617,$00000000,$00000000,$D8B2A8E5,$AC4C319C,$773241AA,$B9D520A7, |
$6D399DC1,$DECB6920,$B62B9BFF,$1F45300E,$592FD017,$10F7FBDB,$9956C30B,$3E8A601C, |
$212298E0,$8502E619,$5BEFB785,$F5D81807,$A31F4EC9,$547B44EC,$33C32DDC,$9CA0C904, |
$F46F5ECA,$E041093C,$C119DA55,$A69010A9,$7FD828FD,$C769463D,$2DBD3F66,$C4E0B3CE, |
$44F16C76,$2575E9A3,$9D230DDA,$01D45351,$B4EBFC6D,$FA6AD3D2,$E9B1E2AB,$D5C31B44, |
$7BADE62C,$F8377570,$819D78F2,$BCBBCA47,$26F7F8EA,$D79EBDE6,$4C1B0521,$5BC98F39, |
$7D184F6F,$2246A5E1,$9669CA56,$12AA5D79,$BAB43C79,$5EA765D9,$9C43C493,$8939D83F, |
$24379F78,$32B15E3A,$BFA13BE1,$E914DDFA,$8EA271AF,$909BF722,$28A838FE,$73530BED, |
$D058C1B2,$D2F05706,$DF67C8EF,$FED06A63,$57701003,$B43A4DD0,$937CCDCE,$A519E55A, |
$8C62163D,$75B414FE,$8AD7BF7E,$AFC5C46F,$E03B42B5,$2392F6B0,$3D9CEDC8,$386D7F0F, |
$2F7D58F4,$21CF5012,$0A2A0EC5,$9B938546,$55B07791,$5115AE0C,$EF044BE8,$0FB2CBD5, |
$EDC42C7A,$EA9D2809,$FB505797,$CC613459,$5EFAB01D,$426BA024,$AF80E94F,$1599113B, |
$5A8F7ECC,$7D359369,$5265179B,$0389F5F3,$EE6482A1,$875F40BB,$780D48F7,$95F51DC2, |
$C7AC7316,$7CE1C038,$34164DD6,$CE3C92FB,$66735A4D,$CDB56708,$CE26D308,$8AB02DCC, |
$13817C75,$914FA473,$5305DED2,$8B647E9D,$C9F3B302,$D82C7633,$B58B3524,$728758BC, |
$2282363B,$E8C08EAB,$3889EA50,$8FDEC72C,$36D62A44,$2B137127,$5610D94A,$3CD7C6BE, |
$D298A620,$37DFB4DA,$73478F7B,$868B13EA,$05150798,$B7B3B823,$84887F6A,$0B087264, |
$DDA7AF7D,$1BFF89BF,$43240C7C,$77E9B25C,$AD408EDD,$F0B6F2E7,$60C6F30E,$17C4B799, |
$6AECFDCB,$8C5732DF,$F50F9783,$68AC8252,$8728D1B1,$66CA1AD6,$A76A8018,$6B2577A1, |
$3B29448B,$E21CAF9E,$5C3AD78F,$A74443F8,$8D02DF74,$FD599F90,$2A685F6C,$967CE831), |
($BA3AF751,$FA7B9775,$769C2D13,$03EF98CB,$7072359E,$7191CE06,$FF7516A8,$BAB18B6B, |
$FBC1065E,$E6E5EF4E,$B1D0DBF4,$7BEC74A3,$07C31C4A,$656B4FB9,$9FC86304,$4E8520F9, |
$D16DAE58,$8FD8DF31,$E60A7244,$90A93FC1,$B449CFC5,$30AD09F2,$91BB5B90,$8453BE7E, |
$C08FEAAD,$1D68A3D1,$04B410F6,$5C546425,$8A9E3707,$8061383C,$CCA6DA42,$F9940FBE, |
$A982BBDF,$46E1D97D,$56F7AD77,$FC505216,$F35C2647,$5E4D2704,$CA48C2CF,$8BEA5973, |
$A34593BD,$D06323DF,$6A7A5DCE,$62B65130,$4966D116,$A436B071,$1EBC78A6,$4F73FB13, |
$11E244F5,$92B07CE0,$C2D5E2D6,$33429139,$15565403,$CEE418C5,$CEFCD239,$D7BE3D56, |
$5F4789A9,$53ED8328,$0D043428,$F3E9B51B,$D8DD8A86,$20650E0F,$D21AA2E4,$B6E7F4AD, |
$3189C491,$6D0FB63D,$AC1BAFEE,$0DA0A42C,$EFBA569A,$3F14EEFF,$1A086850,$13279F36, |
$A6DC878C,$9B225E8E,$715F3159,$6684D772,$24DF9092,$A3EBAEF8,$D4F4BA69,$C499A260, |
$93E153EB,$AA798C96,$29DBA4BA,$50021BE3,$FD2F1ED3,$949BB983,$F8B60AE2,$DFDAC4D2, |
$7B98193B,$F0062DD0,$09B024DE,$AFBDD13E,$89E93BBB,$B95E13A0,$86B707E8,$649D9453, |
$0C2930EF,$E4FCAC6F,$C43BFA5B,$413CC7F4,$F49F3A0D,$3B2668BD,$8D5D2B4D,$E50A7785, |
$9A517735,$05C45DA8,$6ECE4D38,$3EE23515,$A11F9BC6,$FE491137,$536EB946,$B7112F47, |
$6DB94184,$07DD1E89,$AD36AB29,$1AB5BD58,$0BEA2CA5,$8197E3D6,$12954849,$AB8F577C, |
$CB65C608,$9CFF4007,$5243BD81,$A0043633,$D783B6D5,$FDA689FC,$E2BE62B2,$CCFD5BE4, |
$6B575909,$75A34844,$012D04C7,$17151974,$3B4EECF3,$FB8D4C9F,$7F2C09CD,$AC5249F5, |
$90965F57,$9346A70A,$1B256C97,$04328642,$B564CB02,$27B81086,$2E18B8F0,$3569545A, |
$DD449EB7,$6B24735E,$59A99124,$2193D5E5,$A268977A,$C7763AAB,$3ED7F8C2,$B0CC31CE, |
$78EF1587,$C939064C,$80591F65,$16E3C29E,$85C00B54,$5DA2BFCF,$9EE567C3,$5990398D, |
$F02B2AFB,$67720C98,$32FEC82D,$54309DA1,$D6AEB212,$EAB39088,$0AC72862,$9682FAA2, |
$D5D9BEAE,$D38CBB14,$682055B5,$4C9C63D8,$4F88C99B,$D648E6BC,$8E2A27F1,$DC355C19, |
$6C944543,$10C807FD,$DF1E96CC,$450E41B6,$40D6F5C8,$0B8B614F,$54ADA50C,$D27A60FE, |
$F2712280,$49583E70,$268598E9,$8DC19C10,$1F917C61,$5866E267,$4638ED45,$79F53782, |
$3839E04F,$C2B26703,$8F072336,$CB20456D,$197F64EC,$2A18B4AA,$E3936675,$DBE84290, |
$879A032F,$73888D27,$214684A3,$E8AAD3A9,$4715E982,$6EE02EF6,$E57D7EF8,$A996145D, |
$F99B0E25,$C8CFDDA6,$ECCD5A26,$062BC563,$3410D0A0,$264ECB6C,$089D2019,$B8A8C84A, |
$5D1D81D2,$7DC7B1C0,$3914E488,$D5A77E77,$05991431,$4B417D51,$9755431D,$F62DE8B3, |
$5134B13D,$993B1DAF,$7D7601B6,$82787B1D,$6190716B,$E321B2E6,$A4868FF7,$B5086C66, |
$3C8DF0B9,$9EE60326,$AF6CA352,$349F8FB0,$690D5172,$5B897AAC,$DC699A70,$7C316A2A, |
$B860FF2A,$D451A59D,$F1062E3C,$706715EC,$FC021A14,$838EA0F7,$4462E53E,$57DF056A, |
$94224FA1,$CF12C32F,$BB17F396,$ED6E8E01,$677E69E6,$915FE42B,$3DA0F47E,$89F31A52, |
$7AB51DFC,$E71334A4,$6409655A,$A860CFB7,$BDF9EB1B,$9F10D8CC,$4CFFC527,$EF77CD20, |
$4DD2C1E0,$F862D454,$4B3CD96D,$8A1C8299,$88C43F7C,$AE4B0AD4,$D040AA9F,$98CDC645, |
$AAF5B763,$7FDEF2E1,$28F6A07D,$47170297,$EA2342AB,$745593AE,$CD8BDE85,$EE8116CA, |
$06EE188D,$727E56CD,$2F35BC37,$227C4D2E,$8BB333C0,$97742148,$A5AB8B30,$A21D7512, |
$7E010D0A,$BB475081,$B0FDDF33,$6CF96DD7,$EE97525D,$2801F78B,$41FBF10F,$1C9E783B, |
$4A11DDAA,$9D099BED,$30A4C056,$7A1AAF49,$43A1F974,$32B44AD3,$99267B89,$3CFB7634, |
$C93FCE73,$B2D572EF,$EB0E466C,$63408ADA,$FE58126F,$ADA4921F,$72283DE5,$5FBBFCEE, |
$5C308515,$6AD2A8B4,$2D6FB44C,$0C567FC6,$7C5B0571,$956D6269,$428CFDB3,$25A153A7, |
$F6C53276,$150C5A55,$E0E46AC9,$E2D7690C,$62E77DD7,$DA1E997A,$E1C96E0E,$F5C27078, |
$B94DFBED,$C344BCE9,$9D926B7F,$60AF1211,$D337A623,$A1F2EDD9,$0E733894,$CAD69E87, |
$D9F08E41,$3770177B,$C812CAB4,$A5C06B9B,$3767DC1C,$1F71E0F0,$5E6A8D6E,$44F89A5C, |
$1CE670DD,$6159C9FB,$5019B5FA,$8E2E04DB,$BCD4EFDC,$8805C1B8,$967847DA,$E138F1C7, |
$84ED0F93,$4AB7A6BB,$00000000,$00000000,$8203171E,$38C9F076,$2C42B08B,$1B4366B2, |
$C74CF6E7,$7803EC68,$3A63E834,$EC9855EB,$E4507A3F,$BE830D29,$74C62568,$2DC5AA23, |
$BE8EE7A7,$A62FF350,$1DCB741A,$764CD08F,$A7F1834B,$8C3747FA,$5BF3995F,$0FB9E70D, |
$B38AD38F,$55C6464B,$162158BF,$F7DB3359,$2231881F,$D195F835,$B73EC379,$0992226E, |
$77B129D4,$14FA81BF,$73053922,$48AEE59A,$C3F8E611,$2457884D,$206B8064,$FFBFCADD, |
$25F29455,$B4FEB78C,$66536D21,$864AFD5F,$C661F220,$6F16F51C,$79C21140,$DE2C1F38, |
$DBAA863A,$195A2593,$025A087B,$2E2A32E8,$33D3CCEA,$432584D5,$F5B23ECA,$2C3371C9, |
$3FFAFC05,$A7D928BA,$B2A7D748,$42D35F3F,$10CF4032,$85A56594,$364AD8DB,$0864F984, |
$8C702F8A,$F21F6EF1,$FAEC0299,$F1F0F63A,$147B50C4,$D9F101B1,$832E13D9,$2FDCE902, |
$E9544E17,$4D6AB832,$170C5C78,$E0CE2A2D,$A8AFBF18,$51F4C009,$ABD8B3A4,$68CBEB95, |
$4EA5CD5C,$C15DFFC8,$F7E836B1,$02194321,$EDE05EE1,$113EDC17,$DE33920B,$521B58C2, |
$27A89C2E,$9AD48564,$C516FE9C,$5629DE80,$9CBF6FB8,$77BA0B65,$AE41A795,$238A96C4, |
$9B7C73F2,$12D144DC,$950F4B66,$D807DA5B,$588495E3,$3686CC91,$5ADE9D98,$18ACFE79, |
$E8794AD0,$5A7FA146,$231C8CD8,$C680E141,$B613C7BE,$1E873B1A,$60BD75AC,$F434AB92, |
$63CA7910,$CD0B800E,$13B84C8E,$BC9A4E08,$1852602B,$3D0DADDE,$454FE1F9,$40CA1C1E, |
$C1A2EE6A,$0A7DBAA5,$2AACA806,$693D307F,$DA8782FD,$0E4F3CE7,$92CC572C,$BD6C95E2, |
$75EB21AF,$3AD0B357,$2B81ACC1,$7E28290B,$81741BA2,$01F6DBEA,$E7277683,$87BC26B5, |
$03770CBC,$393F2B9C,$0F5E3C53,$DDC387F3,$57DAA9B0,$EB454B62,$484BD5D1,$B323A905, |
$BFA3E360,$B13AEA24,$353DD467,$315BD218,$980B7F4E,$2BEE6F40,$A0329F01,$E95C0843, |
$5580A1CB,$C56F798A,$6524619D,$BF75D6C3,$6FE349FF,$29F72C61,$CFD1D6FE,$C0AB2422), |
($E957943C,$561FC423,$69079288,$014287CA,$DFCD1D21,$2F086129,$A044FD99,$C537D4AE, |
$D7C8A457,$F1E8C3BF,$5CDF9BFB,$2971998A,$2CE9E460,$23FA649A,$56A6716A,$3AA9E9C3, |
$AA3D1708,$D6EFA4E7,$FDA5B5EB,$705A24B1,$B170A9FC,$101E0CE2,$0E814CAA,$7CA82102, |
$1931ED13,$0BC97ADA,$778C59CE,$34DF1711,$9226D2BF,$D35020EF,$805006B4,$575D43E9, |
$9B1DB840,$91ACEBEC,$3B5945D9,$549B3F42,$3925163E,$99A3ED9D,$369A891D,$7917A50A, |
$B4B6DC4E,$E372343C,$D949E8FD,$8D40E2BD,$D0728202,$CFBC29BE,$7108AC12,$96979485, |
$B30CFA1B,$DD26DE3D,$D8773B74,$115C8B28,$C480A3D5,$E9F9C92C,$4116D0D3,$4DC8B21B, |
$4F979C79,$31609319,$0342806E,$5124BB4A,$DEF3CEA8,$B31408BC,$F158AAA6,$C1CAD76C, |
$E1522D4A,$88FF66B5,$76B28A47,$A8C37E84,$896B6C4B,$15A188EA,$0684F5DC,$A2488394, |
$5919EE49,$DA1DA154,$45EE76E8,$22B8E350,$25D28E9F,$6106AF99,$4792250F,$EF80318F, |
$CFC79ACD,$663DD0F0,$26900EF1,$302214D3,$61022BFE,$DFA2255C,$8CAD19F9,$E6CDB034, |
$6A4512E6,$50663C80,$74CED9A0,$65FBAC5B,$C9436F11,$C4755364,$0B473918,$8FC419DC, |
$9961EBA7,$5C943933,$6EBDB4DD,$3F166DCB,$15CCF25E,$BA598907,$BECF36DF,$F0AA4475, |
$BB09436D,$03C67CAB,$AEC5B133,$B99FF5AC,$75F00A29,$F9E7C5CE,$D6F677DE,$6DF4AA2A, |
$F5A00C9D,$AEBA8627,$EC91E18E,$A573FCFD,$B5880FC7,$7F6E5DA9,$E86947B5,$CA03ADB6, |
$ACB9E2D4,$74A72773,$4CD51C17,$60442853,$1CF798A1,$F8A54204,$8A29EC25,$448533A0, |
$436A8334,$80F060C4,$9A236BC9,$0DB08279,$CEF94944,$FA21B965,$1DC94B28,$64B92B91, |
$94A22763,$7118A37B,$9CA79E15,$AFF801ED,$2B53C235,$1DAE8E9B,$0A79EA91,$13D87049, |
$335CFCAF,$8A7B9DD4,$F95D13D0,$1F2A75FA,$2E95B787,$EEC2B645,$23567B43,$C34E2C0D, |
$3120AF48,$47434F0B,$BD8DB6B1,$A18EFF3F,$502284B6,$98E16A57,$CC851AA3,$37196BBA, |
$6240AB90,$8E869E16,$BA3790E4,$9FDA153E,$86D4F368,$F515C07D,$2FAB640E,$72DEDFD0, |
$DDB14EC6,$E230B3F6,$180F3E9A,$97D5134F,$66B80DAB,$E1F6CF5D,$E5AA8B71,$E78F37FE, |
$6F836754,$A30A045E,$F21A2AC8,$90EE6C26,$A4BC5BA2,$AA4785E5,$FA1F93BE,$4E0ECEB0, |
$A3067DF7,$94136FE4,$E49458F8,$7B935E6B,$EB2BC7DB,$9B2716FC,$1276D40B,$840D6306, |
$959CF4EA,$ED04CAEE,$7F89E0B8,$EA3FB587,$5DE14872,$B56DF01F,$100A87EC,$4935B1D9, |
$916452D1,$82749BA5,$C87DBC98,$58693AF1,$8855BFC2,$89BDE17F,$A6C00845,$677F573A, |
$168E7230,$EB7D324D,$D20ED1E5,$0284FB61,$0CFD1F4D,$B190F3DD,$EEEDB269,$684B2E22, |
$8ED14A1E,$2BF562EB,$0FBF9F23,$E0B44897,$EDAF3207,$396F9568,$B84BC303,$52E2C7E1, |
$17B0A1B9,$77615BD8,$DC8F9D4F,$7E2CDA63,$6CC1E73A,$F22EBF14,$985F382E,$C08850A6, |
$E210AD24,$D9DBDDFF,$2DD737E9,$BFE60D0F,$822C5553,$9A659136,$A97F9766,$87CB1FAD, |
$2811425B,$4C8A35D1,$F863C059,$83361C6F,$FB214037,$D212A725,$D330026C,$9E9892F4, |
$E32E7EAD,$45C7B46A,$7374FFF5,$5BAF465A,$DA0B6893,$DC6459F7,$7833C6ED,$D46B5F86, |
$F066792F,$5DD6BEF9,$816ED53D,$CB412A7C,$C5BE705C,$75E5A0B9,$3DDDB005,$F6D3BCD6, |
$A7FEDBCC,$FB633EAF,$11345465,$D529D84C,$536004D8,$C9C5D11D,$301E7CC1,$DB5F269E, |
$C07805EE,$86899867,$BCB36538,$3D9296AA,$64C45E4C,$2CCE1D82,$1A736D7D,$5AEDC190, |
$B6CA8FA9,$2E4AE6E3,$905A8158,$1E68F230,$0805B976,$DEE0A296,$027C53E7,$CD38D2DF, |
$87EA20E1,$6909A9E8,$C6FCF032,$24C11BF3,$13480782,$18110A93,$3E9F306B,$A7F7079C, |
$8B173FAC,$D8995A35,$7B714683,$854FE4CC,$FFD9E60C,$BD62F66E,$E06CFEC3,$14E30F20, |
$6DFF34B3,$6E32D681,$FEE73585,$217E9FFB,$3A679650,$C88756D7,$1E8BCB46,$359D90DB, |
$14F221D7,$2645E092,$511C573F,$04FD03C2,$46ACF686,$739C581A,$65FA8DC5,$B0D27417, |
$D48A2439,$A0CC78F5,$4B6F3A42,$5E10C252,$37A45A94,$E50BCC9F,$D14C518B,$53A0402B, |
$B2322992,$413AB7A8,$97E0A70D,$203C1831,$6B7BC16F,$CC7A5515,$58273DC0,$4601C8C1, |
$44D0A561,$BEA48AC5,$F7DC5F7A,$638254F8,$5798A2E3,$A6B58056,$D5B4F7B0,$3CD01160, |
$B04E7A75,$8C026577,$8D93CA70,$7AD1D9A1,$5F9D1B95,$785522C0,$2268A8CA,$5F524598, |
$CA01EF7F,$9551E82E,$00000000,$00000000,$7CCB60D6,$BB1B0ECD,$CB3F3CF6,$094D81BB, |
$35D80973,$28331E40,$54DA228D,$F7913B1C,$3CE3638C,$6ACFD543,$A84144EF,$1BD77638, |
$9EDBCDF2,$62C0D332,$2A6D11BC,$81B2E70E,$C33A8580,$D7AD232D,$381BC5B7,$05BF8408, |
$9D994D9C,$33E46878,$9FE51E7B,$FEDCBAA7,$93180136,$4F4C497A,$EA151452,$073B7F69, |
$F324F941,$0CF205B3,$84A8A08F,$382D12A2,$425450BD,$1CEC0951,$525ED751,$55D9B888, |
$BFF1E556,$6CB62DE0,$4028035A,$D1D4DB8E,$AFFB62BA,$25839C39,$AB03C481,$4AF3CD72, |
$85967306,$A4317B37,$C146D667,$1A95F1F2,$2014FB2D,$926A9747,$8FEF9997,$B7E90B7E, |
$B975108A,$CEFEAE74,$07BA2655,$3E54EA01,$292F91D2,$D0965C44,$CDBBC92A,$AB05022F, |
$24EC5D16,$FD1AC60C,$4DEBCF9E,$FC5841C6,$5EA3C81C,$E4494B55,$E6E80B1F,$B6AB8CB4, |
$3FA1E3E2,$3BEB6E09,$05C675B2,$F36C38DE,$013ED389,$9C1C6995,$5A5B6E27,$8B391A1E, |
$FC9B6662,$EC464D24,$4EA94FF0,$AD7CFA8C,$482DBA2C,$0F347918,$68394101,$9D5EEE5F, |
$7EB73331,$7623DC12,$F49EDF14,$32A6EFB2,$0DC3CCC4,$2D8C9A48,$B7F45C20,$B2568F76, |
$212A28A4,$0E76FED2,$790D1564,$48773613,$637E7819,$129AF783,$A238AE7E,$080F0671, |
$A582882B,$365BEC70,$093B6AFF,$42FCCB03,$70367F9B,$0A8BFD10,$F6E28CF3,$FF9E3D6D, |
$AD87315D,$E8BB4EE6,$724A2C7C,$C7B32FCF,$C7C223BB,$B8DD7266,$491369A5,$9328108D, |
$831286DA,$0679F8A3,$7DF5B35F,$27076758,$1FB518CF,$A981F94E,$55E4F104,$6B8D5289, |
$32622F26,$1667F441,$E7D6D896,$2AB7E521,$27AEDD78,$AC3E7D46,$6786DE22,$7DEAA6C8, |
$5B65BDAE,$1725738B,$C2045609,$4BB14AB8,$A17A2E10,$592BBD3B,$4A51E9CB,$C20CABC7, |
$04F8A63B,$6F70514B,$96DE7484,$BC2071A4,$7A4F950A,$19538D59,$EFD361E0,$F45747B7, |
$603CF877,$43BE4CC9,$1B4DBEF4,$C6F1A805,$34E6DAFA,$B42F77D5,$DB35BB1A,$40783062), |
($2DEB0A4E,$F5A96C29,$EE653C51,$211C9DF6,$BEEEF596,$04DE5DDC,$7457C19F,$E1E5B06F, |
$14A54FB6,$74CA30F0,$C5457D85,$C296F9F7,$484D10B0,$7D4EE08A,$BF9B13AD,$AE87F2D0, |
$0E89AFB7,$8DF4BB48,$D9A2D61E,$2D8B7A67,$BD712ADB,$0F3559C8,$2F013338,$541BC731, |
$636D5164,$9EC4848B,$60F28E29,$952F809F,$B28D6357,$28984D8C,$C38E361F,$D4B5F1DF, |
$7076B373,$5674135F,$042172EC,$B791A330,$D4B4A6E4,$AB94C53B,$9305FFD8,$F17731F5, |
$801E1DCF,$39C7A621,$3BA47C8E,$20D1F7C1,$F95FACAA,$5E3DA912,$E5B80731,$B1202A82, |
$6DE4FED3,$13303FC3,$5314168A,$2E29C43E,$0D1670FA,$861FBF5C,$F3F771F1,$6458B16A, |
$DCF642C9,$3043765B,$B825BE0C,$12FD55F4,$D65E9F92,$0A266E23,$2636312E,$6595DB5D, |
$87A0B06E,$85BD0105,$0842E42D,$9BD7B360,$0175E63B,$AA59AF0C,$854A8918,$240FAA1D, |
$F82A4A91,$F464061E,$A6282CE1,$5C527D7C,$8AB6C094,$03A2BE59,$76BDF8E9,$40571B77, |
$1F7874D6,$E4F68784,$32937E98,$115FEBAD,$442E8671,$5108F0DA,$3C1AD12F,$9CAB50E5, |
$5640825D,$33E1C802,$D8D73025,$87D2D56B,$9A32FDCE,$C0F92D99,$126E042C,$62E938D8, |
$A0E3677B,$4A717554,$039FDF4D,$0BEB0414,$9CF9B654,$D6DA25B1,$FAC073E7,$55D6AD06, |
$C7AF44F3,$632452EF,$5B56F2A7,$B5FE775E,$B0675A21,$892AE694,$7C1525B2,$7A32030F, |
$73E96C3E,$5D9F174B,$10843D5A,$C35B93C0,$E8AE77CB,$373F95DE,$455B604A,$FB515FD6, |
$8BC326AF,$A9FB1155,$64D3FCC5,$22BE23AF,$5E026670,$A8367B62,$B9505837,$B8A4FAF8, |
$2362A5F9,$785DD761,$18C6D977,$588C20A0,$77C81ED2,$EA0EB47B,$36B20C74,$A6CE489D, |
$37C7EA4F,$0C97E791,$9D8C506F,$7C838ABD,$A5B7F3AC,$57B97968,$7ADE6E28,$6C110B27, |
$AE6AC8CC,$C785CE1C,$8C7D8B0E,$1581B671,$98D8C4B8,$614B8681,$0FFC498C,$27AD1444, |
$7EFF1CC4,$DB80A817,$42E5CDEB,$472BF8F2,$3AD19AB5,$8A8858CD,$A75DCADA,$F60BD270, |
$FC0B387D,$43F5A52E,$AF1F2EF7,$6DDC6110,$46C4BF07,$F0BA5BC2,$F068AEBC,$6FB3B57E, |
$6E7B219E,$18DB3BD7,$0BDD3B60,$903CB774,$A9D4656D,$7BFF6938,$D27FED7E,$BDB7CD13, |
$6B2FB549,$051337EB,$9E138F22,$77688EA9,$21889C8F,$D9EF7C79,$34583502,$077CE385, |
$CC727F93,$F318E59B,$BACF877A,$B34FFEEC,$FD7EDE46,$E9AC0A22,$71035548,$FC2DBC53, |
$5F77804B,$026FD46E,$CAB93409,$E53BEDB3,$ADF51781,$CC6ECA08,$A1968140,$E028DA58, |
$0AA8DD5B,$3A651878,$F28297CA,$CE011E66,$69C58C3F,$A4A19CF3,$F11D4887,$C5EA1A72, |
$24DC0858,$C4277045,$29CA78A2,$4238CF19,$FF94E730,$481EA13A,$C011E952,$DF5EF5CB, |
$EC8F0527,$80AE36EE,$47B1593C,$5AE3F4CE,$7834575E,$CDA3A03F,$7F8AFAFF,$71D9071B, |
$4C6C625C,$CADF43BA,$06CB4B9A,$16230828,$D30A0B45,$17EE621F,$C8530D7F,$448946AB, |
$3F850E62,$974054F1,$20FD7AB4,$73B6D375,$131BE217,$C8B097D4,$B6AC11BB,$9F09EEBC, |
$1D924DA0,$45442C9C,$E4CDE10A,$1B79858E,$5CE85F06,$0984D07A,$417A12A6,$4CC0FCE6, |
$57356466,$99B8670E,$352DD339,$AD254C89,$8381C282,$322CA235,$2743D715,$CFCC7451, |
$4E865B2A,$6B6DE8A2,$AB3E5C1B,$DA4DC220,$65A61AFE,$88E78CA3,$816BFBF4,$939E092D, |
$99AD2283,$CB12298D,$C926EB44,$EED0E9A7,$82F424B9,$98750D39,$164F76C0,$D5789BE8, |
$58C92DEA,$BE15734A,$2A55A7EF,$49D3CB0D,$7941B165,$67FA0F33,$DB48EF68,$8C39D17F, |
$508BC9C7,$25C2C02A,$6218B75F,$349D2B87,$AA4BBA20,$70146D2C,$D095D408,$1C05660B, |
$2E74D503,$FE42683D,$DD83A4F2,$9A1AD957,$19B33F4C,$F2D58FAC,$394E45F8,$81635CD9, |
$D1E03233,$B65CC907,$9F666919,$DD3121A5,$09370216,$318E1C6C,$EF10DA6A,$8B4532FA, |
$BBBA6141,$191651E0,$61876812,$3F762F93,$6C9118E8,$B96990CF,$8E97B278,$B4331D69, |
$F449DC50,$D822164E,$5261F0B1,$84706B32,$1E0D92ED,$4EAF2888,$11F1DB61,$69023CCC, |
$AC80F1BA,$66376504,$89291FD9,$0849BA4D,$FBB595DC,$FF8F020A,$91EFC6AE,$50C59AED, |
$055494D7,$1DC80C3C,$8FE25443,$1E6AB265,$3EF0E859,$3D19FBFD,$909A2095,$FA9C35E1, |
$CE9846E5,$52AA4E83,$A37CB836,$419A7140,$D72B79A9,$A07FC12F,$C4309BBE,$68CF56FB, |
$D5C140DF,$01CD6A37,$54AABB2B,$9253631A,$7D60C389,$D06BAC03,$674C2388,$295527BB, |
$221743C2,$D204786D,$00000000,$00000000,$729C8A05,$F7C6B847,$4AA729C6,$DCFC4B92, |
$2B2041D4,$E38A6401,$6F0EC7A5,$B28294DB,$E9DB91F0,$9D663AD2,$DE1C7BBF,$91F1DD43, |
$4D198467,$6086ECB6,$CD0799A8,$59414A97,$E0EC93E6,$ACE826BE,$BC04CCE0,$A56CF6C4, |
$F53C3A6B,$727BB942,$25A9EE63,$6E7EDF49,$DA3D0953,$26607E73,$95CEB442,$E75439DD, |
$F6A3E526,$7990BD56,$96516B0F,$ECBF3DC9,$4BD2CFFD,$76A5E49E,$EA444EBD,$968D3EC6, |
$927019E3,$5B2E9EF9,$9B471BF5,$6AA08295,$33E698A3,$BB0644A1,$6639C5B3,$830C88B7, |
$FEE1010B,$E2470E36,$307947EE,$B0ED40B5,$B7D9F780,$355041B0,$843F6F23,$8E560511, |
$173A90FB,$7F2134E4,$EDFAE31C,$2AF799E2,$752227A4,$4BBC1F63,$CFEDA0DE,$F8F3E18F, |
$E206AA90,$0D5A8DA6,$0C6396C1,$2C461050,$15D0A98D,$DE939FFC,$6A5A5372,$AF4A98E7, |
$51FE2FFC,$8F9B6F26,$3D6F3714,$36F2FFE9,$68B06A04,$0EF833FF,$400FF49D,$E69953EA, |
$B112BC1A,$23734998,$B44628CD,$3EBB45A4,$310CA1D5,$1AB4EFB9,$86D55655,$2FE4AE09, |
$A2095E0D,$EBC3DE4C,$1B59063A,$536724B4,$97248D34,$46E692C5,$383BA3C3,$2B3AF3D5, |
$DF699D84,$3BA8724F,$4FF3BD11,$C13447AE,$94BB5279,$4D0D96D1,$A4C21597,$FDE0D664, |
$4938F68B,$D7174F86,$C2FBD024,$7EEC5ED3,$8D086D35,$BFD8197D,$CBCCD232,$4F6242BF, |
$E3734CAB,$A70322AA,$5D9DB93D,$A3DD7F76,$B533CEF6,$94E2EAA8,$59BCCBD1,$144CDC46, |
$7BAB8813,$C648A42B,$1A2CE001,$F93E8BB8,$E627D87C,$BACB2E96,$07BEADA1,$BC7AA724, |
$C6DAA2C8,$C97DFDE3,$02EA3976,$A1B2AB18,$5A23149C,$1FA7D852,$C1640F69,$75075AC7, |
$28BF9E99,$E8616015,$885CF9E2,$A2101541,$1CE7AB9B,$EF1D8390,$E19975DD,$06B189B2, |
$55DF5D10,$380ACC16,$E7523E47,$1092819A,$F7D6031D,$D3C9125A,$A8A18356,$D1A6C634, |
$2C9EEC75,$5FF0C325,$B3F8856C,$82C1E280,$43902BD0,$ED7257FE,$EB31A886,$3CD491CA), |
($FAD9E7DF,$94AF9EB6,$03C94DDD,$9208AE5E,$7158480B,$1D8DE8D6,$BA147AF8,$FD093CD2, |
$E6597CCF,$A45CEB22,$7BF113DA,$9BBDE6E7,$65FFFE5C,$E4EDF4B4,$4E8D2A2F,$7125622E, |
$8F68430D,$1791B81B,$902195C0,$B56A63D1,$30D2EE67,$A980832B,$84862397,$4C0A7FB3, |
$1DC7A05B,$ED58BC0D,$5C4D0637,$5955D7F0,$806FCF4E,$D2B9B1C8,$F910AA02,$06A730E8, |
$46AA0768,$B8B60BD8,$FCBE7D90,$45BF370A,$5EC370A1,$16F6B037,$8B81AFD4,$89227660, |
$D0EC08E7,$DCCCC1B5,$62DF5F58,$E8569491,$A41A977E,$82592E81,$4FCA1164,$AC8EABB7, |
$92AFE356,$FAC90416,$331BA3BA,$3B882D75,$CEE2E561,$A39CD3E6,$D7CCA9E3,$D077A190, |
$534A8A74,$9C7DDE23,$F3B9F1D3,$80973ED9,$209CB4E9,$CE535132,$B6DABB66,$AA299B5F, |
$6DD8D31B,$2D7E9D42,$0D89FAD5,$8A8B6E14,$3FD56224,$6CA88AF8,$13871753,$F5DB7C47, |
$9BCFF55A,$EEF1A479,$6636B381,$76E55AEA,$A33A367A,$8EE24EA4,$C44BBEB0,$25ACDDD7, |
$AA5A2076,$9ADAEECB,$5083C7A9,$0E75707D,$94C87919,$2BD9ADAA,$DFEB84A4,$19E4C866, |
$F070BC0E,$129F9087,$AFF4F7E4,$D9C2E929,$B9DD3725,$6F01928C,$64B8C517,$39463D2D, |
$E4D70A59,$EBFF8CE5,$418AA66C,$B40D6BFD,$3B3C8EFD,$F21B4483,$E5903112,$3654457C, |
$05AED792,$431807E2,$3E92596F,$B1034361,$FE300B06,$0A1C50CD,$B79D802D,$778252C6, |
$0720A104,$0CBB6025,$1AE7015F,$E1E3DC28,$8128F405,$0F127851,$AB1D1B3D,$47712752, |
$9CEF545E,$E24AC45C,$A0F37BA7,$1CEAE0FA,$FDF946DB,$9814FE93,$CC6C93F7,$EC3FB421, |
$75B1A4D2,$833E26AD,$176EFB8A,$6B68B23C,$FB9EDC94,$4904572F,$AC3DBA39,$4BCA4777, |
$93E8D81D,$2762CD8F,$04E9ECD9,$9EB3CE7B,$27BC15ED,$C2E83117,$357C39F5,$EA9884C9, |
$6BBF4954,$FC6E34FE,$21DB8FA2,$13F898AB,$C782F36D,$B7A47389,$B0BD2129,$7B3932E3, |
$C9C24465,$AF27B3C3,$1629C0C1,$B6C37BA5,$5D0A3D7C,$84FE1E69,$59E3D1A5,$1A4DD012, |
$677188CA,$AB4E9373,$546A2B70,$90C6BE06,$EA97BD51,$F37C4CAF,$96460F8F,$647ACA6D, |
$D325453A,$4EC46FEB,$4C035CB9,$3E8605E9,$D68B92A8,$0DDC6809,$DC22C979,$8BEC6638, |
$104E5A8E,$67D3D219,$45634AB5,$2ABEA586,$0BEE609A,$5B9BC7A8,$D2627E71,$936FA672, |
$49AD8B2B,$7D9E020B,$8DE6359B,$5832DFDC,$58A4EAEE,$C7E6198B,$797F654C,$D41E8120, |
$C22C24FF,$F4BC746B,$CB4C32F3,$E084D404,$2A35EF38,$48635F03,$DB02687D,$8757061D, |
$73D63E9D,$522E8F11,$E819CBC7,$BCDF2B68,$6E119EC6,$BF76331C,$A9936DAB,$08D24095, |
$C8857F2E,$728C7A5A,$06679A4F,$D110A9BC,$26FB2EA6,$1F43F88E,$B89A0C6E,$B2AA5B15, |
$7D968995,$4AAD4F5B,$D542DF75,$9FD4C657,$4B23FDBD,$323D65CC,$F6172641,$C38F393B, |
$994183CC,$A152C3BE,$82E1B9D8,$9D1AD60F,$E3F7AB5D,$E744ECC0,$B513F6BB,$38213501, |
$9E6122C8,$ADE9A39B,$343B02BE,$37334D50,$5B6DA733,$55EEB7D5,$7CD1B2DE,$970686C2, |
$D405E43E,$427F0FCE,$701F7340,$C026214F,$83A68293,$40B11F96,$57A366AD,$02CE1058, |
$CFA5DE2A,$7E371A7F,$EDB71C55,$FFC72C8A,$9166AE8B,$68C1AA48,$890FD942,$C68111A7, |
$E71E4784,$79F722BB,$A8D456E0,$D579890C,$9F261983,$70426A02,$EF396AC3,$B0644B4D, |
$F8579149,$DB0CF971,$8AC6949F,$5489BFF9,$AEB3CCAF,$046920B0,$9806B887,$7CF90A27, |
$7F18FF03,$050E289C,$47ED3C23,$651DC241,$74F69F99,$5E95EF34,$EE7E5188,$6DCF82D4, |
$729105D6,$8F854688,$2212C27F,$81F036F5,$970134C4,$B9D103F4,$A27D0D31,$5349873D, |
$BB5341B3,$20A2F54B,$6C9FE850,$F0D554DB,$28BB99AE,$07C038C4,$1C809B10,$30F37594, |
$9DA86F15,$3FE10DC5,$7AB62891,$46162F7E,$325C98F1,$E623E4EC,$3C1C2FF9,$FEA024A6, |
$B23357BF,$349A5524,$63986413,$35FD5D08,$AD7A8172,$96618EEE,$5F844BEA,$CB5D79AE, |
$6AF8721F,$21C5FD67,$0CCEC19E,$5720A78D,$958F4252,$F6726433,$2532637B,$8D4B56D0, |
$15E08D1C,$24CBD5FB,$E2B09016,$3AEF2559,$DA455336,$5AFCCF84,$F5DE6B9C,$51879765, |
$C36B1FB4,$2917BDF2,$605129CE,$A7F5F356,$A1B440EC,$C1412963,$CA0B09B8,$3D2F1D9D, |
$37F24F63,$A53BE30E,$A55DAC35,$5FF2E718,$1F49D6CD,$A2FBDBCA,$442471FE,$F7156C1F, |
$61161285,$7A5E3ACF,$8E2F7846,$CA3A7182,$8848E209,$1B2AD83E,$E179DDCB,$A8E78B07, |
$4A64C6F6,$EF96AC55,$00000000,$00000000,$38F5C320,$6013EADD,$1BA03A14,$3C4815B1, |
$78385E07,$09B548B9,$ECF0271E,$226CE513,$BEFD9621,$63BAF2A9,$2D154E3C,$44D83F26, |
$A694E1E8,$CDFA4946,$7678E90F,$113688F3,$8CA10ED0,$85991645,$0F078C43,$C52809D3, |
$552D103B,$4D6D779F,$F7501D0A,$1E24F0A2,$D1AB33AC,$0167082C,$0960160C,$1438A06F, |
$14A7B657,$F9601C62,$48EAB060,$A035CB92,$24755830,$50E09F49,$FF77304D,$D7B79954, |
$B454CDF0,$E58AFC98,$86085501,$03A91874,$6F56A58D,$62DDFA85,$DEACBFEF,$C44F01FF, |
$192E4C82,$73EB7276,$2EDC03E1,$D6D09178,$4304D0FA,$FBAE0C3A,$2C527577,$9973F6BF, |
$A7D3DAA3,$105180DF,$4243EBB1,$2605C5A3,$85C118DC,$91A1B62A,$08272D47,$C99369F6, |
$F2FECA98,$5D3CF740,$F1378745,$CF34591E,$D98C1EEB,$C8F461DA,$2F9B38AA,$0B7B58E1, |
$4D4467F2,$E32DCC70,$E03EE680,$754C429E,$51C4FCE2,$D3DEB9E4,$68760489,$6E669AA0, |
$C1E56922,$66B4DA35,$028E7696,$4FA367C7,$110961C5,$BA781B80,$520DB13F,$41D617BA, |
$9A88CE11,$335A6DE0,$56E45DE6,$DF65D9C1,$773FD244,$CC9D416A,$2355F934,$5C5BFF6C, |
$12C02C18,$2870B5DE,$D8CB25A0,$155FA843,$36B57428,$78902A97,$186977C9,$AE40BBEF, |
$5A2A9C78,$88457E4C,$C6C5C826,$6A0FBA10,$1E0EED86,$7F501253,$F49950D7,$8C2C5EFC, |
$CD2BA8BC,$31947DB8,$BC73E0B7,$2C19956E,$3D5B14B2,$230BED3F,$40CD9D27,$69A6A264, |
$0AA95BD1,$86300E31,$69313FC2,$B3CD5339,$0E40B708,$1883C04A,$BD34DBFC,$F1B25CF7, |
$3A7BB5B6,$2FB08D1A,$7E5FC448,$D8A5E105,$01473B4B,$DDABC999,$874F6E4A,$DE02D1ED, |
$39B2F86B,$BDB82344,$DD65F232,$5647AFA1,$EBD0861A,$2ED78536,$B3746CF4,$E9319CBD, |
$B1FA1A62,$A692FB7A,$3195D52C,$742B4AB2,$2B72D473,$95C8969A,$E95EF08C,$6174E2F1, |
$C50C85FB,$F807144E,$BFBAAD6A,$BE113B30,$29FCA2E5,$DA6BF15D,$C0A25269,$BB1F13AC), |
($F9E37BF9,$C22B27F0,$0955EF09,$93FAD23F,$A22A91A2,$32ED4B84,$CC61B1CC,$3898B57B, |
$AD98E5AD,$55825BA9,$9421EC94,$B2EEB806,$CE3C6BCE,$C7EB5875,$1F45851F,$4B1DAC5D, |
$4705D847,$C16BA120,$1A2BA91A,$C5380F46,$909BAD90,$B908971A,$763D5376,$303E1CB7, |
$53486853,$E6FF324C,$61F95461,$6D1AEED2,$6AF1616A,$0193D1E3,$F0B694F0,$51D1F5CF, |
$2728E127,$29B2C3F5,$EB4950EB,$112A768E,$6F9F4D6F,$8FB672F8,$5BC9EA5B,$F0C66C74, |
$2FA9632F,$3F8B9DCD,$DBA5B6DB,$65BC471E,$967C3696,$4D9D5508,$18767318,$3A4BE248, |
$144DB014,$2794936C,$99CE4299,$2AF24525,$75B4E475,$4A8E7DBE,$3A30BE3A,$9DDC82A6, |
$4C0DED4C,$ADE29E11,$C6BDE9C6,$D1D2064D,$E04165E0,$7DA349BF,$E8C0E7E8,$6B9A1787, |
$F6510FF6,$A54437DD,$2392A023,$2254ECE9,$BD6F14BD,$79F0E7D9,$798F2779,$57510C9A, |
$2B13222B,$346DB2D1,$C76984C7,$54118A4A,$83E5EB83,$EFCA4A63,$43BF9943,$CA8D8E3C, |
$BCBB79BC,$FC336BDE,$45580245,$3E184C2E,$06E79B06,$F495C212,$025DDA02,$FF73ED0E, |
$CFE806CF,$4228D472,$A744BDA7,$BCC8E89F,$C5345EC5,$AB626744,$C90F9DC9,$B6BD1660, |
$A3FEFCA3,$B72EC783,$32B13C32,$8BE5DC9E,$A1A326A1,$485D2A8D,$A4CD0AA4,$C6788996, |
$1BFFC41B,$40FB8341,$BA5CE2BA,$08A6A9CC,$E52F49E5,$F386EAA4,$EFF311EF,$1ACC5992, |
$1599DD15,$A2571F6B,$46D1B546,$44A82D27,$6DC2976D,$70C59FF6,$BB888FBB,$8D6525CB, |
$3E8AFF3E,$963AADBA,$8AB0048A,$7C30985C,$EC7AA6EC,$607C389B,$7BD2FD7B,$A822E194, |
$BEE6A3BE,$034086D0,$65431565,$66FCC1CE,$FED08DFE,$B37D69E5,$AE1152AE,$2F323AA0, |
$137E4613,$56C2DD79,$1CCC321C,$31ADCD54,$F5D8B8F5,$DFF456D4,$8B64698B,$F9F3145B, |
$E4FB24E4,$764566A3,$E77293E7,$0CF507AA,$4AEA764A,$59775C03,$FA6ACCFA,$B89B46F9, |
$602D3960,$E8D962D5,$6270E362,$17AA8FDB,$66CAA266,$1C4CA0C7,$7A06907A,$2DE16D93, |
$C05A72C0,$2547C45F,$59943059,$0FB5817A,$8939B389,$0680F955,$08818208,$16395E38, |
$26FC8C26,$AC714FF2,$11239C11,$A9B13077,$3D03483D,$EC8ACCB3,$0B08350B,$6C893F31, |
$70DAC870,$C4ABDEA5,$2E7D0E2E,$BA4811CA,$31388B31,$F155BD97,$21CF7A21,$DD2701E7, |
$0ADC580A,$E94AB336,$4963C149,$23C73D0A,$7D35667D,$5CB72386,$9A47F59A,$5042242C, |
$5115B251,$198CDF42,$6E4B206E,$0A75FEFF,$D64A18D6,$FDA0BA3D,$1E91E81E,$CEDE205A, |
$AC4C88AC,$D041D7AE,$875FAA87,$E42C657F,$FF04E0FF,$36BEE5E2,$B5EE96B5,$6FC9B9E1, |
$671ECF67,$998F2CC0,$12AA2B12,$D301517E,$F2EB4EF2,$AEA218C1,$C207A8C2,$DA342951, |
$868BC786,$61EFE978,$3456A734,$7F701E8C,$04BA4104,$0BE62F1C,$DD422DDD,$9129850C, |
$25753B25,$D6C12EFB,$64977864,$E33F4DC9,$B66721B6,$1579D8E8,$E19508E1,$F860C5B8, |
$30ECE630,$74963190,$8C579F8C,$88A55A4E,$74608974,$CF4DF1B9,$81B83181,$10B9A76D, |
$33655133,$0E265099,$A51967A5,$43BB0591,$63A48E63,$926903DC,$50C1DF50,$9C4F5345, |
$72871272,$3BD833AB,$9CA06E9C,$A4D7E63E,$1D185F1D,$B46E4153,$55AFF355,$126AF05E, |
$AAAB13AA,$24D415BC,$B2DD60B2,$1E9FF7F4,$37DF1037,$05C07F85,$92C67792,$467B7A14, |
$F78562F7,$2087BBDA,$5CFA1C5C,$81902261,$A0774BA0,$CD9EA68A,$2246CD22,$A79760EE, |
$88EDDE88,$83437552,$201B1720,$58E48DE0,$B9D555B9,$7216C8C5,$95F58195,$372D3401, |
$AB7F7EAB,$A11799BB,$EE277CEE,$9F0FD595,$0FB2740F,$676F102D,$84D61D84,$9E9C0476, |
$CB5247CB,$49CEFB6E,$F162F9F1,$D41279C8,$D82C01D8,$1F0C2617,$547B9E54,$97A97C59, |
$39B90939,$E76CE3AF,$93121A93,$C3B8F613,$9EFDB49E,$5BA40B30,$B43AFBB4,$EA0A35E6, |
$F40CD5F4,$5A37DAD3,$DC9640DC,$14EA090B,$A922A4A9,$5E6474B5,$68ACBB68,$FEE03CED, |
$E3C8D2E3,$071328B6,$24A15624,$5302A2FC,$01D46D01,$85C38C07,$FBBEA1FB,$3D58CAFE, |
$6B250C6B,$84505DE4,$B154D7B1,$642F96FD,$19A21E19,$BF886E4F,$D417C2D4,$02D35733, |
$56264456,$68DA9157,$D5C3AFD5,$8710DB34,$8D83F28D,$0D66D649,$6978D669,$7B23B0EA, |
$85027085,$1B5F8871,$914FC091,$3CCB1B1D,$5D2E715D,$0453AE66,$294EF829,$CB1E5FDF, |
$D2F059D2,$F6469521,$40362E40,$B03DEF35,$529C0552,$633CBE4B,$B80138B8,$F7D544C2, |
$0389B703,$7AB06109,$00000000,$00000000,$A8F6C9A8,$DBA7F8B2,$41E24341,$35FE6332, |
$9D74039D,$21146A39,$9B93989B,$D581A82B,$D0AD83D0,$0935782F,$C3D3C5C3,$5FF7A556, |
$981A2F98,$AF31C922,$B7B34CB7,$90BA54EF,$4E50374E,$5291731F,$2DF4B92D,$C0F870C3, |
$5EA7C65E,$7EE3CF6F,$DA71DBDA,$E07FCB19,$289A9528,$4EDDD3D8,$3F5E923F,$13F921BD, |
$6C16FA6C,$F50613F1,$0DEFAE0D,$981CFD23,$FC8D57FC,$4C0E84EB,$E21CBFE2,$82D0A4B1, |
$E6A6FEE6,$89368BAD,$785B4A78,$D292809D,$F83716F8,$47E8ABF7,$056E2C05,$8E25A31B, |
$4F845A4F,$D752FF18,$CA862ACA,$CC0D7769,$3CD7253C,$694940B4,$C4E033C4,$2EA1EB43, |
$9F29D99F,$DE678737,$3BE4D33B,$181F0EA1,$710EA571,$416852A2,$386D6438,$62AF6FA8, |
$C18E1FC1,$A0844858,$C8DBF0C8,$337E9A67,$10F7F110,$2C72BC70,$CDB5DCCD,$BD5B397C, |
$16106A16,$D8E77E62,$BF32CEBF,$86830AD7,$426BF442,$4F4E023B,$EDAECBED,$E5BFB49C, |
$58405D58,$8A760D7D,$0E66190E,$E2AC9C2A,$77E93E77,$B5FD90B0,$4B3E1B4B,$DCB4D004, |
$2C20D42C,$453BFCC4,$57F22957,$ED191D50,$B080BAB0,$E1EC1AFA,$E9148AE9,$EE599B80, |
$7EBCD17E,$2607428F,$17C40717,$5D24F265,$82318682,$6A09C664,$48B7AC48,$A604B10D, |
$73537F73,$BE1BBFAC,$4DD9804D,$28211216,$5A1D875A,$7505E073,$D32434D3,$73851926, |
$7CE10B7C,$D974AF81,$DECB9ADE,$EB99E405,$B3090DB3,$9B5C7BF3,$3582CA35,$FAB3928B, |
$360B7D36,$8003F382,$EA9D3DEA,$94E9FA89,$2AC74F2A,$B1AE3ED6,$D9F86CD9,$9ACFAA10, |
$A690D0A6,$390B6498,$8FDE288F,$F2153B47,$0733F607,$71564E15,$7F68BC7F,$A3C4CE88, |
$AFC53FAF,$AAF1B6A7,$0C3BC30C,$1DDF7124,$8E0A458E,$77D6B740,$F33F23F3,$2B6194C6, |
$FD593AFD,$C9CD08EC,$97A85B97,$C85ED90F,$D179EED1,$8CF6F428,$806C5C80,$957A2B6A, |
$448C6F44,$BBDBC029,$D79E75D7,$7863363A,$DF1FF7DF,$6E5A6802,$5F73AB5F,$FB204368) |
); |
{$ELSE} // 64-bit or Big Endian |
Shark_CE: array[0..7, 0..255] of UInt64 = ( |
// box 0 |
($060D838F16F3A365,$A68857EE5CAE56F6,$EBF516353C2C4D89,$652174BE88E85BDC, |
$0D4E9A8086C17921,$27BA7D33CFFA58A1,$88D9E104A237B530,$693B8755A4FBE816, |
$DAC9591826B254A0,$45C2E369FB336AF3,$A96E1FB87B3E4EF4,$B7578F1435EB7EF0, |
$839AF80B32056F74,$AE37F55CC71F277A,$A4208538FDFF37D5,$35991E74AD3CDB6F, |
$BA191594B32A07D1,$5344D1772E572B7B,$E7EFE5DE103FFE43,$A3796FDC41DE5E5B, |
$2CF9643C5FC882E5,$FFDBF6FD48196D22,$33949DFBBBCF780A,$7D15679DD0CEC8BD, |
$5F5E229C024498B1,$1223634762C683CE,$DCC4DA973041F7C5,$0B43190F9032DA44, |
$C05598EDDFC5A6E2,$9E5FD31A7753F4B8,$9AFA8243C0F136FE,$CC4F6B06F3D61528, |
$DF38612A3BC25C0D,$43CF60E6EDC0C996,$CFB3D0BBF855BEE0,$96E071A8ECE28534, |
$21B7FEBCD909FBC4,$8ED4628BB4C41655,$30682646B04CD3C2,$B5FF5DC294BA1FD3, |
$75AAC52F4B7FB931,$E809AD8837AFE641,$0EB2213D8D42D2E9,$9852509561A057DD, |
$AA92A40570BDE53C,$7B18E412C63D6BD8,$A7DC3E85F67C9C1D,$D8618BCE87E33583, |
$E34AB487A79D3C05,$20E397D773DB312F,$05F138321D7008AD,$17D25B757FB68B63, |
$8A7133D20366D413,$0000000000000000,$EAA17F5E96FE8762,$C101F18675176C09, |
$BEBC44CD0488C597,$DB9D30738C609E4B,$ABC6CD6EDA6F2FD7,$5AAF1AAE1F34901C, |
$B00E65F089CA177E,$D47B7825ABF08649,$924520F15B404772,$1686321ED5644188, |
$618425E73F4A999A,$E21EDDEC0D4FF6EE,$D787C398A0732D81,$1F6DF9C7E407FAEF, |
$79B036C4676C0AFB,$0FE6485627901802,$9CF701CCD602959B,$BFE82DA6AE5A0F7C, |
$990639FECB729D36,$CA42E889E525B64D,$B3F2DE4D8249BCB6,$4033DB5BE643625E, |
$4167B2304C91A8B5,$108BB191C397E2ED,$1834132358269361,$541D3B93927642F5, |
$90EDF227FA112651,$1DC52B1145569BCC,$E6BB8CB5BAED34A8,$D276FBAABD03252C, |
$313C4F2D1A9E1929,$FD73242BE9480C01,$9BAEEB286A23FC15,$C9BE5334EEA61D85, |
$C70C720963E4CF6C,$3EDA077B3D0E012B,$97B418C346304FDF,$32C0F490111DB2E1, |
$2BA08ED8E3E9EB6B,$8B255AB9A9B41EF8,$91B99B4C50C3ECBA,$FE8F9F96E2CBA7C9, |
$3A7F56228AACC36D,$B15A0C9B2318DD95,$5953A11314B73BD4,$F3C10516640ADEE8, |
$EDF895BA2ADFEEEC,$ADCB4EE1CC9C8CB2,$DE6C0841911096E6,$84C312EF8E2406FA, |
$A83A76D3D1EC841F,$1C91427AEF845127,$3665A5C9A6BF70A7,$F6303D24797AD645, |
$CD1B026D5904DFC3,$1BC8A89E53A538A9,$7EE9DC20DB4D6375,$51EC03A18F064A58, |
$C4F0C9B4686764A4,$DD90B3FC9A933D2E,$7A4C8D796CEFA133,$73A746A05D8C1A54, |
$0759EAE4BC21698E,$C8EA3A5F4474D76E,$38D784F42BFDA24E,$231F2C6A78589AE7, |
$C3A92350D4460D2A,$72F32FCBF75ED0BF,$BD40FF700F0B6E5F,$157A89A3DEE7EA40, |
$873FA95285A7AD32,$4D7D41DB60821B7F,$1E3990AC4ED53004,$0A1770643AE010AF, |
$9311499AF1928D99,$64751DD5223A9137,$FA2ACECF5569658F,$7C410EF67A1C0256, |
$56B5E945332723D6,$6F3604DAB2084B73,$E95DC4E39D7D2CAA,$13770A2CC8144925, |
$BC14961BA5D9A4B4,$B9E5AE29B8A9AC19,$F169D7C0C55BBFCB,$2446C68EC479F369, |
$806643B63986C4BC,$7FBDB54B719FA99E,$04A55159B7A2C246,$EE042E07215C4524, |
$5BFB73C5B5E65AF7,$0C1AF3EB2C13B3CA,$A22D06B7EB0C94B0,$B8B1C742127B66F2, |
$285C3565E86A40A3,$3B2B3F49207E0986,$3C72D5AD9C5F6008,$770217F9EA2ED812, |
$FC274D40439AC6EA,$4FD5930DC1D37A5C,$2E51B6EAFE99E3C6,$6B93558305AA8935, |
$19607A48F2F4598A,$08BFA2B29BB1718C,$3F8E6E1097DCCBC0,$3983ED9F812F68A5, |
$AC9F278A664E4659,$82CE916098D7A59F,$C2FD4A3B7E94C7C1,$66DDCF03836BF014, |
$E1E2665106CC5D26,$74FEAC44E1AD73DA,$8D28D936BF47BD9D,$62789E5A34C93252, |
$81322ADD93540E57,$CB1681E24FF77CA6,$2512AFE56EAB3982,$D18A4017B6808EE4, |
$705BFD1D560FB19C,$4B70C2547671B81A,$49D81082D720D939,$E0B60F3AAC1E97CD, |
$4E81FA666B01B0B7,$951CCA15E7612EFC,$463E58D4F0B0C13B,$632CF7319E1BF8B9, |
$5CA2992109C73379,$F764544FD3A81CAE,$6AC73CE8AF7843DE,$9F0BBA71DD813E53, |
$85977B8424F6CC11,$5807C878BE65F13F,$686FEE3E0E2922FD,$78E45FAFCDBEC010, |
$6CCABF67B98BE0BB,$11DFD8FA69452806,$CEE7B9D05287740B,$50B86ACA25D480B3, |
$5DF6F04AA315F992,$5E0A4BF7A896525A,$03FCBBBD0B83ABC8,$8F800BE01E16DCBE, |
$D32292C117D1EFC7,$E5473708B16E9F60,$224B4501D28A500C,$FB7EA7A4FFBBAF64, |
$3D26BCC6368DAAE3,$866BC0392F7567D9,$3731CCA20C6DBA4C,$B603E67F9F39B41B, |
$A1D1BD0AE08F3F78,$D935E2A52D31FF68,$AF639C376DCDED91,$0154696BAAD2CAEB, |
$ECACFCD1800D2407,$F03DBEAB6F897520,$02A8D2D6A1516123,$F498EFF2D82BB766, |
$710F9476FCDD7B77,$F8821C19F43804AC,$F9D675725EEACE47,$1A9CC1F5F977F242, |
$5210B81C8485E190,$6D9ED60C13592A50,$F2956C7DCED81403,$BB4D7CFF19F8CD3A, |
$4C2928B0CA50D194,$6E626DB118DA8198,$E4135E631BBC558B,$9DA368A77CD05F70, |
$A574EC53572DFD3E,$09EBCBD93163BB67,$4A24AB3FDCA372F1,$429B098D4712037D, |
$57E1802E99F5E93D,$EF50476C8B8E8FCF,$A085D4614A5DF593,$34CD771F07EE1184, |
$C6581B62C9360587,$2DAD0D57F51A480E,$898D886F08E57FDB,$D6D3AAF30AA1E76A, |
$76567E9240FC12F9,$B4AB34A93E68D538,$B2A6B726289B765D,$8C7CB05D15957776, |
$554952F838A4881E,$D52F114E01224CA2,$60D04C8C95985371,$6789A66829B93AFF, |
$2F05DF81544B292D,$476A31BF5A620BD0,$F5CC869972F97D8D,$488C79E97DF213D2, |
$44968A0251E1A018,$26EE14586528924A,$D0DE297C1C52440F,$C5A4A0DFC2B5AE4F, |
$29085C0E42B88A48,$142EE0C8743520AB,$2AF4E7B3493B2180,$9448A37E4DB3E417), |
// box 1 |
($E2795BA105BA30CE,$65B5D634F5E0FBDD,$2D7D7F1464DD8C55,$EEFBF778ADD1C20B, |
$1EB0FBD1F11968E7,$E6073F45CE30CD8D,$21FFD3CDCCB67E90,$DF0941CFA750A262, |
$C61DF5B1B75EF18A,$C5C7DEFA9DC337C6,$2581B729073C83D3,$A5E97513167173CF, |
$DD3673BD381526B9,$E8BAA1EEF91EBB93,$3B314CF8F625EB34,$579D4BC8D5FC5DF8, |
$BB598EC2E7681B28,$C8A06B1A80708794,$1C8FC9A36E5CEC3C,$F60A5A3F0807D374, |
$1ACE9F353A9395A4,$7E9E50387AAB2CEE,$B5E41069D0466D36,$8CEA6EE3B92602D9, |
$F952DDAD8AF1E7FD,$B19A748D1BCC9075,$2464AE10B2E4C144,$FCC9A070F4A35829, |
$FA88F6E6A06C21B1,$2C98662DD105CEC2,$9065A740D77AEEE5,$CB7A4051AAED41D8, |
$55A279BA4AB9D923,$27BE855B98790708,$BABC97FB52B059BF,$A19711F7DDFB8E8C, |
$047E64E4CB8AFD43,$C386886CC90C4E5E,$C422C7C3281B7551,$FB6DEFDF15B46326, |
$01E51939B5D84297,$5CBBA8BE9C809432,$6F762C7B09447080,$CEE13D8CD4BFFE0C, |
$54476083FF619BB4,$6E933542BC9C3217,$4AF79B520E78F353,$98996F7DB49BE163, |
$A07208CE6823CC1B,$2B3C29823012F5CD,$93BF8C0BFDE728A9,$2225F886E62BB8DC, |
$7F7B4901CF736E79,$0000000000000000,$023F32729F4584DB,$D5CABB805BF4293F, |
$07A44FAFE1173B0F,$E95FB8D74CC6F904,$7B052DE504F9933A,$6AED51A67716CF54, |
$68D263D4E8534B8F,$A96BD9CABE1A810A,$1D6AD09ADB84AEAB,$0D67B5E01DB3B052, |
$52063615ABAEE22C,$8F3045A893BBC495,$D8AD0E604647996D,$AF2A8F5CEAD5F892, |
$3017AF8EBF5922FE,$4034611DF2DC780E,$721CFCE1D2C0DE2B,$28E602C91A8F3381, |
$E1A370EA2F27F682,$29031BF0AF577116,$1914B47E100E53E8,$567852F160241F6F, |
$793A1F979BBC17E1,$EF1EEE411809809C,$6211999B14F7C0D2,$059B7DDD7E52BFD4, |
$43EE4A56D841BE42,$F1AE1590E910E87B,$33CD84C595C4E4B2,$4B12826BBBA0B1C4, |
$EB608AA5D3837DDF,$201ACAF4796E3C07,$BF27EA262CE2E66B,$58C5CC5A570A6971, |
$37B3E0215E4E19F1,$AB54EBB8215F05D1,$8ED55C9126638602,$9AA65D0F2BDE65B8, |
$D7F589F2C4B1ADE4,$5039046734EB66F7,$6CAC073023D9B6CC,$51DC1D5E81332460, |
$17A92AD5272025F6,$47902EB213CB4301,$1B2B860C8F4BD733,$4F6CE68F702A4C87, |
$CF0424B56167BC9B,$997C76440143A3F4,$7AE034DCB121D1AD,$100D657AC6371EF9, |
$0AC3FA4FFCA48B5D,$DEEC58F61288E0F5,$265B9C622DA1459F,$DCD36A848DCD642E, |
$E4380D3751754956,$13D74E31ECAAD8B5,$FD2CB949417B1ABE,$9624F1D683B5977D, |
$4675378BA6130196,$0B26E376497CC9CA,$41D1782447043A99,$E39C4298B0627259, |
$CD3B16C7FE223840,$7787813CAC9261FF,$492DB01924E5351F,$5AFAFE28C84FEDAA, |
$8B4E214C583139D6,$CCDE0FFE4BFA7AD7,$76629805194A2368,$7CA1624AE5EEA835, |
$61CBB2D03E6A069E,$48C8A920913D7788,$8068C23A114DF01C,$D38BED160F3B50A7, |
$32289DFC201CA625,$C1B9BA1E5649CA85,$ED21DC33874C0447,$A3A8238542BE0A57, |
$5B1FE7117D97AF3D,$3D701A6EA2EA92AC,$73F9E5D867189CBC,$9ED839EBE05498FB, |
$5920D563E2D22BE6,$CA9F59681F35034F,$11E87C4373EF5C6E,$97C1E8EF366DD5EA, |
$ACF0A417C0483EDE,$D26EF42FBAE31230,$BCFDC16D067F2027,$BEC2F31F993AA4FC, |
$45AF1CC08C8EC7DA,$31F2B6B70A816069,$D9481759F39FDBFA,$E5DD140EE4AD0BC1, |
$A6335E583CECB583,$38EB67B3DCB82D78,$F5D07174229A1538,$5F6183F5B61D527E, |
$0F58879282F63489,$164C33EC92F86761,$444A05F93956854D,$818DDB03A495B28B, |
$4D53D4FDEF6FC85C,$8D0F77DA0CFE404E,$8416A6DEDAC70D5F,$666FFD7FDF7D3D91, |
$B63E3B22FADBAB7A,$F2743EDBC38D2E37,$A40C6C2AA3A93158,$9F3D20D2558CDA6C, |
$FEF692026BE6DCF2,$2EA7545F4E404A19,$B2405FC631515639,$23C0E1BF53F3FA4B, |
$83B2E9713BD03650,$0641569654CF7998,$B883A589CDF5DD64,$3AD455C143FDA9A3, |
$925A9532483F6A3E,$AAB1F28194874746,$F435684D974257AF,$D1B4DF64907ED47C, |
$390E7E8A69606FEF,$D051C65D25A696EB,$B4010950659E2FA1,$0C82ACD9A86BF2C5, |
$88940A0772ACFF9A,$F39127E276556CA0,$AECF96655F0DBA05,$03DA2B4B2A9DC64C, |
$3F4F281C3DAF1677,$3469CB6A74D3DFBD,$F04B0CA95CC8AAEC,$1F55E2E844C12A70, |
$4CB6CDC45AB78ACB,$C05CA327E3918812,$95FEDA9DA9285131,$B966BCB0782D9FF3, |
$A7D647618934F714,$D61090CB7169EF73,$71C6D7AAF85D1867,$ECC4C50A329446D0, |
$6450CF0D4038B94A,$420B536F6D99FCD5,$75B8B34E33D7E524,$C26391557CD40CC9, |
$DA923C12D9021DB6,$4E89FFB6C5F20E10,$0919D104D6394D11,$8AAB3875EDE97B41, |
$A88EC0F30BC2C39D,$B7DB221B4F03E9ED,$C7F8EC880286B31D,$2F424D66FB98088E, |
$E04669D39AFFB415,$3EAA3125887754E0,$5E849ACC03C510E9,$8257F0488E0874C7, |
$BD18D854B3A762B0,$B3A546FF848914AE,$9CE70B997F111C20,$3C9503571732D03B, |
$E7E2267C7BE88F1A,$63F480A2A12F8245,$602EABE98BB24409,$941BC3A41CF013A6, |
$678AE4466AA57F06,$1232570859729A22,$6D491E099601F45B,$5D5EB1872958D6A5, |
$1473019E0DBDE3BA,$A24D3ABCF76648C0,$85F3BFE76F1F4FC8,$08FCC83D63E10F86, |
$745DAA77860FA7B3,$9180BE7962A2AC72,$87CC8D95F05ACB13,$78DF06AE2E645576, |
$18F1AD47A5D6117F,$358CD253C10B9D2A,$0EBD9EAB372E761E,$F7EF4306BDDF91E3, |
$7023CE934D855AF0,$D42FA2B9EE2C6BA8,$3656F918EB965B66,$9D0212A0CAC95EB7, |
$2AD930BB85CAB75A,$862994AC45828984,$7D447B735036EAA2,$B07F6DB4AE14D2E2, |
$6B08489FC2CE8DC3,$9B4344369E06272F,$AD15BD2E75907C49,$DB77252B6CDA5F21, |
$EA85939C665B3F48,$C945722335A8C503,$159618A7B865A12D,$69377AED5D8B0918, |
$8971133EC774BD0D,$53E32F2C1E76A0BB,$F8B7C4943F29A56A,$FF138B3BDE3E9E65), |
// box 2 |
($7C6A2EB5FDABECC6,$401CDA0A752BBEA0,$1925217156DC57C4,$56DEC6D301D70787, |
$41C751FF73C6AC58,$C9067697A92CB5F9,$3391C917AAA0BC85,$AE0A9A4C0E742AFE, |
$AA8CA972162A62F4,$5AA193912935DF99,$86FD9135FE27E5BA,$FFCA074B1D3F538E, |
$0E3CB65D24CDFC1B,$4384B2E07FE9885D,$C73AC0CA8DE149E2,$48E5BC7645972EB4, |
$BE0D56B46EF9FFD6,$200E6D05C0EF5F50,$E1F17DEE597F7ABD,$0243E31F0C2F2405, |
$F4AB09DD2741F567,$E4ACC52547CC204F,$348F92C3B83CC272,$53837E181F645D75, |
$D8DA319ACF4C7229,$81E3CAE1ECBB9B4D,$D6E687C7EB818E32,$3DAD7F4A8E6D409E, |
$28F70B79F053CF44,$493E3783437A3C4C,$B27203F6461B27C8,$D02357E6FFF0E23D, |
$E8D390676F2EF851,$26CBBD24D49E335F,$EE1640467B5F945E,$4AA65F6949B80AB1, |
$B56C58225487593F,$4FFBE7A2570B5043,$0ABA85633C93B411,$78EC1D8BE5F5A4CC, |
$501B16F215A66B88,$271036D1D27321A7,$7FF2465FF769DA3B,$35541936BED1D08A, |
$B8C886957A8893D9,$2FE950ADE2CFB1B3,$F90FD76A094E3F81,$2DAAB3B2EEE095B6, |
$1ABD499B5C1E6139,$0C7F554228E2D81E,$425F391579049AA5,$C3BCF3F495BF01E8, |
$B4B7D3D7526A4BC7,$0000000000000000,$A0362C112AB9D6E5,$91E406198C364E65, |
$454162C16B98E452,$139FA4126A4FE3D5,$01DB8BF506ED12F8,$9A85088FB648E88C, |
$3AB3249E9CF13E69,$D57EEF2DE143B8CF,$B1EA6B1C4CD91135,$7AAFFE94E9DA80C9, |
$AD92F2A604B61C03,$A3AE44FB207BE018,$EB4BF88D65ECCEAC,$C0249B1E9F7D3715, |
$A8CF4A6D1A0546F1,$C6E14B3F8B0C5B1A,$CE182D43BBB0CB0E,$FC526FA117FD6573, |
$8C471456C2B451AB,$AC497953025B0EFB,$0486333E185E480A,$18FEAA845031453C, |
$A1EDA7E42C54C41D,$06C5D02114716C0F,$055DB8CB1EB35AF2,$E5774ED0412132B7, |
$36CC71DCB413E677,$470281DE67B7C057,$58E2708E251AFB9C,$A914C1981CE85409, |
$B3A9880340F63530,$638ADFE5BF06D70D,$0B610E963A7EA6E9,$927C6EF386F47898, |
$ED8E28AC719DA2A3,$7548C33CCBFA6E2A,$F3B5520935DD8B90,$8D9C9FA3C4594353, |
$31D22A08A68F9880,$0DA4DEB72E0FCAE6,$8FDF7CBCC8766756,$5DBFC8453BA9A16E, |
$8E04F749CE9B75AE,$83A029FEE094BF48,$A4B01F2F32E79EEF,$1C7899BA486F0D36, |
$654F0FC4AB77BB02,$7DB1A540FB46FE3E,$51C09D07134B7970,$CB459588A50391FC, |
$3FEE9C558242649B,$FE118CBE1BD24176,$76D0ABD6C13858D7,$5E27A0AF316B9793, |
$69305A868395631C,$3B68AF6B9A1C2C91,$6DB669B89BCB2B16,$A72877C53825A812, |
$D3BB3F0CF532D4C0,$6FF58AA797E40F13,$96FA5DCD9EAA3092,$2C713847E80D874E, |
$C57923D581CE6DE7,$2B6F6393FA91F9B9,$0922ED89365182EC,$324A42E2AC4DAE7D, |
$16C21CD974FCB927,$956235279468066F,$7B747561EF379231,$449AE9346D75F6AA, |
$F570822821ACE79F,$5939FB7B23F7E964,$7937967EE318B634,$84BE722AF208C1BF, |
$08F9667C30BC9014,$EFCDCBB37DB286A6,$A6F3FC303EC8BAEA,$EA9073786301DC54, |
$62515410B9EBC5F5,$D260B4F9F3DFC638,$9E033BB1AE16A086,$38F0C78190DE1A6C, |
$C267780193521310,$80384114EA5689B5,$9B5E837AB0A5FA74,$F73361372D83C39A, |
$3009A1FDA0628A78,$D4A564D8E7AEAA37,$FB4C347505611B84,$5B7A18642FD8CD61, |
$239605EFCA2D69AD,$F8D45C9F0FA32D79,$BB50EE7F704AA524,$392B4C7496330894, |
$0FE73DA82220EEE3,$3717FA29B2FEF48F,$F26ED9FC33309968,$D73D0C32ED6C9CCA, |
$DA99D285C363562C,$DE1FE1BBDB3D1E26,$738D131DDF8B0225,$292C808CF6BEDDBC, |
$BC4EB5AB62D6DBD3,$039868EA0AC236FD,$CC5BCE5CB79FEF0B,$B031E0E94A3403CD, |
$C4A2A82087237F1F,$B72FBB3D58A87D3A,$AFD111B908993806,$68EBD173857871E4, |
$9D9B535BA4D4967B,$E9081B9269C3EAA9,$71CEF002D3A42620,$93A7E50680196A60, |
$891AAC9DDC070B59,$155A74337E3E8FDA,$4E206C5751E642BB,$9721D6389847226A, |
$12442FE76CA2F12D,$2553D5CEDE5C05A2,$A275CF0E2696F2E0,$24885E3BD8B1175A, |
$670CECDBA7589F07,$749348C9CD177CD2,$64948431AD9AA9FA,$2AB4E866FC7CEB41, |
$E6EF263A4BE3044A,$E734ADCF4D0E16B2,$903F8DEC8ADB5C9D,$F02D3AE33F1FBD6D, |
$725698E8D96610DD,$1DA3124F4E821FCE,$1719972C7211ABDF,$11DC470D6660C7D0, |
$EC55A3597770B05B,$BFD6DD416814ED2E,$57054D26073A157F,$1E3B7AA544402933, |
$5FFC2B5A3786856B,$61C93CFAB329F308,$3E3517A084AF7663,$F6E8EAC22B6ED162, |
$1007CCF8608DD528,$66D7672EA1B58DFF,$8B594F82D0282F5C,$1FE0F15042AD3BCB, |
$4B7DD49C4F551849,$4C638F485DC966BE,$CFC3A6B6BD5DD9F6,$46D90A2B615AD2AF, |
$8565F9DFF4E5D347,$94B9BED292851497,$FA97BF80038C097C,$B9130D607C658121, |
$DC5C02A4D7123A23,$224D8E1ACCC07B55,$87261AC0F8CAF742,$D901BA6FC9A160D1, |
$AB57228710C7700C,$21D5E6F0C6024DA8,$98C6EB90BA67CC89,$827BA20BE679ADB0, |
$991D6065BC8ADE71,$5546AE390B15317A,$A56B94DA340A8C17,$071E5BD4129C7EF7, |
$E02AF61B5F926845,$6B73B9998FBA4719,$DFC46A4EDDD00CDE,$770B2023C7D54A2F, |
$7E29CDAAF184C8C3,$BA8B658A76A7B7DC,$9C40D8AEA2398483,$9FD8B044A8FBB27E, |
$DB425970C58E44D4,$E269150453BD4C40,$3C76F4BF88805266,$F1F6B11639F2AF95, |
$549D25CC0DF82382,$4DB804BD5B247446,$8A82C477D6C53DA4,$5258F5ED19894F8D, |
$6E2E015291091DEB,$C1FF10EB999025ED,$BD953E5E643BC92B,$C8DDFD62AFC1A701, |
$5C6443B03D44B396,$6C6DE24D9D2639EE,$1481FFC678D39D22,$D1F8DC13F91DF0C5, |
$CA9E1E7DA3EE8304,$DD878951D1FF28DB,$6012B70FB5C4E1F0,$1B66C26E5AF373C1, |
$E3B29EF155505EB8,$70157BF7D54934D8,$2E32DB58E422A34B,$6AA8326C895755E1, |
$B6F430C85E456FC2,$FD89E4541110778B,$88C12768DAEA19A1,$CD8045A9B172FDF3), |
// box 3 |
($99183E616655B742,$B2872032A50D6860,$0946F63B060528EF,$36612B9A141EF07D, |
$0634DA84DD49579B,$FC9C9E9B486C8A57,$A63FE3C0744E6FD0,$F1515758D8B46BF9, |
$3E82559FCD5197FF,$92E12D262BC40177,$C3BB433A5A7752C5,$21C3852A5183267A, |
$39130725CF528F09,$9BA7DB1D2DC12998,$C58F99BE873E055E,$D9D424498F32656C, |
$27F75FAE8CCA71E1,$59B91019A8FC3430,$CE768AF9CAAFB36B,$9D930199F0887E03, |
$63B07A7EF3706A8E,$B5167288A70E7096,$40CC1A28E967D22E,$4D01D3EB79BF3380, |
$9E896CDB6456AFB4,$2548BAD2C75EEF3B,$A79A6BFEAB0420BD,$9F2CE4E5BB1CE0D9, |
$32EA146282C3393C,$6D67DEFFF7765A97,$83775912B31080EB,$F5DA68A04E69A2B8, |
$1196743498D4819C,$0BF913474D91B635,$43D6776A7DB90399,$444725D07FBA1B6F, |
$6584A0FA2E393D15,$3F27DDA1121BD892,$F6C005E2DAB7730F,$56CB3CA673B04B44, |
$642128C4F1737278,$BF4AE9F135D589CE,$B038C54EEE99F6BA,$F47FE09E9123EDD5, |
$75B75CF069A7F3E4,$D419ED8A1FEA84C2,$73838674B4EEA47F,$498AEC13EF62FAC1, |
$20660D148EC96917,$A48006BC3FDAF10A,$2F1421AB55851663,$0A5C9B7992DBF958, |
$D1375A4C567D02EE,$0000000000000000,$C842507D17E6E4F0,$F3EEB2249320F523, |
$C9E7D843C8ACAB9D,$FF86F3D9DCB25BE0,$B4B3FAB678443FFB,$B19D4D7031D3B9D7, |
$79DF1D0D26355D27,$8EBA90D123C86145,$AA57A23D3BDCC113,$CB583D3F83383547, |
$D871AC7750782A01,$E162AB529F2AA508,$38B68F1B1018C064,$237C60561A17B8A0, |
$A31154063DD9E9FC,$713C6308FF7A3AA5,$1A6F6773D54537A9,$08E37E05D94F6782, |
$357B46D880C021CA,$6CC256C1283C15FA,$CFD302C715E5FC06,$BDF50C8D7E411714, |
$7CF1AACB6FA2DB0B,$5240035EE56D8205,$7B60F8716DA1C3FD,$01A5883EDF4A4F6D, |
$DD5F1BB119EFAC2D,$5474D9DA3824D59E,$0F722CBFDB4C7F74,$17A2AEB0459DD607, |
$37C4A3A4CB54BF10,$C21ECB04853D1DA8,$4273FF54A2F34CF4,$DACE490B1BECB4DB, |
$6AF68C45F5754261,$46F8C0AC342E85B5,$854383966E59D770,$81C8BC6EF8841E31, |
$3BACE25984C611D3,$1033FC0A479ECEF1,$1C5BBDF7080C6032,$7412D4CEB6EDBC89, |
$A8E8474170485FC9,$B8DBBB4B37D69138,$079152BA020318F6,$72260E4A6BA4EB12, |
$905EC85A60509FAD,$2DABC4D71E1188B9,$D092D27289374D83,$610F9F02B8E4F454, |
$02BFE57C4B949EDA,$95707F9C29C71981,$6FD83B83BCE2C44D,$5D322FE13E21FD71, |
$34DECEE65F8A6EA7,$CD6CE7BB5E7162DC,$FB0DCC214A6F92A1,$2EB1A9958ACF590E, |
$DCFA938FC6A5E340,$669ECDB8BAE7ECA2,$151D4BCC0E0948DD,$FD3916A59726C53A, |
$581C982777B67B5D,$1BCAEF4D0A0F78C4,$DFE0FECD527B32F7,$128C19760C0A502B, |
$84E60BA8B113981D,$3C3DB0E386C50925,$7FEBC789FB7C0ABC,$7D5422F5B0E89466, |
$D70380C88B345575,$BBC1D609A308408F,$E278C6100BF474BF,$5E2842A3AAFF2CC6, |
$6B53047B2A3F0D0C,$F7658DDC05FD3C62,$9A025323F28B66F5,$8C0575AD685CFF9F, |
$76AD31B2FD792253,$68496939BEE1DCBB,$7E4E4FB7243645D1,$E44C1C94D6BD2324, |
$BEEF61CFEA9FC6A3,$91FB4064BF1AD0C0,$052EB7C64997862C,$4A9081517BBC2B76, |
$8F1F18EFFC822E28,$3A096A675B8C5EBE,$EE1087ED4466DA7C,$2652D79053803E8C, |
$7099EB36203075C8,$C7307CC2CCAA9B84,$5C97A7DFE16BB21C,$50FFE622AEF91CDF, |
$8DA0FD93B716B0F2,$69ECE10761AB93D6,$31F07920161DE88B,$13299148D3401F46, |
$031A6D4294DED1B7,$CCC96F85813B2DB1,$14B8C3F2D14307B0,$8659EED4FA8706C7, |
$BA645E377C420FE2,$2920FB2F88CC41F8,$87FC66EA25CD49AA,$1EE4588B4398FEE8, |
$ECAF62910FF244A6,$F817A163DEB14316,$45E2ADEEA0F05402,$806D345027CE515C, |
$576EB498ACFA0429,$A5258E82E090BE67,$892BC26B21CB79B3,$6E7DB3BD63A88B20, |
$4E1BBEA9ED61E237,$ADC6F08739DFD9E5,$8B9427176A5FE769,$A1AEB17A764D7726, |
$4B35096FA4F6641B,$22D9E868C55DF7CD,$55D151E4E76E9AF3,$966A12DEBD19C836, |
$0DCDC9C390D8E1AE,$F24B3A1A4C6ABA4E,$24ED32EC1814A056,$AF7915FB724B473F, |
$2885731157860E95,$9C3689A72FC2316E,$475D4892EB64CAD8,$AC6378B9E6959688, |
$A00B3944A907384B,$C695F4FC13E0D4E9,$3055F11EC957A7E6,$6215F2402C3A25E3, |
$DE4576F38D317D9A,$9344A518F48E4E1A,$82D2D12C6C5ACF86,$EFB50FD39B2C9511, |
$E981D5574665C28A,$5F8DCA9D75B563AB,$B60C1FCA33D0A121,$FE237BE703F8148D, |
$D6A608F6547E1A18,$B97E3375E89CDE55,$D388BF301DE99C34,$5B06F565E368AAEA, |
$F0F4DF6607FE2494,$1607268E9AD7996A,$AEDC9DC5AD010852,$E0C7236C4060EA65, |
$EA9BB815D2BB133D,$888E4A55FE8136DE,$5AA37D5B3C22E587,$C104A64611E3CC1F, |
$515A6E1C71B353B2,$C42A118058744A33,$7708B98C22336D3E,$2A3A966D1C12904F, |
$8A31AF29B515A804,$ED0AEAAFD0B80BCB,$2C0E4CE9C15BC7D4,$0C6841FD4F92AEC3, |
$98BDB65FB91FF82F,$1F41D0B59CD2B185,$B322A80C7A47270D,$E6F3F9E89D29BDFE, |
$7AC5704FB2EB8C90,$A94DCF7FAF0210A4,$787A9533F97F124A,$DB6BC135C4A6FBB6, |
$048B3FF896DDC941,$E8245D69992F8DE7,$E3DD4E2ED4BE3BD2,$CAFDB5015C727A2A, |
$B7A997F4EC9AEE4C,$E75671D64263F293,$2B9F1E53C358DF22,$18D0820F9ED1A973, |
$ABF22A03E4968E7E,$A2B4DC38E293A691,$673B458665ADA3CF,$F9B2295D01FB0C7B, |
$D22D370EC2A3D359,$97CF9AE06253875B,$0ED7A48104063019,$482F642D3028B5AC, |
$C0A12E78CEA98372,$4FBE3697322BAD5A,$19750A31419BE61E,$41699216362D9D43, |
$D5BC65B4C0A0CBAF,$E5E994AA09F76C49,$EB3E302B0DF15C50,$94D5F7A2F68D56EC, |
$53E58B603A27CD68,$3D9838DD598F4648,$60AA173C67AEBB39,$1DFE35C9D7462F5F, |
$4CA45BD5A6F57CED,$BC5084B3A10B5879,$FAA8441F9525DDCC,$334F9C5C5D897651), |
// box 4 |
($DA1687A883ADF27E,$E35C9378578D9F22,$303CA4531637FA40,$A088321F74B20375, |
$C9863F3A9ACB95E9,$5FCF47C57D0B0ED4,$4AA211E4E1280B4B,$E1A4C9BA871D1289, |
$4926664759F03A4F,$ADFB36EDE3707BCA,$CF7BD1891F8EF7E1,$9735559E8F882792, |
$5932A976F84E6CDC,$9DC792BEF547818A,$06FDEEB385456208,$46AD38771EA2CF5B, |
$5EB36AA41543B27B,$8B2EB33CD1BCB511,$71105FF6E598EBBC,$5441AD846F8C1463, |
$4C5FFF57646D6943,$F3485C49F633C9B1,$9CBBBFDF9D0F3D25,$22D031A067192178, |
$CA0248992213A4ED,$19627FB263A9C18F,$9330E1EFDA5DC831,$1390B89219666797, |
$2EDF18339893E568,$6C779435D3E4C590,$53C06E568281CAC4,$6FF3E3966B3CF494, |
$FE3B58BB61F1B10E,$77EDB14560DD89B4,$02F85AC2D0908DAB,$12EC95F3712EDB38, |
$85D9C06DFEA6FCAA,$90B4964C6285F935,$F1B0068B26A3441A,$729428555D40DAB8, |
$5C4B3066C5D33FD0,$5D371D07AD9B837F,$A48D866E2167ECD6,$B661139D504937EE, |
$A27068DDA4228EDE,$F8C6B608E4B4D306,$6BF657E73EE91B37,$AC871B8C8B38C765, |
$4EA7A595B4FDE4E8,$0D7304F297C278BF,$B71D3EFC38018B41,$AE7F414E5BA84ACE, |
$AF036C2F33E0F661,$0000000000000000,$B89660CC7F537E55,$A675DCACF1F7617D, |
$610490C74426BD2F,$C18CA2D83094BE5A,$2ADAAC42CD460ACB,$7D1F76651A122FAC, |
$C58916A9654151F9,$EDABE0297897D699,$2D5B6F90204BD46C,$26D585D132CCCEDB, |
$9F3FC87C25D70C21,$C60D610ADD9960FD,$80A0597DC33BAFA6,$D0E44088F9625466, |
$1D67CBC3367C2E2C,$2C2742F1480368C3,$89D6E9FE012C38BA,$E9AE54582D42393A, |
$3ECBD702392DB3FB,$B5E5643EE89106EA,$A882AFFDDEED28C6,$1AE60811DB71F08B, |
$924CCC8EB215749E,$FCC30279B1613CA5,$825803BF13AB220D,$D992F00B3B75C37A, |
$C8FA125BF2832946,$35453D432BAAA94C,$F9BA9B698CFC6FA9,$37BD6781FB3A24E7, |
$791AC2144FC7C00F,$16E9218224FB349B,$DB6AAAC9EBE54ED1,$D8EEDD6A533D7FD5, |
$7C635B04725A9303,$553D80E507C4A8CC,$9A46516C184A5F2D,$14117B40F46BB930, |
$1EE3BC608EA41F28,$27A9A8B05A847274,$4050D6C49BE7AD53,$7BE298D69F574DA4, |
$6A8A7A8656A1A798,$4D23D2360C25D5EC,$1014CF31A1BE5693,$B264A7EC059CD84D, |
$EA2A23FB959A083E,$F0CC2BEA4EEBF8B5,$76919C240895351B,$0B8EEA4112871AB7, |
$47D1151676EA73F4,$BDEFF9DC42CE2D59,$2BA68123A50EB664,$057999103D9D530C, |
$E759270902587081,$EF53BAEBA8075B32,$4FDB88F4DCB55847,$6E8FCEF70374483B, |
$1168E250C9F6EA3C,$1B9A2570B3394C24,$706C72978DD05713,$865DB7CE467ECDAE, |
$52BC4337EAC9766B,$504419F53A59FBC0,$8F2B074D84695AB2,$6078BDA62C6E0180, |
$43D4A167233F9C57,$0EF773512F1A49BB,$0C0F2993FF8AC410,$4BDE3C858960B7E4, |
$66855315A92B6388,$D360372B41BA6562,$584E84179006D073,$9B3A7C0D7002E382, |
$A5F1AB0F492F5079,$2822F6801DD68760,$445562B5CE3242F0,$AA7AF53F0E7DA56D, |
$3C338DC0E9BD3E50,$3BB24E1204B0E0F7,$D59DD998C4FF076A,$91C8BB2D0ACD459A, |
$84A5ED0C96EE4005,$33B8D3F0AEEFCB44,$57C5DA27D7542567,$32C4FE91C6A777EB, |
$3439102243E215E3,$C7714C6BB5D1DC52,$3FB7FA6351650F54,$87219AAF2E367101, |
$F5B5B2FA7376ABB9,$412CFBA5F3AF11FC,$DCEB691B06E89076,$BB12176FC78B4F51, |
$73E8053435086617,$E220BE193FC5238D,$B09CFD2ED50C55E6,$B9EA4DAD171BC2FA, |
$9E43E51D4D9FB08E,$36C14AE093729848,$A9FE829CB6A59469,$0405B47155D5EFA3, |
$0AF2C7207ACFA618,$7E9B01C6A2CA1EA8,$DD97447A6EA02CD9,$0781C3D2ED0DDEA7, |
$7866EF75278F7CA0,$D1986DE9912AE8C9,$CB7E65F84A5B1842,$CD838B4BCF1E7A4A, |
$AB06D85E663519C2,$D4E1F4F9ACB7BBC5,$FDBF2F18D929800A,$F23471289E7B751E, |
$BC93D4BD2A8691F6,$3D4FA0A181F582FF,$BA6E3A0EAFC3F3FE,$5AB6DED540965DD8, |
$EB560E9AFDD2B491,$0976B083C217971C,$ECD7CD4810DF6A36,$23AC1CC10F519DD7, |
$BE6B8E7FFA161C5D,$7FE72CA7CA82A207,$C0F08FB958DC02F5,$7A9EB5B7F71FF10B, |
$A709F1CD99BFDDD2,$8DD35D8F54F9D719,$8CAF70EE3CB16BB6,$E4DD50AABA804185, |
$83242EDE7BE39EA2,$98BE0BAEC8DAD286,$690E0D25EE79969C,$95CD0F5C5F18AA39, |
$56B9F746BF1C99C8,$7469C6E6D805B8B0,$8A529E5DB9F409BE,$E6250A686A10CC2E, |
$2FA33552F0DB59C7,$42A88C064B7720F8,$6D0BB954BBAC793F,$181E52D30BE17D20, |
$BF17A31E925EA0F2,$94B1223D37501696,$E8D27939450A8595,$CCFFA62AA756C6E5, |
$383639B1BC68D1F3,$EE2F978AC04FE79D,$A30C45BCCC6A3271,$1F9F9101E6ECA387, |
$B1E0D04FBD44E949,$242DDF13E25C4370,$156D56219C23059F,$88AAC49F69648415, |
$6280E764FCFE8C2B,$DF6F1EB8BE30A172,$E5A17DCBD2C8FD2A,$E0D8E4DBEF55AE26, |
$63FCCA0594B63084,$A1F41F7E1CFABFDA,$295EDBE1759E3BCF,$67F97E74C163DF27, |
$038477A3B8D83104,$DE1333D9D6781DDD,$3ACE63736CF85C58,$D619AE3B7C27366E, |
$5BCAF3B428DEE177,$B3188A8D6DD464E2,$1C1BE6A25E349283,$017C2D616848BCAF, |
$8E572A2CEC21E61D,$F631C559CBAE9ABD,$81DC741CAB731309,$FF4775DA09B90DA1, |
$B499495F80D9BA45,$0F8B5E304752F514,$394A14D0D4206D5C,$CE07FCE877C64B4E, |
$F4C99F9B1B3E1716,$C4F53BC80D09ED56,$C208D57B884C8F5E,$080A9DE2AA5F2BB3, |
$314089327E7F46EF,$FA3EECCA34245EAD,$20286B62B789ACD3,$7515EB87B04D041F, |
$513834945211476F,$650124B611F3528C,$17950CE34CB38834,$45294FD4A67AFE5F, |
$21544603DFC1107C,$485A4B2631B886E0,$6872204486312A33,$647D09D779BBEE23, |
$2551F2728A14FFDF,$D765835A146F8AC1,$D21C1A4A29F2D9CD,$99C226CFA0926E29, |
$FB42C1AB5C6CE202,$C374F81AE00433F1,$964978FFE7C09B3D,$F74DE838A3E62612), |
// box 5 |
($74B87B36B0592C6A,$3D82D75DFFB4B81C,$8884246715267825,$DAF2D8A77ED4E5DE, |
$FEB118650E53F9C7,$BD2D1AEA59226B06,$26CE87F6DBABB191,$32772ECBEB66BD0A, |
$D4BBF82BC5104C8C,$055357720C4E03A1,$EF5BE62A32D0F6FD,$BE1C84C45D186ACA, |
$ACC7E4A565A1643C,$8DD7731519687B84,$11EAFE4F3C830F3A,$04EF8E68A358AFE5, |
$40AD9CA1534B930D,$E44191D4855A5C0E,$6001D20B809420F1,$73666B70173B8243, |
$372479B9E728BEAB,$45FECBD35F0590AC,$7057F55E1301838F,$FF0DC17FA1455583, |
$0CC467B810E804DA,$B9C29482FA7AC4E3,$A003831D754960E6,$8A096353BE0AD5AD, |
$DD2CC8E1D9B64BF7,$C7DC415052BFEE3E,$9F0C137421D17572,$35A93E8D4C041323, |
$9A5F44062D9F76D3,$71EB2C44BC172FCB,$0FF5F99614D20516,$7789E518B4632DA6, |
$C99561DCE97B476C,$5276FCC06BF29DFB,$4A0B32454BD795BA,$9274ADD69E2FDDEC, |
$4F5865374799961B,$B2D8E37C4DF06E10,$C4EDDF7E5685EFF2,$B3643A66E2E6C254, |
$D50721316A06E0C8,$8BB5BA49111C79E9,$2BB639546455190F,$F8D3D1390627FBAA, |
$38D1802FF3FABBBD,$DFA18FD5729AE67F,$4EE4BC2DE88F3A5F,$F72628AF12F5FEBC, |
$0AA6AEE4189C06B7,$0000000000000000,$9EB0CA6E8EC7D936,$CB1826E84257EAE4, |
$187DCE8520250841,$C28F16225EF1ED9F,$C333CF38F1E741DB,$4220DB95F8673E85, |
$DC9011FB76A0E7B3,$105627559395A37E,$2F59B73CC70DB6EA,$E112C6A689145FAF, |
$82228A830DBA7E92,$2EE56E26681B1AAE,$2A0AE04ECB43B54B,$47738CE7F4293D24, |
$A7DD935BD22BCECF,$D2D93177CD644EE1,$EBB4684291885918,$0E49208CBBC4A952, |
$A550D46F79076347,$411145BBFC5D3F49,$E6CCD6E02E76F186,$4BB7EB5FE4C139FE, |
$5D8305567F2098ED,$95AABD90394D73C5,$25FF19D8DF91B05D,$86CD04EBAEE2D177, |
$03319E2E043A01CC,$6B1BA5F5371E8A02,$76353C021B7581E2,$64EE5C6323CC8F14, |
$5C3FDC4CD03634A9,$6996E2C19C32278A,$8938FD7DBA30D461,$7B4D82A0A48B297C, |
$BFA05DDEF20EC68E,$8EE6ED3B1D527A48,$61BD0B112F828CB5,$66631B5788E0229C, |
$55A8EC86CC9033D2,$1C9240ED837DA7A4,$150570279FDBA0DF,$53CA25DAC4E431BF, |
$D636BF1F6E3CE104,$CAA4FFF2ED4146A0,$787C1C8EA0B128B0,$AD7B3DBFCAB7C878, |
$FC3C5F51A57F544F,$B78BB40E41BE6DB1,$8C6BAA0FB67ED7C0,$CE4B719A4E19E945, |
$F96F0823A93157EE,$7D2F4BFCACFF2B11,$3EB34973FB8EB9D0,$E39F81922238F227, |
$239DD084D7E5B230,$1FA3DEC38747A668,$C5510664F99343B6,$C829B8C6466DEB28, |
$85FC9AC5AAD8D0BB,$B6376D14EEA8C1F5,$9D8154408AFDD8FA,$3BE01E01F7C0BA71, |
$628C953F2BB88D79,$6D796CA93F6A886F,$FA5E960DAD0B5622,$E5FD48CE2A4CF04A, |
$E7700FFA81605DC2,$2DD4F0086C211B62,$2221099E78F31E74,$DB4E01BDD1C2499A, |
$F417B68116CFFF70,$B506F33AEA92C039,$514762EE6FC89C37,$9C3D8D5A25EB74BE, |
$396D59355CEC17F9,$CCC636AEE53544CD,$0B1A77FEB78AAAF3,$E9392F763AA4F490, |
$AAA52DF96DD56651,$46CF55FD5B3F9160,$A4EC0D75D611CF03,$AFF67A8B619B65F0, |
$3415E797E312BF67,$7AF15BBA0B9D8538,$811314AD09807F5E,$8771DDF101F47D33, |
$969B23BE3D777209,$D365E86D6272E2A5,$58D05224736E9B4C,$C660984AFDA9427A, |
$5414359C63869F96,$E885F66C95B258D4,$655285798CDA2350,$6CC5B5B3907C242B, |
$6FF42B9D944625E7,$C0025116F5DD4017,$A28EC429DE65CD6E,$63304C2584AE213D, |
$7FA20CC807D38699,$996EDA2829A5771F,$1B4C50AB241F098D,$1E1F07D928510A2C, |
$33CBF7D14470114E,$B055A448E6DCC398,$98D2033286B3DB5B,$EC6A780436EAF731, |
$A1BF5A07DA5FCCA2,$BAF30AACFE40C52F,$F144E1F31A81FCD1,$E0AE1FBC2602F3EB, |
$14B9A93D30CD0C9B,$596C8B3EDC783708,$682A3BDB33248BCE,$B87E4D98556C68A7, |
$80AFCDB7A696D31A,$5725ABB267BC9E5A,$914533F89A15DC20,$5EB29B787B1A9921, |
$01BCD91AAF16AC44,$C1BE880C5ACBEC53,$EDD6A11E99FC5B75,$028D4734AB2CAD88, |
$8F5A3421B244D60C,$4DD52203ECB53B93,$3F0F906954981594,$AE4AA391CE8DC9B4, |
$3698A0A3483E12EF,$F5AB6F9BB9D95334,$082BE9D0B3B0AB3F,$D1E8AF59C95E4F2D, |
$D87F9F93D5F84856,$6E48F2873B5089A3,$2443C0C270871C19,$B1E97D5249CA6FDC, |
$7C9392E603E98755,$839E5399A2ACD2D6,$19C1179F8F33A405,$DE1D56CFDD8C4A3B, |
$20AC4EAAD3DFB3FC,$1AF089B18B09A5C9,$3A5CC71B58D61635,$444212C9F0133CE8, |
$72DAB26AB82D2E07,$4C69FB1943A397D7,$F3C9A6C7B1AD5159,$1D2E99F72C6B0BE0, |
$B4BA2A2045846C7D,$E22358888D2E5E63,$2887A77A606F18C3,$A8286ACDC6F9CBD9, |
$5F0E4262D40C3565,$EEE73F309DC65AB9,$9BE39D1C8289DA97,$1634EE099BE1A113, |
$EA08B1583E9EF55C,$9727FAA49261DE4D,$2C682912C337B726,$CFF7A880E10F4501, |
$1788371334F70D57,$27725EEC74BD1DD5,$3146B0E5EF5CBCC6,$099730CA1CA6077B, |
$F2757FDD1EBBFD1D,$6AA77CEF98082646,$BB4FD3B65156696B,$569972A8C8AA321E, |
$A3321D337173612A,$50FBBBF4C0DE3073,$5A5D1510D84236C4,$FD80864B0A69F80B, |
$07DE1046A762AE29,$A6614A417D3D628B,$D78A6605C12A4D40,$67DFC24D27F68ED8, |
$BC91C3F0F634C742,$D05476436648E369,$493AAC6B4FED9476,$12DB606138B90EF6, |
$A994B3D769EF679D,$211097B07CC91FB8,$30FA69FF404A1082,$3C3E0E4750A21458, |
$7504A22C1F4F802E,$844043DF05CE7CFF,$F0F838E9B5975095,$7E1ED5D2A8C52ADD, |
$90F9EAE235037064,$0662C95C0874026D,$9416648A965BDF81,$F69AF1B5BDE352F8, |
$0D78BEA2BFFEA89E,$293B7E60CF79B487,$D9C346897AEEE412,$FBE24F17021DFA66, |
$1367B97B97AFA2B2,$AB19F4E3C2C3CA15,$48867571E0FB3832,$93C874CC313971A8, |
$79C0C5940FA784F4,$CD7AEFB44A23E889,$439C028F577192C1,$5BE1CC0A77549A80), |
// box 6 |
($714D28D778656928,$C88A7C6B84F64F7C,$EC43CAC5AB89AACA,$777FA38110DC16A3, |
$0F7D5C87E4213B5C,$73F051E5F3A1EF51,$EA714193C330D541,$95E5F3DAE016C4F3, |
$63D3738095A0E173,$9825D66F8FF379D6,$E8CC38A148F45338,$A840B0C025F06BB0, |
$944135C35F748735,$74661CAA247AD31C,$E7B16426ACD56864,$D1E689DF6E6F0589, |
$A73DEC47C1D150EC,$64453ECF427BDD3E,$0ED99A9E5B43789A,$7B1B402DC05BE840, |
$0DC025B56FE5BD25,$3F183A284E22293A,$A0ABA108160A6CA1,$46BE033705BD4703, |
$86DF6E94B2B10F6E,$A216D83A9DCEEAD8,$129E5B57EDC5885B,$7E3074509C445274, |
$7D29CB7BA8E297CB,$1611A9330EB871A9,$486799A95EFE3F99,$9FB39B205828459B, |
$D0424FC6D10D464F,$E968FEB8F79610FE,$5D6F8FB164E08B8F,$AAFDC9F2AE34EDC9, |
$02BD79328BC48679,$9B3C6944BB55BC69,$6277B5992AC2A2B5,$877BA88D0DD34CA8, |
$FA5263F6A531DB63,$2E9FDE54974164DE,$CDA14816D8E9F548,$675C81E476DD1881, |
$2A102C30743C9D2C,$37F32BE07DD82E2B,$256D70B7901DA670,$4CE86BCDBD83C66B, |
$50AFAA040B0536AA,$EF5A75EE9F2F6F75,$B3913C4644ADA73C,$1187E47CD9634DE4, |
$C54A59DEEB13F259,$0000000000000000,$01A4C619BF6243C6,$90CEC7A7BC097EC7, |
$F94BDCDD91971EDC,$8E347F5C814B087F,$C7F720EC60D77420,$354E52D2F61CA852, |
$34EA94CB497EEB94,$AE723B964D49143B,$F48BF968FE72A3F9,$FC60E8A0CD88A4E8, |
$2909931B409A5893,$BD48A6D81FEEDFA6,$6CAE2F077181DA2F,$AD6B84BD79EFD184, |
$18C833AD55FB0933,$204644CACC021C44,$392AB17E269B56B1,$14ACD001857CF7D0, |
$8ABB8D386236F18D,$EEFEB3F7204D2CB3,$F636805A75B62580,$2BB4EA29CB5EDEEA, |
$C653E6F5DFB537E6,$8D2DC077B5EDCDC0,$31C1A0B6156151A0,$F8EF1AC42EF55D1A, |
$DBB0E125D65184E1,$82509CF051CCF69C,$E33E96424FA89196,$DF3F1341352C7D13, |
$8F90B9453E294BB9,$1023226566010E22,$A58095754A15D695,$2C22A7661C85E2A7, |
$E183EF70C46C17EF,$AFD6FD8FF22B57FD,$471AC52EBADF04C5,$4D4CADD402E185AD, |
$916A01BE036B3D01,$28AD5502FFF81B55,$3657EDF9C2BA6DED,$D2FF36F45AC9C036, |
$F1A0CD15A26D19CD,$D90D98175D950298,$F7924643CAD46646,$DD826A73BEE8FB6A, |
$9D0EE212D3ECC3E2,$B6BA083B18B21D08,$3DA5431AC5E6AF43,$08EB11C833FA0711, |
$052B347D5C1FBA34,$6FB7902C45271F90,$133A9D4E52A7CB9D,$6E135635FA455C56, |
$725497FC4CC3AC97,$F31DB42729A99FB4,$846217A639758917,$4B7E26826A58FA26, |
$235FFBE1F8A4D9FB,$FF79578BF92E6157,$DA14273C6933C727,$8B1F4B21DD54B24B, |
$9CAA240B6C8E8024,$C1C5ABBA086E0BAB,$DE9BD5588A4E3ED5,$2D86617FA3E7A161, |
$BFF5DFEA942A59DF,$66F847FDC9BF5B47,$3B97C84CAD5FD0C8,$3EBCFC31F1406AFC, |
$CA3705590F32C905,$24C9B6AE2F7FE5B6,$408C88616D043888,$93D7788C88AFBB78, |
$196CF5B4EA994AF5,$9A98AF5D0437FFAF,$8C89066E0A8F8E06,$AB590FEB1156AE0F, |
$D7D4028906D67A02,$E4A8DB0D9873ADDB,$C378D28883AA8DD2,$4FF1D4E6892503D4, |
$D670C490B9B439C4,$65E1F8D6FD199EF8,$F2B9723E96CBDC72,$B12C4574CF692145, |
$569D215263BC4921,$69851B7A2D9E601B,$5E76309A50464E30,$5FD2F683EF240DF6, |
$D8A95E0EE2F7415E,$E29A505BF0CAD250,$96FC4CF1D4B0014C,$8806F40AE9F277F4, |
$53B6152F3FA3F315,$1C47C1C9B686F0C1,$80EDE5C2DA0870E5,$D5697BBB8D12FC7B, |
$FDC42EB972EAE72E,$0BF2AEE3075CC2AE,$22FB3DF847C69A3D,$BADEEB97C835E3EB, |
$DC26AC6A018AB8AC,$BCEC60C1A08C9C60,$4231F153E6C0BEF1,$337CD9849EA5D7D9, |
$5B5D04E70C59F404,$79A6391F4B9F6E39,$5212D33680C1B0D3,$B5A3B7102C14D8B7, |
$7F94B249232611B2,$17B56F2AB1DA326F,$59E07DD5879D727D,$EBD5878A7C529687, |
$BB7A2D8E7757A02D,$0319BF2B34A6C5BF,$5CCB49A8DB82C849,$1DE307D009E4B307, |
$49C35FB0E19C7C5F,$55849E79571A8C9E,$7ABF86347F39AB86,$9273BE9537CDF8BE, |
$E615A23F13B72BA2,$6821DD6392FC23DD,$5AF9C2FEB33BB7C2,$06328B5668B97F8B, |
$44037A058E79C17A,$83F45AE9EEAEB55A,$5739E74BDCDE0AE7,$FBF6A5EF1A5398A5, |
$E50C1D142711EE1D,$1A754A9FDE3F8F4A,$7802FF06F4FD2DFF,$F52F3F714110E03F, |
$2674CF9CA4BB63CF,$60CACCABA10624CC,$B088836D700B6283,$A6992A5E7EB3132A, |
$A9E476D99A922876,$6B386248A65AE662,$C2DC14913CC8CE14,$76DB6598AFBE5565, |
$32D81F9D21C7941F,$21E282D373605F82,$C0616DA3B70C486D,$616E0AB21E64670A, |
$6D0AE91ECEE399E9,$27D009851BD92009,$FEDD9192464C2291,$45A7BC1C311B82BC, |
$54205860E878CF58,$A10F6711A9682F67,$9981107630913A10,$EDE70CDC14EBE90C, |
$70E9EECEC7072AEE,$1F5E7EE28220357E,$2F3B184D28232718,$41284E78D2667B4E, |
$A424536CF5779553,$A3B21E2322ACA91E,$4E5512FF36474012,$1EFAB8FB3D4276B8, |
$89A2321356903432,$CB93C340B0508AC3,$306566AFAA031266,$4ADAE09BD53AB9E0, |
$C92EBA723B940CBA,$094FD7D18C9844D7,$CC058E0F678BB68E,$D4CDBDA23270BFBD, |
$0A5668FAB83E8168,$510B6C1DB467756C,$B86392A543F16592,$048FF264E37DF9F2, |
$3A330E55123D930E,$B235FA5FFBCFE4FA,$B9C754BCFC932654,$3C0185037A84EC85, |
$0C64E3ACD087FEE3,$E02729697B0E5429,$07964D4FD7DB3C4D,$814923DB656A3323, |
$388E776799F91577,$6A9CA4511938A5A4,$1BD18C86615DCC8C,$B407710993769B71, |
$150816183A1EB416,$4395374A59A2FD37,$C4EE9FC75471B19F,$5844BBCC38FF31BB, |
$CF1C3124532D7331,$B71ECE22A7D05ECE,$ACCF42A4C68D9242,$97588AE86BD2428A, |
$75C2DAB39B1890DA,$9E175D39E74A065D,$F0040B0C1D0F5A0B,$CEB8F73DEC4F30F7, |
$BE5119F32B481A19,$D35BF0EDE5AB83F0,$7C8D0D621780D40D,$85C6D1BF8617CAD1), |
// box 7 |
($B1C742127B66F2A4,$CE916098D7A59FC1,$C312EF8E2406FA70,$956C7DCED81403D5, |
$5A0C9B2318DD9520,$AD0D57F51A480E8B,$E7B9D05287740B01,$0217F9EA2ED81268, |
$4D7CFF19F8CD3A06,$44D1772E572B7B67,$FB73C5B5E65AF72E,$91427AEF84512705, |
$0C720963E4CF6C85,$87C398A0732D8117,$A17F5E96FE87620E,$50476C8B8E8FCF1D, |
$CB4EE1CC9C8CB225,$67B2304C91A8B59A,$54696BAAD2CAEBCD,$DDCF03836BF01437, |
$46C68EC479F3690F,$8F9F96E2CBA7C942,$E1802E99F5E93DB9,$4E9A8086C179215A, |
$F0C9B4686764A427,$FD4A3B7E94C7C196,$FCBBBD0B83ABC8A2,$EBCBD93163BB6784, |
$F9643C5FC882E546,$C4DA973041F7C5FC,$1AF3EB2C13B3CA97,$6E1FB87B3E4EF4FB, |
$5E229C024498B1F0,$F516353C2C4D89C3,$CC869972F97D8DA9,$8D886F08E57FDB2A, |
$1CCA15E7612EFC2F,$567E9240FC12F9A5,$43190F9032DA44EB,$FEAC44E1AD73DACA, |
$07C878BE65F13F8C,$618BCE87E3358322,$F895BA2ADFEEEC72,$751DD5223A913758, |
$59EAE4BC21698E7C,$FF5DC294BA1FD3FE,$03E67F9F39B41B5C,$2292C117D1EFC7C9, |
$8A4017B6808EE4A6,$D1BD0AE08F3F78B2,$135E631BBC558BF6,$EE14586528924A60, |
$8857EE5CAE56F6CE,$0000000000000000,$0E65F089CA177EED,$34132358269361DB, |
$15679DD0CEC8BD4E,$800BE01E16DCBE9B,$949DFBBBCF780AE1,$E397D773DB312FD1, |
$EDF227FA1126513C,$B5E945332723D674,$53A11314B73BD441,$23634762C683CEFD, |
$4B4501D28A500CBE,$473708B16E9F603B,$1770643AE010AF26,$A746A05D8C1A54B6, |
$90B3FC9A933D2E31,$35E2A52D31FF68EF,$AB34A93E68D53833,$D81082D720D939D3, |
$B86ACA25D480B3C5,$DFD8FA694528065F,$4F6B06F3D615286E,$578F1435EB7EF091, |
$9AF80B32056F740C,$92A40570BDE53C59,$DBF6FD48196D228F,$1B026D5904DFC3A3, |
$3C4F2D1A9E19298E,$C8A89E53A538A979,$991E74AD3CDB6F50,$042E07215C4524D0, |
$8E6E1097DCCBC076,$E071A8ECE285348D,$D784F42BFDA24E0A,$7D41DB60821B7F0D, |
$85D4614A5DF5937F,$BB8CB5BAED34A899,$40FF700F0B6E5FB7,$2CF7319E1BF8B924, |
$3A76D3D1EC841F36,$4520F15B40477253,$F138321D7008AD13,$42E889E525B64DDF, |
$65A5C9A6BF70A7F2,$208538FDFF37D5A1,$410EF67A1C025683,$18E412C63D6BD8FF, |
$72D5AD9C5F6008D4,$255AB9A9B41EF845,$93558305AA89356D,$70C2547671B81ABC, |
$3604DAB2084B73B3,$05DF81544B292DE4,$F2DE4D8249BCB64F,$0BBA71DD813E5309, |
$A368A77CD05F7066,$796FDC41DE5E5BDD,$EC03A18F064A5808,$085C0E42B88A4855, |
$274D40439AC6EA2D,$31CCA20C6DBA4C3F,$322ADD93540E5763,$B60F3AAC1E97CD28, |
$7CB05D1595777639,$B036C4676C0AFB90,$0A4BF7A896525A3D,$73242BE9480C01E0, |
$5BFD1D560FB19C14,$7B7825ABF08649B5,$B7FEBCD909FBC41C,$81FA666B01B0B7AF, |
$D25B757FB68B63EE,$0D838F16F3A365B1,$6A31BF5A620BD02B,$26BCC6368DAAE319, |
$9ED60C13592A50DC,$581B62C936058748,$9CC1F5F977F242B4,$83ED9F812F68A5C7, |
$74EC53572DFD3E6C,$B3D0BBF855BEE0CC,$ACFCD1800D2407BF,$303D24797AD6450B, |
$7A89A3DEE7EA4081,$69D7C0C55BBFCB77,$770A2CC814492530,$0F9476FCDD7B77D9, |
$AEEB286A23FC15D7,$2174BE88E85BDC95,$DE297C1C52440F6B,$D04C8C9598537186, |
$2EE0C8743520AB4C,$977B8424F6CC11BD,$10B81C8485E190AA,$A4A0DFC2B5AE4FEA, |
$98EFF2D82BB76664,$A8D2D6A15161236F,$D4628BB4C4165556,$682646B04CD3C243, |
$2D06B7EB0C94B010,$626DB118DA81987E,$2928B0CA50D194C0,$6DF9C7E407FAEFA7, |
$1681E24FF77CA612,$4952F838A4881ED6,$76FBAABD03252C04,$C73CE8AF7843DEA0, |
$E82DA6AE5A0F7CD8,$C10516640ADEE818,$968A0251E1A01889,$37F55CC71F277A87, |
$E5AE29B8A9AC1969,$CABF67B98BE0BB11,$F4E7B3493B2180F7,$E9DC20DB4D6375EC, |
$639C376DCDED914A,$12AFE56EAB3982C2,$C2E369FB336AF344,$A6B726289B765D82, |
$14961BA5D9A4B47A,$BC44CD0488C59715,$D3AAF30AA1E76ADA,$28D936BF47BD9DF4, |
$AF1AAE1F34901CE3,$2F114E01224CA278,$E648562790180235,$24AB3FDCA372F171, |
$52509561A057DD75,$C6CD6EDA6F2FD794,$A08ED8E3E9EB6B3A,$09AD8837AFE64161, |
$BDB54B719FA99E21,$8C79E97DF213D21E,$CF60E6EDC0C996F5,$5DC4E39D7D2CAAAC, |
$11499AF1928D999E,$5FD31A7753F4B8C4,$01F18675176C0934,$C52B1145569BCCC8, |
$9F278A664E4659E8,$3DBEAB6F897520BA,$A2992109C7337952,$9B098D4712037D38, |
$C9591826B254A04D,$3B8755A4FBE81602,$BE5334EEA61D857D,$51B6EAFE99E3C629, |
$191594B32A07D1CB,$1F2C6A78589AE773,$3FA95285A7AD32D2,$5C3565E86A40A398, |
$B2213D8D42D2E9F8,$EFE5DE103FFE4354,$4AB487A79D3C058A,$CD771F07EE11849D, |
$BFA2B29BB1718C49,$BA7D33CFFA58A1AD,$6FEE3E0E2922FDCF,$64544FD3A81CAEC6, |
$D9E104A237B530E7,$F32FCBF75ED0BF7B,$3E58D4F0B0C13BE6,$B418C346304FDF40, |
$AAC52F4B7FB93107,$DC3E85F67C9C1D03,$D5930DC1D37A5C62,$0639FECB729D36B8, |
$C0F490111DB2E12C,$7EA7A4FFBBAF6451,$F6F04AA315F9929F,$6643B63986C4BCAE, |
$6C0841911096E693,$8425E73F4A999A4B,$7133D20366D41388,$38612A3BC25C0D5E, |
$B99B4C50C3ECBAF1,$1D3B93927642F51B,$7F56228AACC36D65,$9D30738C609E4B80, |
$48A37E4DB3E417E2,$8BB191C397E2ED92,$2ACECF5569658F9C,$DA077B3D0E012BBB, |
$A55159B7A2C246DE,$33DB5BE643625E57,$821C19F43804ACF3,$3990AC4ED530046A, |
$D675725EEACE473E,$789E5A34C93252E9,$86321ED564418823,$FA8243C0F136FE1A, |
$E45FAFCDBEC0105D,$2B3F49207E0986A8,$A92350D4460D2A5B,$1EDDEC0D4FF6EE47, |
$89A66829B93AFFFA,$607A48F2F4598A16,$6BC0392F7567D91F,$EA3A5F4474D76EB0, |
$5598EDDFC5A6E2F9,$4C8D796CEFA13332,$F701CCD602959BAB,$E2665106CC5D26E5)); |
Shark_CD: array[0..7, 0..255] of UInt64 = ( |
// box 0 |
($E6126AF05E55AFF3,$4B6C893F310B0835,$AA4C0E84EBFC8D57,$FB9B5C7BF3B3090D, |
$4508A6A9CCBA5CE2,$E5D1D2064DC6BDE9,$348343755288EDDE,$B684505DE46B250C, |
$A8CEDE205A1E91E8,$40B89B46F9FA6ACC,$8EE1EC1AFAB080BA,$DE77D6B7408E0A45, |
$9A3E184C2E455802,$BE93FAD23F0955EF,$3AE76CE3AF39B909,$AD7EE3CF6F5EA7C6, |
$8B51D1F5CFF0B694,$70CA8D8E3C43BF99,$CCDBA7F8B2A8F6C9,$4C5E6474B5A922A4, |
$5D31ADCD541CCC32,$9B7F701E8C3456A7,$2AC9CD08ECFD593A,$8FA0844858C18E1F, |
$32F0C66C745BC9EA,$C58D6525CBBB888F,$8C633CBE4B529C05,$F2CD9EA68AA0774B, |
$2CBA4811CA2E7D0E,$E2E33F4DC9649778,$F4BE1BBFAC73537F,$22DE6787379F29D9, |
$0956C2DD79137E46,$E061EFE978868BC7,$1CC85ED90F97A85B,$31337E9A67C8DBF0, |
$360193D1E36AF161,$7FEFCA4A6383E5EB,$8535FE633241E243,$C3FEE03CED68ACBB, |
$81C4ABDEA570DAC8,$67D6C12EFB25753B,$A4282112164DD980,$CF181F0EA13BE4D3, |
$A98FB672F86F9F4D,$5C70C59FF66DC297,$B0F7D544C2B80138,$0DA79760EE2246CD, |
$3740FB83411BFFC4,$24ADE29E114C0DED,$F858E48DE0201B17,$0E642F96FDB154D7, |
$DDB46E41531D185F,$25EC8ACCB33D0348,$0282D0A4B1E21CBF,$1BFAB3928B3582CA, |
$AFFC336BDEBCBB79,$35C22B27F0F9E37B,$03C3B8F61393121A,$B8E07FCB19DA71DB, |
$99FDA0BA3DD64A18,$CE59775C034AEA76,$49EE599B80E9148A,$FE2B6194C6F33F23, |
$4EDCB4D0044B3E1B,$D5A3C4CE887F68BC,$DF36BEE5E2FF04E0,$171C4CA0C766CAA2, |
$0BD41279C8F162F9,$E490BA54EFB7B34C,$5B4228D472CFE806,$5355825BA9AD98E5, |
$9F8E25A31B056E2C,$CD9ACFAA10D9F86C,$88926903DC63A48E,$B40680F9558939B3, |
$239F0FD595EE277C,$EC8710DB34D5C3AF,$87B72EC783A3FEFC,$632794936C144DB0, |
$46CB1E5FDF294EF8,$83467B7A1492C677,$9C4D9D5508967C36,$D6607C389BEC7AA6, |
$165D24F26517C407,$C4CC0D7769CA862A,$CBE94AB3360ADC58,$847496319030ECE6, |
$7A5FF7A556C3D3C5,$C03D58CAFEFBBEA1,$76B908971A909BAD,$2F79F0E7D9BD6F14, |
$197863363AD79E75,$DA86830AD7BF32CE,$5A034086D0BEE6A3,$97998F2CC0671ECF, |
$552607428F7EBCD1,$51D752FF184F845A,$BB23C73D0A4963C1,$2B88A55A4E8C579F, |
$D80453AE665D2E71,$EE05C07F8537DF10,$423A4BE248187673,$CAA822E1947BD2FD, |
$1ABBDBC029448C6F,$96D8E77E6216106A,$6266FCC1CE654315,$89D301517E12AA2B, |
$730935782FD0AD83,$8085C38C0701D46D,$6B303E1CB7763D53,$3F57510C9A798F27, |
$4449CEFB6ECB5247,$48AF31C922981A2F,$98BCC8E89FA744BD,$69B2EEB8069421EC, |
$EBB5FD90B077E93E,$6A71564E150733F6,$116FC9B9E1B5EE96,$4A2DE16D937A0690, |
$B9A11799BBAB7F7E,$9368DA9157562644,$718BE5DC9E32B13C,$C82AF2452599CE42, |
$B547E8ABF7F83716,$33B1AE3ED62AC74F,$799C4F534550C1DF,$3E16395E38088182, |
$7C2C72BC7010F7F1,$F38CF6F428D179EE,$D29129850CDD422D,$41F9F3145B8B6469, |
$945A37DAD3F40CD5,$757AB061090389B7,$6554118A4AC76984,$7D6D1AEED261F954, |
$01416852A2710EA5,$B27505E0735A1D87,$77F860C5B8E19508,$78DD2701E721CF7A, |
$E12087BBDAF78562,$86F6469521D2F059,$EF44A82D2746D1B5,$BC112A768EEB4950, |
$C2BF886E4F19A21E,$307216C8C5B9D555,$C96B9A1787E8C0E7,$A31ACC5992EFF311, |
$A0D974AF817CE10B,$DCF50613F16C16FA,$FCA9B1307711239C,$57A4D7E63E9CA06E, |
$C64EDDD3D8289A95,$A25BA40B309EFDB4,$2E3898B57BCC61B1,$F5FF73ED0E025DDA, |
$A6AAF1B6A7AFC53F,$D9453BFCC42C20D4,$9D0CF507AAE77293,$290A75FEFF6E4B20, |
$A7EB99E405DECB9A,$A1981CFD230DEFAE,$12AC714FF226FC8C,$743BD833AB728712, |
$6C02D35733D417C2,$E9372D340195F581,$F77DA349BFE04165,$68F386EAA4E52F49, |
$211DDF71240C3BC3,$13ED191D5057F229,$E8764566A3E4FB24,$F9198CDF425115B2, |
$D013F921BD3F5E92,$91EA0A35E6B43AFB,$0732ED4B84A22A91,$EAF495C21206E79B, |
$5214EA090BDC9640,$0000000000000000,$B3346DB2D12B1322,$0CE6FF324C534868, |
$AEBD5B397CCDB5DC,$0A957A2B6A806C5C,$1F0BE62F1C04BA41,$14DFF456D4F5D8B8, |
$58819022615CFA1C,$05B03DEF3540362E,$E3A2571F6B1599DD,$9229B2C3F52728E1, |
$BA62AF6FA8386D64,$0673851926D32434,$641579D8E8B66721,$04F155BD9731388B, |
$9ECF4DF1B9746089,$205CB723867D3566,$102EA1EB43C4E033,$3BA604B10D48B7AC, |
$50963AADBA3E8AFF,$AC3F8B9DCD2FA963,$7B1E9FF7F4B2DD60,$F63CCB1B1D914FC0, |
$7EAEA218C1F2EB4E,$5FB37D69E5FED08D,$56E5BFB49CEDAECB,$2DFB2043685F73AB, |
$61A54437DDF6510F,$6FC16BA1204705D8,$E75302A2FC24A156,$3DD581A82B9B9398, |
$DBC7EB5875CE3C6B,$90AB626744C5345E,$59C0F870C32DF4B9,$6697A97C59547B9E, |
$FDE8D962D5602D39,$D3D041D7AEAC4C88,$5EF2153B478FDE28,$D4E2AC9C2A0E6619, |
$1E4A8E7DBE75B4E4,$72485D2A8DA1A326,$437B23B0EA6978D6,$159E9C047684D61D, |
$0F2547C45FC05A72,$F10E265099336551,$3C94E9FA89EA9D3D,$BFD292809D785B4A, |
$0817AA8FDB6270E3,$60E42C657F875FAA,$18390B6498A690D0,$478A760D7D58405D, |
$284B1DAC5D1F4585,$B1B6BD1660C90F9D,$D15291731F4E5037,$4D1F0C2617D82C01, |
$C70FB5817A599430,$6D43BB0591A51967,$6E8003F382360B7D,$1D89368BADE6A6FE, |
$4F9DDC82A63A30BE,$EDC6788996A4CD0A,$AB0D66D6498D83F2,$54676F102D0FB274, |
$C17C30985C8AB004,$3865BC471EDBA5B6,$3924D415BCAAAB13,$951B5F8871850270, |
$8A10B9A76D81B831,$BD5042242C9A47F5,$A5694940B43CD725,$FF6A09C664823186, |
$8D2254ECE92392A0,$B7C5380F461A2BA9,$82071328B6E3C8D2,$D721146A399D7403, |
$FADA342951C207A8,$262F323AA0AE1152,$F04F4E023B426BF4,$276E5A6802DF1FF7), |
// box 1 |
($3B4016DBFD16E203,$9A7574C51174530A,$90012E69C02EC8D3,$F44580E3D780E076, |
$F81DEC2B49ECA14B,$26CAE3E8A6E3D7EF,$0962419E0C41F6AB,$54D1EB4070EBD951, |
$865E884B0188EEC8,$DF76067EA406FE8A,$29849412E594FBA0,$461569896869C0F2, |
$B5DDD6B3BBD6724E,$0C586CC89E6C413D,$6B0AD97054D904EA,$A135621EEC62B109, |
$0EEF7E47087EA461,$FAAAFEA4DFFE4417,$E0AD344E80342331,$AB4138B23D382AD0, |
$107390468E90FCFF,$BE0885A2218561B9,$DBED22957D22C132,$2251C7037FC7E857, |
$33835EF8BA5E9C86,$B3F1E0D7F4E0A8AA,$3FDB32302432DDBB,$A719547AA3546BED, |
$E10C3DF3CB3DAB1F,$17FEAF9F8AAFAE35,$9DF84B1C154B01C0,$8364A51D93A5595E, |
$535CD49974D48B9B,$01A109BD4B09882E,$C4D0C529B0C51182,$2E09ABCBE1ABA96A, |
$1F3DE7BCCDE7D0B0,$9317355B1D35A5A1,$6C87E6A950E65620,$8910FFB142FFC287, |
$40395FED275F1A16,$7B794936DA49F815,$F269B68798B63A92,$FD27C17DDBC116DD, |
$8D8BDB5A9BDBFD3F,$1BA6C35714C3EF08,$6E30F426C6F4B37C,$7FE26DDD036DC7AD, |
$14E8B4AD57B4C347,$B985BA7B25BA3373,$E9CF75D08C75D59A,$626898EE5898F241, |
$5B9F9CBA339CF51E,$B250E96ABFE92084,$165FA622C1A6261B,$F5E4895E9C896858, |
$B76AC43C2DC49712,$02B7128F9612E55C,$1D8AF5335BF535EC,$36B973AE28732B10, |
$A8572380E02347A2,$F6F2926C4192052A,$8C2AD2E7D0D27511,$D32E6AB63A6ABFB7, |
$BD1E9E90FC9E0CCB,$03161B32DD1B6D72,$4DC03A98F23AD305,$81D3B79205B7BC02, |
$450372BBB572AD80,$2D1FB0F93CB0C418,$2A928F20388F96D2,$721B08A8D6080EBE, |
$92B63CE6563C2D8F,$EB78675F1A6730C6,$13658B74538B918D,$428E4D62B14DFF4A, |
$88B1F60C09F64AA9,$75963771D2375C74,$7AD8408B9140703B,$57C7F072ADF0B423, |
$E5971918121994A7,$5666F9CFE6F93C0D,$8F3CC9D50DC91863,$1E9CEE0186EE589E, |
$8A06E4839FE4AFF5,$B824B3C66EB3BB5D,$D1997839AC785AEB,$6752B5B8CAB545D7, |
$B47CDF0EF0DFFA60,$949A0A82190AF76B,$C04BE1C269E12E3A,$FC86C8C090C89EF3, |
$E3BB2F7C5D2F4E43,$6AABD0CD1FD08CC4,$2147DC31A2DC8525,$CA3FBB6EB8BBB5E3, |
$48FA17CE60176493,$6444AE8A17AE28A5,$2B33869D73861EFC,$D0387184E771D2C5, |
$7CF476EFDE76AADF,$63C9915313917A6F,$C929A05C65A0D891,$DA4C2B28362B491C, |
$FE31DA4F06DA7BAF,$C1EAE87F22E8A614,$5C12A36337A3A7D4,$18B0D865C9D8827A, |
$E7200B97840B71FB,$4BEC0CFCBD0C09E1,$0F4E77FA43772C4F,$4C613325B9335B2B, |
$F3C8BF3AD3BFB2BC,$87FF81F64A8166E6,$A38270917A705455,$1911D1D882D10A54, |
$44A27B06FE7B25AE,$049B24EBD9243FB8,$BB32A8F4B3A8D62F,$91A027D48B2740FD, |
$3D6C20BFB22038E7,$E681022ACF02F9D5,$F17FADB545AD57E0,$CC138D0AF78D6F07, |
$495B1E732B1EECBD,$38560DE9200D8F71,$A9F62A3DAB2ACF8C,$47B46034236048DC, |
$8E9DC06846C0904D,$ACCC076B3907781A,$32225745F15714A8,$D4A3556F3E55ED7D, |
$D7B54E5DE34E800F,$DDC114F132141BD6,$6D26EF141BEFDE0E,$85489379DC9383BA, |
$0BD553119A5313F7,$786F520407529567,$CB9EB2D3F3B23DCD,$A223792C3179DC7B, |
$0A745AACD15A9BD9,$710D139A0B1363CC,$681CC24289C26998,$1A07CAEA5FCA6726, |
$82C5ACA0D8ACD170,$25DCF8DA7BF8BA9D,$C7C6DE1B6DDE7CF0,$C35DFAF0B4FA4348, |
$DED70FC3EF0F76A4,$504ACFABA9CFE6E9,$C571CC94FBCC99AC,$5EA5B1ECA1B14288, |
$AE7B15E4AF159D46,$C888A9E12EA950BF,$F7539BD10A9B8D04,$962D180D8F181237, |
$E43610A559101C89,$772125FE4425B928,$84E99AC4979A0B94,$C667D7A626D7F4DE, |
$EFE343B4C3430F7E,$D5025CD2755C6553,$A6B85DC7E85DE3C3,$D61447E0A8470821, |
$3E7A3B8D6F3B5595,$52FDDD243FDD03B5,$8072BE2F4EBE342C,$12C482C9188219A3, |
$9EEE502EC8506CB2,$AD6D0ED6720EF034,$59288E35A58E1042,$E21A26C11626C66D, |
$247DF16730F132B3,$F0DEA4080EA4DFCE,$31344C772C4C79DA,$4F77281764283659, |
$79CE5BB94C5B1D49,$0000000000000000,$73BA01159D018690,$74373ECC993ED45A, |
$BCBF972DB79784E5,$4ED621AA2F21BE77,$D95A301AEB30246E,$9C5942A15E4289EE, |
$37187A13637AA33E,$276BEA55EDEA5FC1,$1C2BFC8E10FCBDC2,$ED54513B5551EA22, |
$20E6D58CE9D50D0B,$3AE11F66B61F6A2D,$66F3BC0581BCCDF9,$2CBEB94477B94C36, |
$99636FF7CC6F3E78,$953B033F52037F45,$B0E7FBE529FBC5D8,$60DF8A61CE8A171D, |
$6F91FD9B8DFD3B52,$AAE0310F7631A2FE,$BFA98C1F6A8CE997,$8BA7ED3ED4ED27DB, |
$98C2664A8766B656,$062C36644F36DAE4,$5570E2FD3BE2517F,$EAD96EE2516EB8E8, |
$419856506C569238,$23F0CEBE34CE6079,$309545CA6745F1F4,$5A3E950778957D30, |
$617E83DC85839F33,$FB0BF71994F7CC39,$3CCD2902F929B0C9,$70AC1A27401AEBE2, |
$CEA49F85619F8A5B,$39F704546B04075F,$0DF96575D565C913,$08C3482347487E85, |
$D28F630B71633799,$ECF558861E58620C,$C2FCF34DFFF3CB66,$978C11B0C4119A19, |
$69BDCBFFC2CBE1B6,$BA93A149F8A15E01,$51EBC616E2C66EC7,$078D3FD9043F52CA, |
$58898788EE87986C,$4A4D0541F60581CF,$E86E7C6DC77C5DB4,$EE424A09884A8750, |
$CDB284B7BC84E729,$65E5A7375CA7A08B,$2FA8A276AAA22144,$A0946BA3A76B3927, |
$A5AE46F535468EB1,$35AF689CF5684662,$28259DAFAE9D738E,$CF0596382A960275, |
$B6CBCD8166CD1F3C,$7E43646048644F83,$9BD47D785A7DDB24,$432F44DFFA447764, |
$9F4F59938359E49C,$7D557F52957F22F1,$76802C430F2C3106,$DC601D4C791D93F8, |
$053A2D56922DB796,$11D299FBC59974D1,$F9BCE59602E52965,$D8FB39A7A039AC40, |
$340E6121BE61CE4C,$5F04B851EAB8CAA6,$5DB3AADE7CAA2FFA,$1549BD101CBD4B69, |
$FF90D3F24DD3F381,$AFDA1C59E41C1568,$B146F25862F24DF6,$A40F4F487E4F069F), |
// box 2 |
($A1A35CEBF8F0F94C,$2C203D650F3F095D,$1A2BDAEE4084A2A7,$D32404574D7BCC68, |
$F785BEA594A9ADC4,$F2EB54456206949C,$3F5E334D0475CED1,$5994299B835D1F60, |
$785B7989AC204794,$025DA6A2CF461A41,$DF1F3A71F01A901B,$27284F018BB77637, |
$E1955A6D694C5310,$24A1BAF2D9D261AC,$E4FBB08D9FE36A48,$8D83618EF7CFF011, |
$2AC72276ABF5279E,$F9E32621E68EEBF6,$BF323FB4D3F86F69,$BB888605B8745BEB, |
$70DAFE1E7ACD2F65,$D0ADF1A41F1EDBF3,$1E91635F2B089625,$EE2791B8864818F8, |
$99CE23E4C56C1484,$F33F0714FF259946,$BD6F99161CBE7528,$9F293CF761A63A47, |
$B80173F6EA114C70,$6543EF25D54DC62A,$39B92C5EA0BFE012,$63A4F0367187E8E9, |
$4C0D38A02CDDF62F,$07334C4239E92319,$43BFF375C3D9BDC7,$CA862B4A5F9A7954, |
$5D2E902AE8D12BE2,$137E0E280B4AC78C,$F162A1B630638307,$55AF17BD3E3C4313, |
$358212781DDEBC61,$94214E93E52E452D,$C18E592EDB12063E,$EC7A371A490E02B9, |
$4963D240DA72CF77,$41E255D70C9FA786,$FF0439324244C535,$88ED8B6E0160C949, |
$6C163BE39E83A301,$C534E09FB09E32BC,$806C0CF9D78DA1B8,$DBA583C09B96A499, |
$746047AF11411BE7,$F40C4B56C6CCBA5F,$6270A367ECA4E533,$D41748157492EF71, |
$EFF3C2E91B6B1522,$0E66988472274632,$534808AE9AF66DD0,$8231AA5B18CBBBF9, |
$B2DD52C3F3BA3EC0,$DD429CD33F5C8A5A,$4E509E02E39BEC6E,$26FC1C5016947BED, |
$D9F8256254D0BED8,$0955D4C64BCE652B,$1610E4C8FDE5FED4,$6DC268B203A0AEDB, |
$2E7D9BC7C079131C,$C3D3FF8C14541C7F,$D64AEEB7BBD4F530,$AB7F7DDEE15B8BFC, |
$144D426A32A3E495,$8E0A947DA5AAE78A,$798F2AD831034A4E,$3BE48AFC6FF9FA53, |
$529C5BFF07D5600A,$BEE66CE54EDB62B3,$931202D1DCC76634,$50C1FD5DC8937A4B, |
$A4CDB60B0E5FC014,$57F2B11FF17A5952,$47054AC4A8558945,$5A1DDC68D13808FB, |
$5CFAC37B75F22638,$C207ACDD897711A5,$289A84D464B33DDF,$C05A0A7F46310BE4, |
$E6A6162F50A57009,$06E71F13A4CA2EC3,$5F733688279731A3,$EB497B5870E721A0, |
$B667EB7298360A42,$E3C8FCCFA60A4951,$E772457ECD867DD3,$6978D103682C9A59, |
$0DEF6D77204251A9,$C90FDEB90DFF6ECF,$D179A2F5823DD629,$2FA9C8965D5A1EC6, |
$81B85FA84AAEAC62,$DC96CF82A27F8780,$602D05C523E2FF72,$19A22F1D12E1B53C, |
$E52FE3DC02C06792,$58407ACA1E7E12BA,$61F95694BEC1F2A8,$48B781114751C2AD, |
$AAAB2E8F7C788626,$04BAB9B16B8C3482,$2DF46E34921C0487,$1123A88AC40CDDCD, |
$C6BD156CE2FB2527,$7F6835CB95C9648D,$83E5F90A85E8B623,$4F84CD537EB8E1B4, |
$294ED785F9903005,$1CCCC5FDE44E8C64,$CB52781BC2B9748E,$1D1896AC796D81BE, |
$B30901926E99331A,$AD9862CD4591A53F,$C8DB8DE890DC6315,$7BD28C7AFE45500F, |
$0ADC213519AB72B0,$A8F6882DB33E9C67,$B5EE1E81CA531DD9,$201B0343B25E552E, |
$4036068691BCAA5C,$AE11973E17F4B2A4,$9EFD6FA6FC85379D,$33650D6BB91492A2, |
$3A30D9ADF2DAF789,$0C3B3E26BD615C73,$F651EDF4098AA01E,$710EAD4FE7EE22BF, |
$3138ABC9765288E3,$9D749A55AEE02006,$6E4B9D4151C5B940,$84D6B548BC01953A, |
$360BE78B4FBBABFA,$A22AA918AA95EED7,$EDAE644BD42D0F63,$46D119953576849F, |
$6497BC74486ECBF0,$FBBE808329C8F1B7,$4AEA27B38817D8EC,$5626E24E6C595488, |
$056EEAE0F6AF3958,$4558EC6667139304,$448CBF37FA309EDE,$6F9FCE10CCE6B49A, |
$A0770FBA65D3F496,$671E49871A0BDC6B,$DA71D09106B5A943,$08818797D6ED68F1, |
$A3FEFA4937B6E30D,$B080F4613CFC2481,$763DE10DDE0701A6,$4DD96BF1B1FEFBF5, |
$92C6518041E46BEE,$3456412980FDB1BB,$981A70B5584F195E,$3D0395EFCB33D490, |
$BA5CD55425575631,$4B3E74E21534D536,$6AF124F03A498DC2,$7EBC669A08EA6957, |
$30ECF898EB718539,$A922DB7C2E1D91BD,$7A06DF2B63665DD5,$B154A730A1DF295B, |
$FC8DCCC11021D2AE,$CFE8C1AAA935400C,$97A8BB60B74B52B6,$18767C4C8FC2B8E6, |
$9A47D6179709031F,$0000000000000000,$AC4C319CD8B2A8E5,$B9D520A7773241AA, |
$DECB69206D399DC1,$1F45300EB62B9BFF,$10F7FBDB592FD017,$3E8A601C9956C30B, |
$8502E619212298E0,$F5D818075BEFB785,$547B44ECA31F4EC9,$9CA0C90433C32DDC, |
$E041093CF46F5ECA,$A69010A9C119DA55,$C769463D7FD828FD,$C4E0B3CE2DBD3F66, |
$2575E9A344F16C76,$01D453519D230DDA,$FA6AD3D2B4EBFC6D,$D5C31B44E9B1E2AB, |
$F83775707BADE62C,$BCBBCA47819D78F2,$D79EBDE626F7F8EA,$5BC98F394C1B0521, |
$2246A5E17D184F6F,$12AA5D799669CA56,$5EA765D9BAB43C79,$8939D83F9C43C493, |
$32B15E3A24379F78,$E914DDFABFA13BE1,$909BF7228EA271AF,$73530BED28A838FE, |
$D2F05706D058C1B2,$FED06A63DF67C8EF,$B43A4DD057701003,$A519E55A937CCDCE, |
$75B414FE8C62163D,$AFC5C46F8AD7BF7E,$2392F6B0E03B42B5,$386D7F0F3D9CEDC8, |
$21CF50122F7D58F4,$9B9385460A2A0EC5,$5115AE0C55B07791,$0FB2CBD5EF044BE8, |
$EA9D2809EDC42C7A,$CC613459FB505797,$426BA0245EFAB01D,$1599113BAF80E94F, |
$7D3593695A8F7ECC,$0389F5F35265179B,$875F40BBEE6482A1,$95F51DC2780D48F7, |
$7CE1C038C7AC7316,$CE3C92FB34164DD6,$CDB5670866735A4D,$8AB02DCCCE26D308, |
$914FA47313817C75,$8B647E9D5305DED2,$D82C7633C9F3B302,$728758BCB58B3524, |
$E8C08EAB2282363B,$8FDEC72C3889EA50,$2B13712736D62A44,$3CD7C6BE5610D94A, |
$37DFB4DAD298A620,$868B13EA73478F7B,$B7B3B82305150798,$0B08726484887F6A, |
$1BFF89BFDDA7AF7D,$77E9B25C43240C7C,$F0B6F2E7AD408EDD,$17C4B79960C6F30E, |
$8C5732DF6AECFDCB,$68AC8252F50F9783,$66CA1AD68728D1B1,$6B2577A1A76A8018, |
$E21CAF9E3B29448B,$A74443F85C3AD78F,$FD599F908D02DF74,$967CE8312A685F6C), |
// box 3 |
($FA7B9775BA3AF751,$03EF98CB769C2D13,$7191CE067072359E,$BAB18B6BFF7516A8, |
$E6E5EF4EFBC1065E,$7BEC74A3B1D0DBF4,$656B4FB907C31C4A,$4E8520F99FC86304, |
$8FD8DF31D16DAE58,$90A93FC1E60A7244,$30AD09F2B449CFC5,$8453BE7E91BB5B90, |
$1D68A3D1C08FEAAD,$5C54642504B410F6,$8061383C8A9E3707,$F9940FBECCA6DA42, |
$46E1D97DA982BBDF,$FC50521656F7AD77,$5E4D2704F35C2647,$8BEA5973CA48C2CF, |
$D06323DFA34593BD,$62B651306A7A5DCE,$A436B0714966D116,$4F73FB131EBC78A6, |
$92B07CE011E244F5,$33429139C2D5E2D6,$CEE418C515565403,$D7BE3D56CEFCD239, |
$53ED83285F4789A9,$F3E9B51B0D043428,$20650E0FD8DD8A86,$B6E7F4ADD21AA2E4, |
$6D0FB63D3189C491,$0DA0A42CAC1BAFEE,$3F14EEFFEFBA569A,$13279F361A086850, |
$9B225E8EA6DC878C,$6684D772715F3159,$A3EBAEF824DF9092,$C499A260D4F4BA69, |
$AA798C9693E153EB,$50021BE329DBA4BA,$949BB983FD2F1ED3,$DFDAC4D2F8B60AE2, |
$F0062DD07B98193B,$AFBDD13E09B024DE,$B95E13A089E93BBB,$649D945386B707E8, |
$E4FCAC6F0C2930EF,$413CC7F4C43BFA5B,$3B2668BDF49F3A0D,$E50A77858D5D2B4D, |
$05C45DA89A517735,$3EE235156ECE4D38,$FE491137A11F9BC6,$B7112F47536EB946, |
$07DD1E896DB94184,$1AB5BD58AD36AB29,$8197E3D60BEA2CA5,$AB8F577C12954849, |
$9CFF4007CB65C608,$A00436335243BD81,$FDA689FCD783B6D5,$CCFD5BE4E2BE62B2, |
$75A348446B575909,$17151974012D04C7,$FB8D4C9F3B4EECF3,$AC5249F57F2C09CD, |
$9346A70A90965F57,$043286421B256C97,$27B81086B564CB02,$3569545A2E18B8F0, |
$6B24735EDD449EB7,$2193D5E559A99124,$C7763AABA268977A,$B0CC31CE3ED7F8C2, |
$C939064C78EF1587,$16E3C29E80591F65,$5DA2BFCF85C00B54,$5990398D9EE567C3, |
$67720C98F02B2AFB,$54309DA132FEC82D,$EAB39088D6AEB212,$9682FAA20AC72862, |
$D38CBB14D5D9BEAE,$4C9C63D8682055B5,$D648E6BC4F88C99B,$DC355C198E2A27F1, |
$10C807FD6C944543,$450E41B6DF1E96CC,$0B8B614F40D6F5C8,$D27A60FE54ADA50C, |
$49583E70F2712280,$8DC19C10268598E9,$5866E2671F917C61,$79F537824638ED45, |
$C2B267033839E04F,$CB20456D8F072336,$2A18B4AA197F64EC,$DBE84290E3936675, |
$73888D27879A032F,$E8AAD3A9214684A3,$6EE02EF64715E982,$A996145DE57D7EF8, |
$C8CFDDA6F99B0E25,$062BC563ECCD5A26,$264ECB6C3410D0A0,$B8A8C84A089D2019, |
$7DC7B1C05D1D81D2,$D5A77E773914E488,$4B417D5105991431,$F62DE8B39755431D, |
$993B1DAF5134B13D,$82787B1D7D7601B6,$E321B2E66190716B,$B5086C66A4868FF7, |
$9EE603263C8DF0B9,$349F8FB0AF6CA352,$5B897AAC690D5172,$7C316A2ADC699A70, |
$D451A59DB860FF2A,$706715ECF1062E3C,$838EA0F7FC021A14,$57DF056A4462E53E, |
$CF12C32F94224FA1,$ED6E8E01BB17F396,$915FE42B677E69E6,$89F31A523DA0F47E, |
$E71334A47AB51DFC,$A860CFB76409655A,$9F10D8CCBDF9EB1B,$EF77CD204CFFC527, |
$F862D4544DD2C1E0,$8A1C82994B3CD96D,$AE4B0AD488C43F7C,$98CDC645D040AA9F, |
$7FDEF2E1AAF5B763,$4717029728F6A07D,$745593AEEA2342AB,$EE8116CACD8BDE85, |
$727E56CD06EE188D,$227C4D2E2F35BC37,$977421488BB333C0,$A21D7512A5AB8B30, |
$BB4750817E010D0A,$6CF96DD7B0FDDF33,$2801F78BEE97525D,$1C9E783B41FBF10F, |
$9D099BED4A11DDAA,$7A1AAF4930A4C056,$32B44AD343A1F974,$3CFB763499267B89, |
$B2D572EFC93FCE73,$63408ADAEB0E466C,$ADA4921FFE58126F,$5FBBFCEE72283DE5, |
$6AD2A8B45C308515,$0C567FC62D6FB44C,$956D62697C5B0571,$25A153A7428CFDB3, |
$150C5A55F6C53276,$E2D7690CE0E46AC9,$DA1E997A62E77DD7,$F5C27078E1C96E0E, |
$C344BCE9B94DFBED,$60AF12119D926B7F,$A1F2EDD9D337A623,$CAD69E870E733894, |
$3770177BD9F08E41,$A5C06B9BC812CAB4,$1F71E0F03767DC1C,$44F89A5C5E6A8D6E, |
$6159C9FB1CE670DD,$8E2E04DB5019B5FA,$8805C1B8BCD4EFDC,$E138F1C7967847DA, |
$4AB7A6BB84ED0F93,$0000000000000000,$38C9F0768203171E,$1B4366B22C42B08B, |
$7803EC68C74CF6E7,$EC9855EB3A63E834,$BE830D29E4507A3F,$2DC5AA2374C62568, |
$A62FF350BE8EE7A7,$764CD08F1DCB741A,$8C3747FAA7F1834B,$0FB9E70D5BF3995F, |
$55C6464BB38AD38F,$F7DB3359162158BF,$D195F8352231881F,$0992226EB73EC379, |
$14FA81BF77B129D4,$48AEE59A73053922,$2457884DC3F8E611,$FFBFCADD206B8064, |
$B4FEB78C25F29455,$864AFD5F66536D21,$6F16F51CC661F220,$DE2C1F3879C21140, |
$195A2593DBAA863A,$2E2A32E8025A087B,$432584D533D3CCEA,$2C3371C9F5B23ECA, |
$A7D928BA3FFAFC05,$42D35F3FB2A7D748,$85A5659410CF4032,$0864F984364AD8DB, |
$F21F6EF18C702F8A,$F1F0F63AFAEC0299,$D9F101B1147B50C4,$2FDCE902832E13D9, |
$4D6AB832E9544E17,$E0CE2A2D170C5C78,$51F4C009A8AFBF18,$68CBEB95ABD8B3A4, |
$C15DFFC84EA5CD5C,$02194321F7E836B1,$113EDC17EDE05EE1,$521B58C2DE33920B, |
$9AD4856427A89C2E,$5629DE80C516FE9C,$77BA0B659CBF6FB8,$238A96C4AE41A795, |
$12D144DC9B7C73F2,$D807DA5B950F4B66,$3686CC91588495E3,$18ACFE795ADE9D98, |
$5A7FA146E8794AD0,$C680E141231C8CD8,$1E873B1AB613C7BE,$F434AB9260BD75AC, |
$CD0B800E63CA7910,$BC9A4E0813B84C8E,$3D0DADDE1852602B,$40CA1C1E454FE1F9, |
$0A7DBAA5C1A2EE6A,$693D307F2AACA806,$0E4F3CE7DA8782FD,$BD6C95E292CC572C, |
$3AD0B35775EB21AF,$7E28290B2B81ACC1,$01F6DBEA81741BA2,$87BC26B5E7277683, |
$393F2B9C03770CBC,$DDC387F30F5E3C53,$EB454B6257DAA9B0,$B323A905484BD5D1, |
$B13AEA24BFA3E360,$315BD218353DD467,$2BEE6F40980B7F4E,$E95C0843A0329F01, |
$C56F798A5580A1CB,$BF75D6C36524619D,$29F72C616FE349FF,$C0AB2422CFD1D6FE), |
// box 4 |
($561FC423E957943C,$014287CA69079288,$2F086129DFCD1D21,$C537D4AEA044FD99, |
$F1E8C3BFD7C8A457,$2971998A5CDF9BFB,$23FA649A2CE9E460,$3AA9E9C356A6716A, |
$D6EFA4E7AA3D1708,$705A24B1FDA5B5EB,$101E0CE2B170A9FC,$7CA821020E814CAA, |
$0BC97ADA1931ED13,$34DF1711778C59CE,$D35020EF9226D2BF,$575D43E9805006B4, |
$91ACEBEC9B1DB840,$549B3F423B5945D9,$99A3ED9D3925163E,$7917A50A369A891D, |
$E372343CB4B6DC4E,$8D40E2BDD949E8FD,$CFBC29BED0728202,$969794857108AC12, |
$DD26DE3DB30CFA1B,$115C8B28D8773B74,$E9F9C92CC480A3D5,$4DC8B21B4116D0D3, |
$316093194F979C79,$5124BB4A0342806E,$B31408BCDEF3CEA8,$C1CAD76CF158AAA6, |
$88FF66B5E1522D4A,$A8C37E8476B28A47,$15A188EA896B6C4B,$A24883940684F5DC, |
$DA1DA1545919EE49,$22B8E35045EE76E8,$6106AF9925D28E9F,$EF80318F4792250F, |
$663DD0F0CFC79ACD,$302214D326900EF1,$DFA2255C61022BFE,$E6CDB0348CAD19F9, |
$50663C806A4512E6,$65FBAC5B74CED9A0,$C4755364C9436F11,$8FC419DC0B473918, |
$5C9439339961EBA7,$3F166DCB6EBDB4DD,$BA59890715CCF25E,$F0AA4475BECF36DF, |
$03C67CABBB09436D,$B99FF5ACAEC5B133,$F9E7C5CE75F00A29,$6DF4AA2AD6F677DE, |
$AEBA8627F5A00C9D,$A573FCFDEC91E18E,$7F6E5DA9B5880FC7,$CA03ADB6E86947B5, |
$74A72773ACB9E2D4,$604428534CD51C17,$F8A542041CF798A1,$448533A08A29EC25, |
$80F060C4436A8334,$0DB082799A236BC9,$FA21B965CEF94944,$64B92B911DC94B28, |
$7118A37B94A22763,$AFF801ED9CA79E15,$1DAE8E9B2B53C235,$13D870490A79EA91, |
$8A7B9DD4335CFCAF,$1F2A75FAF95D13D0,$EEC2B6452E95B787,$C34E2C0D23567B43, |
$47434F0B3120AF48,$A18EFF3FBD8DB6B1,$98E16A57502284B6,$37196BBACC851AA3, |
$8E869E166240AB90,$9FDA153EBA3790E4,$F515C07D86D4F368,$72DEDFD02FAB640E, |
$E230B3F6DDB14EC6,$97D5134F180F3E9A,$E1F6CF5D66B80DAB,$E78F37FEE5AA8B71, |
$A30A045E6F836754,$90EE6C26F21A2AC8,$AA4785E5A4BC5BA2,$4E0ECEB0FA1F93BE, |
$94136FE4A3067DF7,$7B935E6BE49458F8,$9B2716FCEB2BC7DB,$840D63061276D40B, |
$ED04CAEE959CF4EA,$EA3FB5877F89E0B8,$B56DF01F5DE14872,$4935B1D9100A87EC, |
$82749BA5916452D1,$58693AF1C87DBC98,$89BDE17F8855BFC2,$677F573AA6C00845, |
$EB7D324D168E7230,$0284FB61D20ED1E5,$B190F3DD0CFD1F4D,$684B2E22EEEDB269, |
$2BF562EB8ED14A1E,$E0B448970FBF9F23,$396F9568EDAF3207,$52E2C7E1B84BC303, |
$77615BD817B0A1B9,$7E2CDA63DC8F9D4F,$F22EBF146CC1E73A,$C08850A6985F382E, |
$D9DBDDFFE210AD24,$BFE60D0F2DD737E9,$9A659136822C5553,$87CB1FADA97F9766, |
$4C8A35D12811425B,$83361C6FF863C059,$D212A725FB214037,$9E9892F4D330026C, |
$45C7B46AE32E7EAD,$5BAF465A7374FFF5,$DC6459F7DA0B6893,$D46B5F867833C6ED, |
$5DD6BEF9F066792F,$CB412A7C816ED53D,$75E5A0B9C5BE705C,$F6D3BCD63DDDB005, |
$FB633EAFA7FEDBCC,$D529D84C11345465,$C9C5D11D536004D8,$DB5F269E301E7CC1, |
$86899867C07805EE,$3D9296AABCB36538,$2CCE1D8264C45E4C,$5AEDC1901A736D7D, |
$2E4AE6E3B6CA8FA9,$1E68F230905A8158,$DEE0A2960805B976,$CD38D2DF027C53E7, |
$6909A9E887EA20E1,$24C11BF3C6FCF032,$18110A9313480782,$A7F7079C3E9F306B, |
$D8995A358B173FAC,$854FE4CC7B714683,$BD62F66EFFD9E60C,$14E30F20E06CFEC3, |
$6E32D6816DFF34B3,$217E9FFBFEE73585,$C88756D73A679650,$359D90DB1E8BCB46, |
$2645E09214F221D7,$04FD03C2511C573F,$739C581A46ACF686,$B0D2741765FA8DC5, |
$A0CC78F5D48A2439,$5E10C2524B6F3A42,$E50BCC9F37A45A94,$53A0402BD14C518B, |
$413AB7A8B2322992,$203C183197E0A70D,$CC7A55156B7BC16F,$4601C8C158273DC0, |
$BEA48AC544D0A561,$638254F8F7DC5F7A,$A6B580565798A2E3,$3CD01160D5B4F7B0, |
$8C026577B04E7A75,$7AD1D9A18D93CA70,$785522C05F9D1B95,$5F5245982268A8CA, |
$9551E82ECA01EF7F,$0000000000000000,$BB1B0ECD7CCB60D6,$094D81BBCB3F3CF6, |
$28331E4035D80973,$F7913B1C54DA228D,$6ACFD5433CE3638C,$1BD77638A84144EF, |
$62C0D3329EDBCDF2,$81B2E70E2A6D11BC,$D7AD232DC33A8580,$05BF8408381BC5B7, |
$33E468789D994D9C,$FEDCBAA79FE51E7B,$4F4C497A93180136,$073B7F69EA151452, |
$0CF205B3F324F941,$382D12A284A8A08F,$1CEC0951425450BD,$55D9B888525ED751, |
$6CB62DE0BFF1E556,$D1D4DB8E4028035A,$25839C39AFFB62BA,$4AF3CD72AB03C481, |
$A4317B3785967306,$1A95F1F2C146D667,$926A97472014FB2D,$B7E90B7E8FEF9997, |
$CEFEAE74B975108A,$3E54EA0107BA2655,$D0965C44292F91D2,$AB05022FCDBBC92A, |
$FD1AC60C24EC5D16,$FC5841C64DEBCF9E,$E4494B555EA3C81C,$B6AB8CB4E6E80B1F, |
$3BEB6E093FA1E3E2,$F36C38DE05C675B2,$9C1C6995013ED389,$8B391A1E5A5B6E27, |
$EC464D24FC9B6662,$AD7CFA8C4EA94FF0,$0F347918482DBA2C,$9D5EEE5F68394101, |
$7623DC127EB73331,$32A6EFB2F49EDF14,$2D8C9A480DC3CCC4,$B2568F76B7F45C20, |
$0E76FED2212A28A4,$48773613790D1564,$129AF783637E7819,$080F0671A238AE7E, |
$365BEC70A582882B,$42FCCB03093B6AFF,$0A8BFD1070367F9B,$FF9E3D6DF6E28CF3, |
$E8BB4EE6AD87315D,$C7B32FCF724A2C7C,$B8DD7266C7C223BB,$9328108D491369A5, |
$0679F8A3831286DA,$270767587DF5B35F,$A981F94E1FB518CF,$6B8D528955E4F104, |
$1667F44132622F26,$2AB7E521E7D6D896,$AC3E7D4627AEDD78,$7DEAA6C86786DE22, |
$1725738B5B65BDAE,$4BB14AB8C2045609,$592BBD3BA17A2E10,$C20CABC74A51E9CB, |
$6F70514B04F8A63B,$BC2071A496DE7484,$19538D597A4F950A,$F45747B7EFD361E0, |
$43BE4CC9603CF877,$C6F1A8051B4DBEF4,$B42F77D534E6DAFA,$40783062DB35BB1A), |
// box 5 |
($F5A96C292DEB0A4E,$211C9DF6EE653C51,$04DE5DDCBEEEF596,$E1E5B06F7457C19F, |
$74CA30F014A54FB6,$C296F9F7C5457D85,$7D4EE08A484D10B0,$AE87F2D0BF9B13AD, |
$8DF4BB480E89AFB7,$2D8B7A67D9A2D61E,$0F3559C8BD712ADB,$541BC7312F013338, |
$9EC4848B636D5164,$952F809F60F28E29,$28984D8CB28D6357,$D4B5F1DFC38E361F, |
$5674135F7076B373,$B791A330042172EC,$AB94C53BD4B4A6E4,$F17731F59305FFD8, |
$39C7A621801E1DCF,$20D1F7C13BA47C8E,$5E3DA912F95FACAA,$B1202A82E5B80731, |
$13303FC36DE4FED3,$2E29C43E5314168A,$861FBF5C0D1670FA,$6458B16AF3F771F1, |
$3043765BDCF642C9,$12FD55F4B825BE0C,$0A266E23D65E9F92,$6595DB5D2636312E, |
$85BD010587A0B06E,$9BD7B3600842E42D,$AA59AF0C0175E63B,$240FAA1D854A8918, |
$F464061EF82A4A91,$5C527D7CA6282CE1,$03A2BE598AB6C094,$40571B7776BDF8E9, |
$E4F687841F7874D6,$115FEBAD32937E98,$5108F0DA442E8671,$9CAB50E53C1AD12F, |
$33E1C8025640825D,$87D2D56BD8D73025,$C0F92D999A32FDCE,$62E938D8126E042C, |
$4A717554A0E3677B,$0BEB0414039FDF4D,$D6DA25B19CF9B654,$55D6AD06FAC073E7, |
$632452EFC7AF44F3,$B5FE775E5B56F2A7,$892AE694B0675A21,$7A32030F7C1525B2, |
$5D9F174B73E96C3E,$C35B93C010843D5A,$373F95DEE8AE77CB,$FB515FD6455B604A, |
$A9FB11558BC326AF,$22BE23AF64D3FCC5,$A8367B625E026670,$B8A4FAF8B9505837, |
$785DD7612362A5F9,$588C20A018C6D977,$EA0EB47B77C81ED2,$A6CE489D36B20C74, |
$0C97E79137C7EA4F,$7C838ABD9D8C506F,$57B97968A5B7F3AC,$6C110B277ADE6E28, |
$C785CE1CAE6AC8CC,$1581B6718C7D8B0E,$614B868198D8C4B8,$27AD14440FFC498C, |
$DB80A8177EFF1CC4,$472BF8F242E5CDEB,$8A8858CD3AD19AB5,$F60BD270A75DCADA, |
$43F5A52EFC0B387D,$6DDC6110AF1F2EF7,$F0BA5BC246C4BF07,$6FB3B57EF068AEBC, |
$18DB3BD76E7B219E,$903CB7740BDD3B60,$7BFF6938A9D4656D,$BDB7CD13D27FED7E, |
$051337EB6B2FB549,$77688EA99E138F22,$D9EF7C7921889C8F,$077CE38534583502, |
$F318E59BCC727F93,$B34FFEECBACF877A,$E9AC0A22FD7EDE46,$FC2DBC5371035548, |
$026FD46E5F77804B,$E53BEDB3CAB93409,$CC6ECA08ADF51781,$E028DA58A1968140, |
$3A6518780AA8DD5B,$CE011E66F28297CA,$A4A19CF369C58C3F,$C5EA1A72F11D4887, |
$C427704524DC0858,$4238CF1929CA78A2,$481EA13AFF94E730,$DF5EF5CBC011E952, |
$80AE36EEEC8F0527,$5AE3F4CE47B1593C,$CDA3A03F7834575E,$71D9071B7F8AFAFF, |
$CADF43BA4C6C625C,$1623082806CB4B9A,$17EE621FD30A0B45,$448946ABC8530D7F, |
$974054F13F850E62,$73B6D37520FD7AB4,$C8B097D4131BE217,$9F09EEBCB6AC11BB, |
$45442C9C1D924DA0,$1B79858EE4CDE10A,$0984D07A5CE85F06,$4CC0FCE6417A12A6, |
$99B8670E57356466,$AD254C89352DD339,$322CA2358381C282,$CFCC74512743D715, |
$6B6DE8A24E865B2A,$DA4DC220AB3E5C1B,$88E78CA365A61AFE,$939E092D816BFBF4, |
$CB12298D99AD2283,$EED0E9A7C926EB44,$98750D3982F424B9,$D5789BE8164F76C0, |
$BE15734A58C92DEA,$49D3CB0D2A55A7EF,$67FA0F337941B165,$8C39D17FDB48EF68, |
$25C2C02A508BC9C7,$349D2B876218B75F,$70146D2CAA4BBA20,$1C05660BD095D408, |
$FE42683D2E74D503,$9A1AD957DD83A4F2,$F2D58FAC19B33F4C,$81635CD9394E45F8, |
$B65CC907D1E03233,$DD3121A59F666919,$318E1C6C09370216,$8B4532FAEF10DA6A, |
$191651E0BBBA6141,$3F762F9361876812,$B96990CF6C9118E8,$B4331D698E97B278, |
$D822164EF449DC50,$84706B325261F0B1,$4EAF28881E0D92ED,$69023CCC11F1DB61, |
$66376504AC80F1BA,$0849BA4D89291FD9,$FF8F020AFBB595DC,$50C59AED91EFC6AE, |
$1DC80C3C055494D7,$1E6AB2658FE25443,$3D19FBFD3EF0E859,$FA9C35E1909A2095, |
$52AA4E83CE9846E5,$419A7140A37CB836,$A07FC12FD72B79A9,$68CF56FBC4309BBE, |
$01CD6A37D5C140DF,$9253631A54AABB2B,$D06BAC037D60C389,$295527BB674C2388, |
$D204786D221743C2,$0000000000000000,$F7C6B847729C8A05,$DCFC4B924AA729C6, |
$E38A64012B2041D4,$B28294DB6F0EC7A5,$9D663AD2E9DB91F0,$91F1DD43DE1C7BBF, |
$6086ECB64D198467,$59414A97CD0799A8,$ACE826BEE0EC93E6,$A56CF6C4BC04CCE0, |
$727BB942F53C3A6B,$6E7EDF4925A9EE63,$26607E73DA3D0953,$E75439DD95CEB442, |
$7990BD56F6A3E526,$ECBF3DC996516B0F,$76A5E49E4BD2CFFD,$968D3EC6EA444EBD, |
$5B2E9EF9927019E3,$6AA082959B471BF5,$BB0644A133E698A3,$830C88B76639C5B3, |
$E2470E36FEE1010B,$B0ED40B5307947EE,$355041B0B7D9F780,$8E560511843F6F23, |
$7F2134E4173A90FB,$2AF799E2EDFAE31C,$4BBC1F63752227A4,$F8F3E18FCFEDA0DE, |
$0D5A8DA6E206AA90,$2C4610500C6396C1,$DE939FFC15D0A98D,$AF4A98E76A5A5372, |
$8F9B6F2651FE2FFC,$36F2FFE93D6F3714,$0EF833FF68B06A04,$E69953EA400FF49D, |
$23734998B112BC1A,$3EBB45A4B44628CD,$1AB4EFB9310CA1D5,$2FE4AE0986D55655, |
$EBC3DE4CA2095E0D,$536724B41B59063A,$46E692C597248D34,$2B3AF3D5383BA3C3, |
$3BA8724FDF699D84,$C13447AE4FF3BD11,$4D0D96D194BB5279,$FDE0D664A4C21597, |
$D7174F864938F68B,$7EEC5ED3C2FBD024,$BFD8197D8D086D35,$4F6242BFCBCCD232, |
$A70322AAE3734CAB,$A3DD7F765D9DB93D,$94E2EAA8B533CEF6,$144CDC4659BCCBD1, |
$C648A42B7BAB8813,$F93E8BB81A2CE001,$BACB2E96E627D87C,$BC7AA72407BEADA1, |
$C97DFDE3C6DAA2C8,$A1B2AB1802EA3976,$1FA7D8525A23149C,$75075AC7C1640F69, |
$E861601528BF9E99,$A2101541885CF9E2,$EF1D83901CE7AB9B,$06B189B2E19975DD, |
$380ACC1655DF5D10,$1092819AE7523E47,$D3C9125AF7D6031D,$D1A6C634A8A18356, |
$5FF0C3252C9EEC75,$82C1E280B3F8856C,$ED7257FE43902BD0,$3CD491CAEB31A886), |
// box 6 |
($94AF9EB6FAD9E7DF,$9208AE5E03C94DDD,$1D8DE8D67158480B,$FD093CD2BA147AF8, |
$A45CEB22E6597CCF,$9BBDE6E77BF113DA,$E4EDF4B465FFFE5C,$7125622E4E8D2A2F, |
$1791B81B8F68430D,$B56A63D1902195C0,$A980832B30D2EE67,$4C0A7FB384862397, |
$ED58BC0D1DC7A05B,$5955D7F05C4D0637,$D2B9B1C8806FCF4E,$06A730E8F910AA02, |
$B8B60BD846AA0768,$45BF370AFCBE7D90,$16F6B0375EC370A1,$892276608B81AFD4, |
$DCCCC1B5D0EC08E7,$E856949162DF5F58,$82592E81A41A977E,$AC8EABB74FCA1164, |
$FAC9041692AFE356,$3B882D75331BA3BA,$A39CD3E6CEE2E561,$D077A190D7CCA9E3, |
$9C7DDE23534A8A74,$80973ED9F3B9F1D3,$CE535132209CB4E9,$AA299B5FB6DABB66, |
$2D7E9D426DD8D31B,$8A8B6E140D89FAD5,$6CA88AF83FD56224,$F5DB7C4713871753, |
$EEF1A4799BCFF55A,$76E55AEA6636B381,$8EE24EA4A33A367A,$25ACDDD7C44BBEB0, |
$9ADAEECBAA5A2076,$0E75707D5083C7A9,$2BD9ADAA94C87919,$19E4C866DFEB84A4, |
$129F9087F070BC0E,$D9C2E929AFF4F7E4,$6F01928CB9DD3725,$39463D2D64B8C517, |
$EBFF8CE5E4D70A59,$B40D6BFD418AA66C,$F21B44833B3C8EFD,$3654457CE5903112, |
$431807E205AED792,$B10343613E92596F,$0A1C50CDFE300B06,$778252C6B79D802D, |
$0CBB60250720A104,$E1E3DC281AE7015F,$0F1278518128F405,$47712752AB1D1B3D, |
$E24AC45C9CEF545E,$1CEAE0FAA0F37BA7,$9814FE93FDF946DB,$EC3FB421CC6C93F7, |
$833E26AD75B1A4D2,$6B68B23C176EFB8A,$4904572FFB9EDC94,$4BCA4777AC3DBA39, |
$2762CD8F93E8D81D,$9EB3CE7B04E9ECD9,$C2E8311727BC15ED,$EA9884C9357C39F5, |
$FC6E34FE6BBF4954,$13F898AB21DB8FA2,$B7A47389C782F36D,$7B3932E3B0BD2129, |
$AF27B3C3C9C24465,$B6C37BA51629C0C1,$84FE1E695D0A3D7C,$1A4DD01259E3D1A5, |
$AB4E9373677188CA,$90C6BE06546A2B70,$F37C4CAFEA97BD51,$647ACA6D96460F8F, |
$4EC46FEBD325453A,$3E8605E94C035CB9,$0DDC6809D68B92A8,$8BEC6638DC22C979, |
$67D3D219104E5A8E,$2ABEA58645634AB5,$5B9BC7A80BEE609A,$936FA672D2627E71, |
$7D9E020B49AD8B2B,$5832DFDC8DE6359B,$C7E6198B58A4EAEE,$D41E8120797F654C, |
$F4BC746BC22C24FF,$E084D404CB4C32F3,$48635F032A35EF38,$8757061DDB02687D, |
$522E8F1173D63E9D,$BCDF2B68E819CBC7,$BF76331C6E119EC6,$08D24095A9936DAB, |
$728C7A5AC8857F2E,$D110A9BC06679A4F,$1F43F88E26FB2EA6,$B2AA5B15B89A0C6E, |
$4AAD4F5B7D968995,$9FD4C657D542DF75,$323D65CC4B23FDBD,$C38F393BF6172641, |
$A152C3BE994183CC,$9D1AD60F82E1B9D8,$E744ECC0E3F7AB5D,$38213501B513F6BB, |
$ADE9A39B9E6122C8,$37334D50343B02BE,$55EEB7D55B6DA733,$970686C27CD1B2DE, |
$427F0FCED405E43E,$C026214F701F7340,$40B11F9683A68293,$02CE105857A366AD, |
$7E371A7FCFA5DE2A,$FFC72C8AEDB71C55,$68C1AA489166AE8B,$C68111A7890FD942, |
$79F722BBE71E4784,$D579890CA8D456E0,$70426A029F261983,$B0644B4DEF396AC3, |
$DB0CF971F8579149,$5489BFF98AC6949F,$046920B0AEB3CCAF,$7CF90A279806B887, |
$050E289C7F18FF03,$651DC24147ED3C23,$5E95EF3474F69F99,$6DCF82D4EE7E5188, |
$8F854688729105D6,$81F036F52212C27F,$B9D103F4970134C4,$5349873DA27D0D31, |
$20A2F54BBB5341B3,$F0D554DB6C9FE850,$07C038C428BB99AE,$30F375941C809B10, |
$3FE10DC59DA86F15,$46162F7E7AB62891,$E623E4EC325C98F1,$FEA024A63C1C2FF9, |
$349A5524B23357BF,$35FD5D0863986413,$96618EEEAD7A8172,$CB5D79AE5F844BEA, |
$21C5FD676AF8721F,$5720A78D0CCEC19E,$F6726433958F4252,$8D4B56D02532637B, |
$24CBD5FB15E08D1C,$3AEF2559E2B09016,$5AFCCF84DA455336,$51879765F5DE6B9C, |
$2917BDF2C36B1FB4,$A7F5F356605129CE,$C1412963A1B440EC,$3D2F1D9DCA0B09B8, |
$A53BE30E37F24F63,$5FF2E718A55DAC35,$A2FBDBCA1F49D6CD,$F7156C1F442471FE, |
$7A5E3ACF61161285,$CA3A71828E2F7846,$1B2AD83E8848E209,$A8E78B07E179DDCB, |
$EF96AC554A64C6F6,$0000000000000000,$6013EADD38F5C320,$3C4815B11BA03A14, |
$09B548B978385E07,$226CE513ECF0271E,$63BAF2A9BEFD9621,$44D83F262D154E3C, |
$CDFA4946A694E1E8,$113688F37678E90F,$859916458CA10ED0,$C52809D30F078C43, |
$4D6D779F552D103B,$1E24F0A2F7501D0A,$0167082CD1AB33AC,$1438A06F0960160C, |
$F9601C6214A7B657,$A035CB9248EAB060,$50E09F4924755830,$D7B79954FF77304D, |
$E58AFC98B454CDF0,$03A9187486085501,$62DDFA856F56A58D,$C44F01FFDEACBFEF, |
$73EB7276192E4C82,$D6D091782EDC03E1,$FBAE0C3A4304D0FA,$9973F6BF2C527577, |
$105180DFA7D3DAA3,$2605C5A34243EBB1,$91A1B62A85C118DC,$C99369F608272D47, |
$5D3CF740F2FECA98,$CF34591EF1378745,$C8F461DAD98C1EEB,$0B7B58E12F9B38AA, |
$E32DCC704D4467F2,$754C429EE03EE680,$D3DEB9E451C4FCE2,$6E669AA068760489, |
$66B4DA35C1E56922,$4FA367C7028E7696,$BA781B80110961C5,$41D617BA520DB13F, |
$335A6DE09A88CE11,$DF65D9C156E45DE6,$CC9D416A773FD244,$5C5BFF6C2355F934, |
$2870B5DE12C02C18,$155FA843D8CB25A0,$78902A9736B57428,$AE40BBEF186977C9, |
$88457E4C5A2A9C78,$6A0FBA10C6C5C826,$7F5012531E0EED86,$8C2C5EFCF49950D7, |
$31947DB8CD2BA8BC,$2C19956EBC73E0B7,$230BED3F3D5B14B2,$69A6A26440CD9D27, |
$86300E310AA95BD1,$B3CD533969313FC2,$1883C04A0E40B708,$F1B25CF7BD34DBFC, |
$2FB08D1A3A7BB5B6,$D8A5E1057E5FC448,$DDABC99901473B4B,$DE02D1ED874F6E4A, |
$BDB8234439B2F86B,$5647AFA1DD65F232,$2ED78536EBD0861A,$E9319CBDB3746CF4, |
$A692FB7AB1FA1A62,$742B4AB23195D52C,$95C8969A2B72D473,$6174E2F1E95EF08C, |
$F807144EC50C85FB,$BE113B30BFBAAD6A,$DA6BF15D29FCA2E5,$BB1F13ACC0A25269), |
// box 7 |
($C22B27F0F9E37BF9,$93FAD23F0955EF09,$32ED4B84A22A91A2,$3898B57BCC61B1CC, |
$55825BA9AD98E5AD,$B2EEB8069421EC94,$C7EB5875CE3C6BCE,$4B1DAC5D1F45851F, |
$C16BA1204705D847,$C5380F461A2BA91A,$B908971A909BAD90,$303E1CB7763D5376, |
$E6FF324C53486853,$6D1AEED261F95461,$0193D1E36AF1616A,$51D1F5CFF0B694F0, |
$29B2C3F52728E127,$112A768EEB4950EB,$8FB672F86F9F4D6F,$F0C66C745BC9EA5B, |
$3F8B9DCD2FA9632F,$65BC471EDBA5B6DB,$4D9D5508967C3696,$3A4BE24818767318, |
$2794936C144DB014,$2AF2452599CE4299,$4A8E7DBE75B4E475,$9DDC82A63A30BE3A, |
$ADE29E114C0DED4C,$D1D2064DC6BDE9C6,$7DA349BFE04165E0,$6B9A1787E8C0E7E8, |
$A54437DDF6510FF6,$2254ECE92392A023,$79F0E7D9BD6F14BD,$57510C9A798F2779, |
$346DB2D12B13222B,$54118A4AC76984C7,$EFCA4A6383E5EB83,$CA8D8E3C43BF9943, |
$FC336BDEBCBB79BC,$3E184C2E45580245,$F495C21206E79B06,$FF73ED0E025DDA02, |
$4228D472CFE806CF,$BCC8E89FA744BDA7,$AB626744C5345EC5,$B6BD1660C90F9DC9, |
$B72EC783A3FEFCA3,$8BE5DC9E32B13C32,$485D2A8DA1A326A1,$C6788996A4CD0AA4, |
$40FB83411BFFC41B,$08A6A9CCBA5CE2BA,$F386EAA4E52F49E5,$1ACC5992EFF311EF, |
$A2571F6B1599DD15,$44A82D2746D1B546,$70C59FF66DC2976D,$8D6525CBBB888FBB, |
$963AADBA3E8AFF3E,$7C30985C8AB0048A,$607C389BEC7AA6EC,$A822E1947BD2FD7B, |
$034086D0BEE6A3BE,$66FCC1CE65431565,$B37D69E5FED08DFE,$2F323AA0AE1152AE, |
$56C2DD79137E4613,$31ADCD541CCC321C,$DFF456D4F5D8B8F5,$F9F3145B8B64698B, |
$764566A3E4FB24E4,$0CF507AAE77293E7,$59775C034AEA764A,$B89B46F9FA6ACCFA, |
$E8D962D5602D3960,$17AA8FDB6270E362,$1C4CA0C766CAA266,$2DE16D937A06907A, |
$2547C45FC05A72C0,$0FB5817A59943059,$0680F9558939B389,$16395E3808818208, |
$AC714FF226FC8C26,$A9B1307711239C11,$EC8ACCB33D03483D,$6C893F310B08350B, |
$C4ABDEA570DAC870,$BA4811CA2E7D0E2E,$F155BD9731388B31,$DD2701E721CF7A21, |
$E94AB3360ADC580A,$23C73D0A4963C149,$5CB723867D35667D,$5042242C9A47F59A, |
$198CDF425115B251,$0A75FEFF6E4B206E,$FDA0BA3DD64A18D6,$CEDE205A1E91E81E, |
$D041D7AEAC4C88AC,$E42C657F875FAA87,$36BEE5E2FF04E0FF,$6FC9B9E1B5EE96B5, |
$998F2CC0671ECF67,$D301517E12AA2B12,$AEA218C1F2EB4EF2,$DA342951C207A8C2, |
$61EFE978868BC786,$7F701E8C3456A734,$0BE62F1C04BA4104,$9129850CDD422DDD, |
$D6C12EFB25753B25,$E33F4DC964977864,$1579D8E8B66721B6,$F860C5B8E19508E1, |
$7496319030ECE630,$88A55A4E8C579F8C,$CF4DF1B974608974,$10B9A76D81B83181, |
$0E26509933655133,$43BB0591A51967A5,$926903DC63A48E63,$9C4F534550C1DF50, |
$3BD833AB72871272,$A4D7E63E9CA06E9C,$B46E41531D185F1D,$126AF05E55AFF355, |
$24D415BCAAAB13AA,$1E9FF7F4B2DD60B2,$05C07F8537DF1037,$467B7A1492C67792, |
$2087BBDAF78562F7,$819022615CFA1C5C,$CD9EA68AA0774BA0,$A79760EE2246CD22, |
$8343755288EDDE88,$58E48DE0201B1720,$7216C8C5B9D555B9,$372D340195F58195, |
$A11799BBAB7F7EAB,$9F0FD595EE277CEE,$676F102D0FB2740F,$9E9C047684D61D84, |
$49CEFB6ECB5247CB,$D41279C8F162F9F1,$1F0C2617D82C01D8,$97A97C59547B9E54, |
$E76CE3AF39B90939,$C3B8F61393121A93,$5BA40B309EFDB49E,$EA0A35E6B43AFBB4, |
$5A37DAD3F40CD5F4,$14EA090BDC9640DC,$5E6474B5A922A4A9,$FEE03CED68ACBB68, |
$071328B6E3C8D2E3,$5302A2FC24A15624,$85C38C0701D46D01,$3D58CAFEFBBEA1FB, |
$84505DE46B250C6B,$642F96FDB154D7B1,$BF886E4F19A21E19,$02D35733D417C2D4, |
$68DA915756264456,$8710DB34D5C3AFD5,$0D66D6498D83F28D,$7B23B0EA6978D669, |
$1B5F887185027085,$3CCB1B1D914FC091,$0453AE665D2E715D,$CB1E5FDF294EF829, |
$F6469521D2F059D2,$B03DEF3540362E40,$633CBE4B529C0552,$F7D544C2B80138B8, |
$7AB061090389B703,$0000000000000000,$DBA7F8B2A8F6C9A8,$35FE633241E24341, |
$21146A399D74039D,$D581A82B9B93989B,$0935782FD0AD83D0,$5FF7A556C3D3C5C3, |
$AF31C922981A2F98,$90BA54EFB7B34CB7,$5291731F4E50374E,$C0F870C32DF4B92D, |
$7EE3CF6F5EA7C65E,$E07FCB19DA71DBDA,$4EDDD3D8289A9528,$13F921BD3F5E923F, |
$F50613F16C16FA6C,$981CFD230DEFAE0D,$4C0E84EBFC8D57FC,$82D0A4B1E21CBFE2, |
$89368BADE6A6FEE6,$D292809D785B4A78,$47E8ABF7F83716F8,$8E25A31B056E2C05, |
$D752FF184F845A4F,$CC0D7769CA862ACA,$694940B43CD7253C,$2EA1EB43C4E033C4, |
$DE6787379F29D99F,$181F0EA13BE4D33B,$416852A2710EA571,$62AF6FA8386D6438, |
$A0844858C18E1FC1,$337E9A67C8DBF0C8,$2C72BC7010F7F110,$BD5B397CCDB5DCCD, |
$D8E77E6216106A16,$86830AD7BF32CEBF,$4F4E023B426BF442,$E5BFB49CEDAECBED, |
$8A760D7D58405D58,$E2AC9C2A0E66190E,$B5FD90B077E93E77,$DCB4D0044B3E1B4B, |
$453BFCC42C20D42C,$ED191D5057F22957,$E1EC1AFAB080BAB0,$EE599B80E9148AE9, |
$2607428F7EBCD17E,$5D24F26517C40717,$6A09C66482318682,$A604B10D48B7AC48, |
$BE1BBFAC73537F73,$282112164DD9804D,$7505E0735A1D875A,$73851926D32434D3, |
$D974AF817CE10B7C,$EB99E405DECB9ADE,$9B5C7BF3B3090DB3,$FAB3928B3582CA35, |
$8003F382360B7D36,$94E9FA89EA9D3DEA,$B1AE3ED62AC74F2A,$9ACFAA10D9F86CD9, |
$390B6498A690D0A6,$F2153B478FDE288F,$71564E150733F607,$A3C4CE887F68BC7F, |
$AAF1B6A7AFC53FAF,$1DDF71240C3BC30C,$77D6B7408E0A458E,$2B6194C6F33F23F3, |
$C9CD08ECFD593AFD,$C85ED90F97A85B97,$8CF6F428D179EED1,$957A2B6A806C5C80, |
$BBDBC029448C6F44,$7863363AD79E75D7,$6E5A6802DF1FF7DF,$FB2043685F73AB5F)); |
{$ENDIF CPU64} |
Skipjack_Data: array[0..255] of Byte = ( |
$A3,$D7,$09,$83,$F8,$48,$F6,$F4,$B3,$21,$15,$78,$99,$B1,$AF,$F9, |
$E7,$2D,$4D,$8A,$CE,$4C,$CA,$2E,$52,$95,$D9,$1E,$4E,$38,$44,$28, |
$0A,$DF,$02,$A0,$17,$F1,$60,$68,$12,$B7,$7A,$C3,$E9,$FA,$3D,$53, |
$96,$84,$6B,$BA,$F2,$63,$9A,$19,$7C,$AE,$E5,$F5,$F7,$16,$6A,$A2, |
$39,$B6,$7B,$0F,$C1,$93,$81,$1B,$EE,$B4,$1A,$EA,$D0,$91,$2F,$B8, |
$55,$B9,$DA,$85,$3F,$41,$BF,$E0,$5A,$58,$80,$5F,$66,$0B,$D8,$90, |
$35,$D5,$C0,$A7,$33,$06,$65,$69,$45,$00,$94,$56,$6D,$98,$9B,$76, |
$97,$FC,$B2,$C2,$B0,$FE,$DB,$20,$E1,$EB,$D6,$E4,$DD,$47,$4A,$1D, |
$42,$ED,$9E,$6E,$49,$3C,$CD,$43,$27,$D2,$07,$D4,$DE,$C7,$67,$18, |
$89,$CB,$30,$1F,$8D,$C6,$8F,$AA,$C8,$74,$DC,$C9,$5D,$5C,$31,$A4, |
$70,$88,$61,$2C,$9F,$0D,$2B,$87,$50,$82,$54,$64,$26,$7D,$03,$40, |
$34,$4B,$1C,$73,$D1,$C4,$FD,$3B,$CC,$FB,$7F,$AB,$E6,$3E,$5B,$A5, |
$AD,$04,$23,$9C,$14,$51,$22,$F0,$29,$79,$71,$7E,$FF,$8C,$0E,$E2, |
$0C,$EF,$BC,$72,$75,$6F,$37,$A1,$EC,$D3,$8E,$62,$8B,$86,$10,$E8, |
$08,$77,$11,$BE,$92,$4F,$24,$C5,$32,$36,$9D,$CF,$F3,$A6,$BB,$AC, |
$5E,$6C,$A9,$13,$57,$25,$B5,$E3,$BD,$A8,$3A,$01,$05,$59,$2A,$46 |
); |
DES_PC1: array[0..55] of Byte = ( |
56, 48, 40, 32, 24, 16, 8, 0, 57, 49, 41, 33, 25, 17, |
9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, |
62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, |
13, 5, 60, 52, 44, 36, 28, 20, 12, 4, 27, 19, 11, 3 |
); |
DES_PC2: array[0..47] of Byte = ( |
13, 16, 10, 23, 0, 4, 2, 27, 14, 5, 20, 9, |
22, 18, 11, 3, 25, 7, 15, 6, 26, 19, 12, 1, |
40, 51, 30, 36, 46, 54, 29, 39, 50, 44, 32, 47, |
43, 48, 38, 55, 33, 52, 45, 41, 49, 35, 28, 31 |
); |
DES_Data: array[0..7, 0..63] of UInt32 = ( |
($00200000,$04200002,$04000802,$00000000,$00000800,$04000802,$00200802,$04200800, |
$04200802,$00200000,$00000000,$04000002,$00000002,$04000000,$04200002,$00000802, |
$04000800,$00200802,$00200002,$04000800,$04000002,$04200000,$04200800,$00200002, |
$04200000,$00000800,$00000802,$04200802,$00200800,$00000002,$04000000,$00200800, |
$04000000,$00200800,$00200000,$04000802,$04000802,$04200002,$04200002,$00000002, |
$00200002,$04000000,$04000800,$00200000,$04200800,$00000802,$00200802,$04200800, |
$00000802,$04000002,$04200802,$04200000,$00200800,$00000000,$00000002,$04200802, |
$00000000,$00200802,$04200000,$00000800,$04000002,$04000800,$00000800,$00200002), |
($00000100,$02080100,$02080000,$42000100,$00080000,$00000100,$40000000,$02080000, |
$40080100,$00080000,$02000100,$40080100,$42000100,$42080000,$00080100,$40000000, |
$02000000,$40080000,$40080000,$00000000,$40000100,$42080100,$42080100,$02000100, |
$42080000,$40000100,$00000000,$42000000,$02080100,$02000000,$42000000,$00080100, |
$00080000,$42000100,$00000100,$02000000,$40000000,$02080000,$42000100,$40080100, |
$02000100,$40000000,$42080000,$02080100,$40080100,$00000100,$02000000,$42080000, |
$42080100,$00080100,$42000000,$42080100,$02080000,$00000000,$40080000,$42000000, |
$00080100,$02000100,$40000100,$00080000,$00000000,$40080000,$02080100,$40000100), |
($00000208,$08020200,$00000000,$08020008,$08000200,$00000000,$00020208,$08000200, |
$00020008,$08000008,$08000008,$00020000,$08020208,$00020008,$08020000,$00000208, |
$08000000,$00000008,$08020200,$00000200,$00020200,$08020000,$08020008,$00020208, |
$08000208,$00020200,$00020000,$08000208,$00000008,$08020208,$00000200,$08000000, |
$08020200,$08000000,$00020008,$00000208,$00020000,$08020200,$08000200,$00000000, |
$00000200,$00020008,$08020208,$08000200,$08000008,$00000200,$00000000,$08020008, |
$08000208,$00020000,$08000000,$08020208,$00000008,$00020208,$00020200,$08000008, |
$08020000,$08000208,$00000208,$08020000,$00020208,$00000008,$08020008,$00020200), |
($01010400,$00000000,$00010000,$01010404,$01010004,$00010404,$00000004,$00010000, |
$00000400,$01010400,$01010404,$00000400,$01000404,$01010004,$01000000,$00000004, |
$00000404,$01000400,$01000400,$00010400,$00010400,$01010000,$01010000,$01000404, |
$00010004,$01000004,$01000004,$00010004,$00000000,$00000404,$00010404,$01000000, |
$00010000,$01010404,$00000004,$01010000,$01010400,$01000000,$01000000,$00000400, |
$01010004,$00010000,$00010400,$01000004,$00000400,$00000004,$01000404,$00010404, |
$01010404,$00010004,$01010000,$01000404,$01000004,$00000404,$00010404,$01010400, |
$00000404,$01000400,$01000400,$00000000,$00010004,$00010400,$00000000,$01010004), |
($10001040,$00001000,$00040000,$10041040,$10000000,$10001040,$00000040,$10000000, |
$00040040,$10040000,$10041040,$00041000,$10041000,$00041040,$00001000,$00000040, |
$10040000,$10000040,$10001000,$00001040,$00041000,$00040040,$10040040,$10041000, |
$00001040,$00000000,$00000000,$10040040,$10000040,$10001000,$00041040,$00040000, |
$00041040,$00040000,$10041000,$00001000,$00000040,$10040040,$00001000,$00041040, |
$10001000,$00000040,$10000040,$10040000,$10040040,$10000000,$00040000,$10001040, |
$00000000,$10041040,$00040040,$10000040,$10040000,$10001000,$10001040,$00000000, |
$10041040,$00041000,$00041000,$00001040,$00001040,$00040040,$10000000,$10041000), |
($20000010,$20400000,$00004000,$20404010,$20400000,$00000010,$20404010,$00400000, |
$20004000,$00404010,$00400000,$20000010,$00400010,$20004000,$20000000,$00004010, |
$00000000,$00400010,$20004010,$00004000,$00404000,$20004010,$00000010,$20400010, |
$20400010,$00000000,$00404010,$20404000,$00004010,$00404000,$20404000,$20000000, |
$20004000,$00000010,$20400010,$00404000,$20404010,$00400000,$00004010,$20000010, |
$00400000,$20004000,$20000000,$00004010,$20000010,$20404010,$00404000,$20400000, |
$00404010,$20404000,$00000000,$20400010,$00000010,$00004000,$20400000,$00404010, |
$00004000,$00400010,$20004010,$00000000,$20404000,$20000000,$00400010,$20004010), |
($00802001,$00002081,$00002081,$00000080,$00802080,$00800081,$00800001,$00002001, |
$00000000,$00802000,$00802000,$00802081,$00000081,$00000000,$00800080,$00800001, |
$00000001,$00002000,$00800000,$00802001,$00000080,$00800000,$00002001,$00002080, |
$00800081,$00000001,$00002080,$00800080,$00002000,$00802080,$00802081,$00000081, |
$00800080,$00800001,$00802000,$00802081,$00000081,$00000000,$00000000,$00802000, |
$00002080,$00800080,$00800081,$00000001,$00802001,$00002081,$00002081,$00000080, |
$00802081,$00000081,$00000001,$00002000,$00800001,$00002001,$00802080,$00800081, |
$00002001,$00002080,$00800000,$00802001,$00000080,$00800000,$00002000,$00802080), |
($80108020,$80008000,$00008000,$00108020,$00100000,$00000020,$80100020,$80008020, |
$80000020,$80108020,$80108000,$80000000,$80008000,$00100000,$00000020,$80100020, |
$00108000,$00100020,$80008020,$00000000,$80000000,$00008000,$00108020,$80100000, |
$00100020,$80000020,$00000000,$00108000,$00008020,$80108000,$80100000,$00008020, |
$00000000,$00108020,$80100020,$00100000,$80008020,$80100000,$80108000,$00008000, |
$80100000,$80008000,$00000020,$80108020,$00108020,$00000020,$00008000,$80000000, |
$00008020,$80108000,$00100000,$80000020,$00100020,$80008020,$80000020,$00100020, |
$00108000,$00000000,$80008000,$00008020,$80000000,$80100020,$80108020,$00108000) |
); |
NewDES_Data: array[0..255] of Byte = ( |
32, 137, 239, 188, 102, 125, 221, 72, 212, 68, 81, 37, 86, 237, 147, 149, |
70, 229, 17, 124, 115, 207, 33, 20, 122, 143, 25, 215, 51, 183, 138, 142, |
146, 211, 110, 173, 1, 228, 189, 14, 103, 78, 162, 36, 253, 167, 116, 255, |
158, 45, 185, 50, 98, 168, 250, 235, 54, 141, 195, 247, 240, 63, 148, 2, |
224, 169, 214, 180, 62, 22, 117, 108, 19, 172, 161, 159, 160, 47, 43, 171, |
194, 175, 178, 56, 196, 112, 23, 220, 89, 21, 164, 130, 157, 8, 85, 251, |
216, 44, 94, 179, 226, 38, 90, 119, 40, 202, 34, 206, 35, 69, 231, 246, |
29, 109, 74, 71, 176, 6, 60, 145, 65, 13, 77, 151, 12, 127, 95, 199, |
57, 101, 5, 232, 150, 210, 129, 24, 181, 10, 121, 187, 48, 193, 139, 252, |
219, 64, 88, 233, 96, 128, 80, 53, 191, 144, 218, 11, 106, 132, 155, 104, |
91, 136, 31, 42, 243, 66, 126, 135, 30, 26, 87, 186, 182, 154, 242, 123, |
82, 166, 208, 39, 152, 190, 113, 205, 114, 105, 225, 84, 73, 163, 99, 111, |
204, 61, 200, 217, 170, 15, 198, 28, 192, 254, 134, 234, 222, 7, 236, 248, |
201, 41, 177, 156, 92, 131, 67, 249, 245, 184, 203, 9, 241, 0, 27, 46, |
133, 174, 75, 18, 93, 209, 100, 120, 76, 213, 16, 83, 4, 107, 140, 52, |
58, 55, 3, 244, 97, 197, 238, 227, 118, 49, 79, 230, 223, 165, 153, 59 |
); |
{$IFDEF RESTORE_RANGECHECKS}{$R+}{$ENDIF} |
{$IFDEF RESTORE_OVERFLOWCHECKS}{$Q+}{$ENDIF} |
implementation |
end. |
/trunk/Decoder5/VCL_DEC/DECDataHash.pas |
---|
0,0 → 1,2659 |
{***************************************************************************** |
The DEC team (see file NOTICE.txt) licenses this file |
to you under the Apache License, Version 2.0 (the |
"License"); you may not use this file except in compliance |
with the License. A copy of this licence is found in the root directory |
of this project in the file LICENCE.txt or alternatively 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. |
*****************************************************************************} |
/// <summary> |
/// Data Arrays for the Hash and Cipher functions |
/// </summary> |
unit DECDataHash; |
interface |
{$INCLUDE DECOptions.inc} |
{$IFOPT Q+}{$DEFINE RESTORE_OVERFLOWCHECKS}{$Q-}{$ENDIF} |
{$IFOPT R+}{$DEFINE RESTORE_RANGECHECKS}{$R-}{$ENDIF} |
const |
MD2_PISubst: array[Byte] of UInt32 = ( |
41, 46, 67, 201, 162, 216, 124, 1, 61, 54, 84, 161, 236, 240, 6, 19, |
98, 167, 5, 243, 192, 199, 115, 140, 152, 147, 43, 217, 188, 76, 130, 202, |
30, 155, 87, 60, 253, 212, 224, 22, 103, 66, 111, 24, 138, 23, 229, 18, |
190, 78, 196, 214, 218, 158, 222, 73, 160, 251, 245, 142, 187, 47, 238, 122, |
169, 104, 121, 145, 21, 178, 7, 63, 148, 194, 16, 137, 11, 34, 95, 33, |
128, 127, 93, 154, 90, 144, 50, 39, 53, 62, 204, 231, 191, 247, 151, 3, |
255, 25, 48, 179, 72, 165, 181, 209, 215, 94, 146, 42, 172, 86, 170, 198, |
79, 184, 56, 210, 150, 164, 125, 182, 118, 252, 107, 226, 156, 116, 4, 241, |
69, 157, 112, 89, 100, 113, 135, 32, 134, 91, 207, 101, 230, 45, 168, 2, |
27, 96, 37, 173, 174, 176, 185, 246, 28, 70, 97, 105, 52, 64, 126, 15, |
85, 71, 163, 35, 221, 81, 175, 58, 195, 92, 249, 206, 186, 197, 234, 38, |
44, 83, 13, 110, 133, 40, 132, 9, 211, 223, 205, 244, 65, 129, 77, 82, |
106, 220, 55, 200, 108, 193, 171, 250, 36, 225, 123, 8, 12, 189, 177, 74, |
120, 136, 149, 139, 227, 99, 232, 109, 233, 203, 213, 254, 59, 0, 29, 57, |
242, 239, 183, 14, 102, 88, 208, 228, 166, 119, 114, 248, 235, 117, 75, 10, |
49, 68, 80, 180, 143, 237, 31, 26, 219, 153, 141, 51, 159, 17, 131, 20 |
); |
Haval_Data: array[0..127] of UInt32 = ( |
$452821E6,$38D01377,$BE5466CF,$34E90C6C,$C0AC29B7,$C97C50DD,$3F84D5B5,$B5470917, |
$9216D5D9,$8979FB1B,$D1310BA6,$98DFB5AC,$2FFD72DB,$D01ADFB7,$B8E1AFED,$6A267E96, |
$BA7C9045,$F12C7F99,$24A19947,$B3916CF7,$0801F2E2,$858EFC16,$636920D8,$71574E69, |
$A458FEA3,$F4933D7E,$0D95748F,$728EB658,$718BCD58,$82154AEE,$7B54A41D,$C25A59B5, |
$9C30D539,$2AF26013,$C5D1B023,$286085F0,$CA417918,$B8DB38EF,$8E79DCB0,$603A180E, |
$6C9E0E8B,$B01E8A3E,$D71577C1,$BD314B27,$78AF2FDA,$55605C60,$E65525F3,$AA55AB94, |
$57489862,$63E81440,$55CA396A,$2AAB10B6,$B4CC5C34,$1141E8CE,$A15486AF,$7C72E993, |
$B3EE1411,$636FBC2A,$2BA9C55D,$741831F6,$CE5C3E16,$9B87931E,$AFD6BA33,$6C24CF5C, |
$7A325381,$28958677,$3B8F4898,$6B4BB9AF,$C4BFE81B,$66282193,$61D809CC,$FB21A991, |
$487CAC60,$5DEC8032,$EF845D5D,$E98575B1,$DC262302,$EB651B88,$23893E81,$D396ACC5, |
$0F6D6FF3,$83F44239,$2E0B4482,$A4842004,$69C8F04A,$9E1F9B5E,$21C66842,$F6E96C9A, |
$670C9C61,$ABD388F0,$6A51A0D2,$D8542F68,$960FA728,$AB5133A3,$6EEF0B6C,$137A3BE4, |
$BA3BF050,$7EFB2A98,$A1F1651D,$39AF0176,$66CA593E,$82430E88,$8CEE8619,$456F9FB4, |
$7D84A5C3,$3B8B5EBE,$E06F75D8,$85C12073,$401A449F,$56C16AA6,$4ED3AA62,$363F7706, |
$1BFEDF72,$429B023D,$37D0D724,$D00A1248,$DB0FEAD3,$49F1C09B,$075372C9,$80991B7B, |
$25D479D8,$F6E8DEF7,$E3FE501A,$B6794C3B,$976CE0BD,$04C006BA,$C1A94FB6,$409F60C4 |
); |
Haval_Offset: array[0..127] of Byte = ( |
5, 14, 26, 18, 11, 28, 7, 16, 0, 23, 20, 22, 1, 10, 4, 8, |
30, 3, 21, 9, 17, 24, 29, 6, 19, 12, 15, 13, 2, 25, 31, 27, |
19, 9, 4, 20, 28, 17, 8, 22, 29, 14, 25, 12, 24, 30, 16, 26, |
31, 15, 7, 3, 1, 0, 18, 27, 13, 6, 21, 10, 23, 11, 5, 2, |
24, 4, 0, 14, 2, 7, 28, 23, 26, 6, 30, 20, 18, 25, 19, 3, |
22, 11, 31, 21, 8, 27, 12, 9, 1, 29, 5, 15, 17, 10, 16, 13, |
27, 3, 21, 26, 17, 11, 20, 29, 19, 0, 12, 7, 13, 8, 31, 10, |
5, 9, 14, 30, 18, 6, 28, 24, 2, 23, 16, 22, 4, 1, 25, 15 |
); |
Snefru_Data: array[0..15, 0..255] of UInt32 = ( |
($64F9001B,$FEDDCDF6,$7C8FF1E2,$11D71514,$8B8C18D3,$DDDF881E,$6EAB5056,$88CED8E1, |
$49148959,$69C56FD5,$B7994F03,$0FBCEE3E,$3C264940,$21557E58,$E14B3FC2,$2E5CF591, |
$DCEFF8CE,$092A1648,$BE812936,$FF7B0C6A,$D5251037,$AFA448F1,$7DAFC95A,$1EA69C3F, |
$A417ABE7,$5890E423,$B0CB70C0,$C85025F7,$244D97E3,$1FF3595F,$C4EC6396,$59181E17, |
$E635B477,$354E7DBF,$796F7753,$66EB52CC,$77C3F995,$32E3A927,$80CCAED6,$4E2BE89D, |
$375BBD28,$AD1A3D05,$2B1B42B3,$16C44C71,$4D54BFA8,$E57DDC7A,$EC6D8144,$5A71046B, |
$D8229650,$87FC8F24,$CBC60E09,$B6390366,$D9F76092,$D393A70B,$1D31A08A,$9CD971C9, |
$5C1EF445,$86FAB694,$FDB44165,$8EAAFCBE,$4BCAC6EB,$FB7A94E5,$5789D04E,$FA13CF35, |
$236B8DA9,$4133F000,$6224261C,$F412F23B,$E75E56A4,$30022116,$BAF17F1F,$D09872F9, |
$C1A3699C,$F1E802AA,$0DD145DC,$4FDCE093,$8D8412F0,$6CD0F376,$3DE6B73D,$84BA737F, |
$B43A30F2,$44569F69,$00E4EACA,$B58DE3B0,$959113C8,$D62EFEE9,$90861F83,$CED69874, |
$2F793CEE,$E8571C30,$483665D1,$AB07B031,$914C844F,$15BF3BE8,$2C3F2A9A,$9EB95FD4, |
$92E7472D,$2297CC5B,$EE5F2782,$5377B562,$DB8EBBCF,$F961DEDD,$C59B5C60,$1BD3910D, |
$26D206AD,$B28514D8,$5ECF6B52,$7FEA78BB,$504879AC,$ED34A884,$36E51D3C,$1753741D, |
$8C47CAED,$9D0A40EF,$3145E221,$DA27EB70,$DF730BA3,$183C8789,$739AC0A6,$9A58DFC6, |
$54B134C1,$AC3E242E,$CC493902,$7B2DDA99,$8F15BC01,$29FD38C7,$27D5318F,$604AAFF5, |
$F29C6818,$C38AA2EC,$1019D4C3,$A8FB936E,$20ED7B39,$0B686119,$89A0906F,$1CC7829E, |
$9952EF4B,$850E9E8C,$CD063A90,$67002F8E,$CFAC8CB7,$EAA24B11,$988B4E6C,$46F066DF, |
$CA7EEC08,$C7BBA664,$831D17BD,$63F575E6,$9764350E,$47870D42,$026CA4A2,$8167D587, |
$61B6ADAB,$AA6564D2,$70DA237B,$25E1C74A,$A1C901A0,$0EB0A5DA,$7670F741,$51C05AEA, |
$933DFA32,$0759FF1A,$56010AB8,$5FDECB78,$3F32EDF8,$AEBEDBB9,$39F8326D,$D20858C5, |
$9B638BE4,$A572C80A,$28E0A19F,$432099FC,$3A37C3CD,$BF95C585,$B392C12A,$6AA707D7, |
$52F66A61,$12D483B1,$96435B5E,$3E75802B,$3BA52B33,$A99F51A5,$BDA1E157,$78C2E70C, |
$FCAE7CE0,$D1602267,$2AFFAC4D,$4A510947,$0AB2B83A,$7A04E579,$340DFD80,$B916E922, |
$E29D5E9B,$F5624AF4,$4CA9D9AF,$6BBD2CFE,$E3B7F620,$C2746E07,$5B42B9B6,$A06919BC, |
$F0F2C40F,$72217AB5,$14C19DF3,$F3802DAE,$E094BEB4,$A2101AFF,$0529575D,$55CDB27C, |
$A33BDDB2,$6528B37D,$740C05DB,$E96A62C4,$40782846,$6D30D706,$BBF48E2C,$BCE2D3DE, |
$049E37FA,$01B5E634,$2D886D8D,$7E5A2E7E,$D7412013,$06E90F97,$E45D3EBA,$B8AD3386, |
$13051B25,$0C035354,$71C89B75,$C638FBD0,$197F11A1,$EF0F08FB,$F8448651,$38409563, |
$452F4443,$5D464D55,$03D8764C,$B1B8D638,$A70BBA2F,$94B3D210,$EB6692A7,$D409C2D9, |
$68838526,$A6DB8A15,$751F6C98,$DE769A88,$C9EE4668,$1A82A373,$0896AA49,$42233681, |
$F62C55CB,$9F1C5404,$F74FB15C,$C06E4312,$6FFE5D72,$8AA8678B,$337CD129,$8211CEFD), |
($074A1D09,$52A10E5A,$9275A3F8,$4B82506C,$37DF7E1B,$4C78B3C5,$CEFAB1DA,$F472267E, |
$B63045F6,$D66A1FC0,$400298E3,$27E60C94,$87D2F1B8,$DF9E56CC,$45CD1803,$1D35E098, |
$CCE7C736,$03483BF1,$1F7307D7,$C6E8F948,$E613C111,$3955C6FF,$1170ED7C,$8E95DA41, |
$99C31BF4,$A4DA8021,$7B5F94FB,$DD0DA51F,$6562AA77,$556BCB23,$DB1BACC6,$798040B9, |
$BFE5378F,$731D55E6,$DAA5BFEE,$389BBC60,$1B33FBA4,$9C567204,$36C26C68,$77EE9D69, |
$8AEB3E88,$2D50B5CE,$9579E790,$42B13CFC,$33FBD32B,$EE0503A7,$B5862824,$15E41EAD, |
$C8412EF7,$9D441275,$2FCEC582,$5FF483B7,$8F3931DF,$2E5D2A7B,$49467BF9,$0653DEA9, |
$2684CE35,$7E655E5C,$F12771D8,$BB15CC67,$AB097CA1,$983DCF52,$10DDF026,$21267F57, |
$2C58F6B4,$31043265,$0BAB8C01,$D5492099,$ACAAE619,$944CE54A,$F2D13D39,$ADD3FC32, |
$CDA08A40,$E2B0D451,$9EFE08AE,$B9D50FD2,$EA5CD7FD,$C9A749DD,$13EA2253,$832DEBAA, |
$24BE640F,$E03E926A,$29E01CDE,$8BF59F18,$0F9D00B6,$E1238B46,$1E7D8E34,$93619ADB, |
$76B32F9F,$BD972CEC,$E31FA976,$A68FBB10,$FB3BA49D,$8587C41D,$A5ADD1D0,$F3CF84BF, |
$D4E11150,$D9FFA6BC,$C3F6018C,$AEF10572,$74A64B2F,$E7DC9559,$2AAE35D5,$5B6F587F, |
$A9E353FE,$CA4FB674,$04BA24A8,$E5C6875F,$DCBC6266,$6BC5C03F,$661EEF02,$ED740BAB, |
$058E34E4,$B7E946CF,$88698125,$72EC48ED,$B11073A3,$A13485EB,$A2A2429C,$FA407547, |
$50B76713,$5418C37D,$96192DA5,$170BB04B,$518A021E,$B0AC13D1,$0963FA2A,$4A6E10E1, |
$58472BDC,$F7F8D962,$979139EA,$8D856538,$C0997042,$48324D7A,$447623CB,$8CBBE364, |
$6E0C6B0E,$D36D63B0,$3F244C84,$3542C971,$2B228DC1,$CB0325BB,$F8C0D6E9,$DE11066B, |
$A8649327,$FC31F83E,$7DD80406,$F916DD61,$D89F79D3,$615144C2,$EBB45D31,$28002958, |
$56890A37,$F05B3808,$123AE844,$86839E16,$914B0D83,$C506B43C,$CF3CBA5E,$7C60F5C9, |
$22DEB2A0,$5D9C2715,$C77BA0EF,$4F45360B,$C1017D8B,$E45ADC29,$A759909B,$412CD293, |
$D7D796B1,$00C8FF30,$23A34A80,$4EC15C91,$714E78B5,$47B9E42E,$78F3EA4D,$7F078F5B, |
$346C593A,$A3A87A1A,$9BCBFE12,$3D439963,$B2EF6D8E,$B8D46028,$6C2FD5CA,$62675256, |
$01F2A2F3,$BC96AE0A,$709A8920,$B4146E87,$6308B9E2,$64BDA7BA,$AFED6892,$6037F2A2, |
$F52969E0,$0ADB43A6,$82811400,$90D0BDF0,$19C9549E,$203F6A73,$1ACCAF4F,$89714E6D, |
$164D4705,$67665F07,$EC206170,$0C2182B2,$A02B9C81,$53289722,$F6A97686,$140E4179, |
$9F778849,$9A88E15D,$25CADB54,$D157F36F,$32A421C3,$B368E98A,$5A92CD0D,$757AA8D4, |
$C20AC278,$08B551C7,$849491E8,$4DC75AD6,$697C33BE,$BAF0CA33,$46125B4E,$59D677B3, |
$30D9C8F2,$D0AF860C,$1C7FD0FA,$FE0FF72C,$5C8D6F43,$57FDEC3B,$6AB6AD97,$D22ADF89, |
$18171785,$02BFE22D,$6DB80917,$80B216AF,$E85E4F9A,$7A1C306E,$6FC49BF5,$3AF7A11C, |
$81E215E7,$68363FCD,$3E9357C8,$EF52FD55,$3B8BAB4C,$3C8CF495,$BEFCEEBD,$FD25B714, |
$C498D83D,$0D2E1A8D,$E9F966AC,$0E387445,$435419E5,$5E7EBEC4,$AA90B8D9,$FF1A3A96), |
($4A8FE4E3,$F27D99CD,$D04A40CA,$CB5FF194,$3668275A,$FF4816BE,$A78B394C,$4C6BE9DB, |
$4EEC38D2,$4296EC80,$CDCE96F8,$888C2F38,$E75508F5,$7B916414,$060AA14A,$A214F327, |
$BE608DAF,$1EBBDEC2,$61F98CE9,$E92156FE,$4F22D7A3,$3F76A8D9,$559A4B33,$38AD2959, |
$F3F17E9E,$85E1BA91,$E5EBA6FB,$73DCD48C,$F5C3FF78,$481B6058,$8A3297F7,$8F1F3BF4, |
$93785AB2,$477A4A5B,$6334EB5D,$6D251B2E,$74A9102D,$07E38FFA,$915C9C62,$CCC275EA, |
$6BE273EC,$3EBDDD70,$D895796C,$DC54A91B,$C9AFDF81,$23633F73,$275119B4,$B19F6B67, |
$50756E22,$2BB152E2,$76EA46A2,$A353E232,$2F596AD6,$0B1EDB0B,$02D3D9A4,$78B47843, |
$64893E90,$40F0CAAD,$F68D3AD7,$46FD1707,$1C9C67EF,$B5E086DE,$96EE6CA6,$9AA34774, |
$1BA4F48A,$8D01ABFD,$183EE1F6,$5FF8AA7A,$17E4FAAE,$303983B0,$6C08668B,$D4AC4382, |
$E6C5849F,$92FEFB53,$C1CAC4CE,$43501388,$441118CF,$EC4FB308,$53A08E86,$9E0FE0C5, |
$F91C1525,$AC45BE05,$D7987CB5,$49BA1487,$57938940,$D5877648,$A958727F,$58DFE3C3, |
$F436CF77,$399E4D11,$F0A5BFA9,$EF61A33B,$A64CAC60,$04A8D0BA,$030DD572,$B83D320F, |
$CAB23045,$E366F2F0,$815D008D,$C897A43A,$1D352DF3,$B9CC571D,$8BF38744,$72209092, |
$EBA124EB,$FB99CE5E,$3BB94293,$28DA549C,$AAB8A228,$A4197785,$33C70296,$25F6259B, |
$5C85DA21,$DF15BDEE,$15B7C7E8,$E2ABEF75,$FCC19BC1,$417FF868,$14884434,$62825179, |
$C6D5C11C,$0E4705DC,$22700DE0,$D3D2AF18,$9BE822A0,$35B669F1,$C42BB55C,$0A801252, |
$115BF0FC,$3CD7D856,$B43F5F9D,$C2306516,$A1231C47,$F149207E,$5209A795,$34B3CCD8, |
$67AEFE54,$2C83924E,$6662CBAC,$5EEDD161,$84E681AA,$5D57D26B,$FA465CC4,$7E3AC3A8, |
$BF7C0CC6,$E18A9AA1,$C32F0A6F,$B22CC00D,$3D280369,$994E554F,$68F480D3,$ADCFF5E6, |
$3A8EB265,$83269831,$BD568A09,$4BC8AE6A,$69F56D2B,$0F17EAC8,$772EB6C7,$9F41343C, |
$AB1D0742,$826A6F50,$FEA2097C,$1912C283,$CE185899,$E4444839,$2D8635D5,$65D0B1FF, |
$865A7F17,$326D9FB1,$59E52820,$0090ADE1,$753C7149,$9DDD8B98,$A5A691DA,$0D0382BB, |
$8904C930,$086CB000,$6E69D3BD,$24D4E7A7,$05244FD0,$101A5E0C,$6A947DCB,$E840F77B, |
$7D0C5003,$7C370F1F,$805245ED,$E05E3D3F,$7906880E,$BABFCD35,$1A7EC697,$8C052324, |
$0C6EC8DF,$D129A589,$C7A75B02,$12D81DE7,$D9BE2A66,$1F4263AB,$DE73FDB6,$2A00680A, |
$56649E36,$3133ED55,$90FA0BF2,$2910A02A,$949D9D46,$A0D1DCDD,$CFC9B7D4,$D2677BE5, |
$95CB36B3,$13CD9410,$DBF73313,$B7C6E8C0,$F781414B,$510B016D,$B0DE1157,$D6B0F62C, |
$BB074ECC,$7F1395B7,$EE792CF9,$EA6FD63E,$5BD6938E,$AF02FC64,$DAB57AB8,$8EDB3784, |
$8716318F,$164D1A01,$26F26141,$B372E6B9,$F8FC2B06,$7AC00E04,$3727B89A,$97E9BCA5, |
$9C2A742F,$BC3B1F7D,$7165B471,$609B4C29,$20925351,$5AE72112,$454BE5D1,$C0FFB95F, |
$DD0EF919,$6F2D70C9,$0974C5BF,$98AA6263,$01D91E4D,$2184BB6E,$70C43C1E,$4D435915, |
$AE7B8523,$B6FB06BC,$5431EE76,$FDBC5D26,$ED77493D,$C5712EE4,$A8380437,$2EEF261A), |
($5A79392B,$B8AF32C2,$41F7720A,$833A61EC,$13DFEDAC,$C4990BC4,$DC0F54BC,$FEDD5E88, |
$80DA1881,$4DEA1AFD,$FD402CC6,$AE67CC7A,$C5238525,$8EA01254,$B56B9BD5,$862FBD6D, |
$AC8575D3,$6FBA3714,$DA7EBF46,$59CD5238,$8AC9DBFE,$353729FC,$E497D7F2,$C3AB84E0, |
$F05A114B,$7B887A75,$EDC603DD,$5E6FE680,$2C84B399,$884EB1DA,$1CB8C8BF,$AA51098A, |
$C862231C,$8BAC2221,$21B387E5,$208A430D,$2A3F0F8B,$A5FF9CD2,$6012A2EA,$147A9EE7, |
$F62A501D,$B4B2E51A,$3EF3484C,$C0253C59,$2B82B536,$0AA9696B,$BE0C109B,$C70B7929, |
$CE3E8A19,$2F66950E,$459F1C2C,$E68FB93D,$A3C3FF3E,$62B45C62,$300991CB,$01914C57, |
$7F7BC06A,$182831F5,$E7B74BCA,$FA50F6D0,$523CAA61,$E3A7CF05,$E9E41311,$280A21D1, |
$6A4297E1,$F24DC67E,$FC3189E6,$B72BF34F,$4B1E67AF,$543402CE,$79A59867,$0648E02A, |
$00A3AC17,$C6208D35,$6E7F5F76,$A45BB4BE,$F168FA63,$3F4125F3,$F311406F,$02706565, |
$BFE58022,$0CFCFDD9,$0735A7F7,$8F049092,$D98EDC27,$F5C5D55C,$E0F201DB,$0DCAFC9A, |
$7727FB79,$AF43ABF4,$26E938C1,$401B26A6,$900720FA,$2752D97B,$CFF1D1B3,$A9D9E424, |
$42DB99AB,$6CF8BE5F,$E82CEBE3,$3AFB733B,$6B734EB6,$1036414A,$975F667C,$049D6377, |
$BA587C60,$B1D10483,$DE1AEFCC,$1129D055,$72051E91,$6946D623,$F9E86EA7,$48768C00, |
$B0166C93,$9956BBF0,$1F1F6D84,$FB15E18E,$033B495D,$56E3362E,$4F44C53C,$747CBA51, |
$89D37872,$5D9C331B,$D2EF9FA8,$254917F8,$1B106F47,$37D75553,$B3F053B0,$7DCCD8EF, |
$D30EB802,$5889F42D,$610206D7,$1A7D34A1,$92D87DD8,$E5F4A315,$D1CF0E71,$B22DFE45, |
$B901E8EB,$0FC0CE5E,$2EFA60C9,$2DE74290,$36D0C906,$381C70E4,$4C6DA5B5,$3D81A682, |
$7E381F34,$396C4F52,$95AD5901,$1DB50C5A,$29982E9E,$1557689F,$3471EE42,$D7E2F7C0, |
$8795A1E2,$BC324D8D,$E224C3C8,$12837E39,$CDEE3D74,$7AD2143F,$0E13D40C,$78BD4A68, |
$A2EB194D,$DB9451F9,$859B71DC,$5C4F5B89,$CA14A8A4,$EF92F003,$16741D98,$33AA4444, |
$9E967FBB,$092E3020,$D86A35B8,$8CC17B10,$E1BF08AE,$55693FC5,$7680AD13,$1E6546E8, |
$23B6E7B9,$EE77A4B2,$08ED0533,$44FD2895,$B6393B69,$05D6CACF,$9819B209,$ECBBB72F, |
$9A75779C,$EAEC0749,$94A65AEE,$BDF52DC3,$D6A25D04,$82008E4E,$A6DE160F,$9B036AFB, |
$228B3A66,$5FB10A70,$CC338B58,$5378A9DF,$C908BCA9,$4959E25B,$46909A97,$66AE8F6E, |
$DD0683E9,$65F994B4,$6426CDA5,$C24B8840,$32539DA0,$63175650,$D0C815FF,$50CBC41E, |
$F7C774A3,$31B0C231,$8D0D8116,$24BEF16C,$D555D256,$DF47EA8C,$6D21ECCD,$A887A012, |
$84542AED,$A7B9C1BD,$914C1BB1,$A0D5B67D,$438CE937,$7030F873,$71F6B0C7,$574576BA, |
$F8BC4541,$9C61D348,$1960579D,$17C4DAAD,$96A4CB0B,$C193F2F6,$756EAFA2,$7C1D2F94, |
$F4FE2B43,$CB86E33A,$EBD4C728,$9D18AE64,$9FE13E30,$3CE0F5DE,$ABA1F985,$ADDC2718, |
$68CE6278,$D45E241F,$A15C82B7,$3B2293D4,$739EDD32,$674A6BF1,$5B5D587F,$4772DEAA, |
$4A63968F,$0BE68686,$513D6426,$939A4787,$BBA89296,$4EC20007,$818D0D08,$FF64DFD6), |
($CB2297CB,$DB48A144,$A16CBE4B,$BBEA1D6C,$5AF6B6B7,$8A8110B6,$F9236EF9,$C98F83E6, |
$0F9C65B8,$252D4A89,$A497F068,$A5D7ED2D,$94C22845,$9DA1C8C4,$E27C2E2E,$6E8BA2B4, |
$C3DD17FB,$498CD482,$0DFE6A9F,$B0705829,$9A1E6DC1,$F829717C,$07BB8E3A,$DA3C0B02, |
$1AF82FC7,$73B70955,$7A04379C,$5EE20A28,$83712AE5,$F4C47C6D,$DF72BA56,$D794858D, |
$8C0CF709,$18F0F390,$B6C69B35,$BF2F01DB,$2FA74DCA,$D0CD9127,$BDE66CEC,$3DEEBD46, |
$57C88FC3,$CEE1406F,$0066385A,$F3C3444F,$3A79D5D5,$75751EB9,$3E7F8185,$521C2605, |
$E1AAAB6E,$38EBB80F,$BEE7E904,$61CB9647,$EA54904E,$05AE00E4,$2D7AC65F,$087751A1, |
$DCD82915,$0921EE16,$DD86D33B,$D6BD491A,$40FBADF0,$4232CBD2,$33808D10,$39098C42, |
$193F3199,$0BC1E47A,$4A82B149,$02B65A8A,$104CDC8E,$24A8F52C,$685C6077,$C79F95C9, |
$1D11FE50,$C08DAFCD,$7B1A9A03,$1C1F11D8,$84250E7F,$979DB248,$EBDC0501,$B9553395, |
$E3C05EA8,$B1E51C4C,$13B0E681,$3B407766,$36DB3087,$EE17C9FC,$6C53ECF2,$ADCCC58F, |
$C427660B,$EFD5867D,$9B6D54A5,$6FF1AEFF,$8E787952,$9E2BFFE0,$8761D034,$E00BDBAD, |
$AE99A8D3,$CC03F6E2,$FD0ED807,$0E508AE3,$B74182AB,$4349245D,$D120A465,$B246A641, |
$AF3B7AB0,$2A6488BB,$4B3A0D1F,$E7C7E58C,$3FAFF2EB,$90445FFD,$CF38C393,$995D07E7, |
$F24F1B36,$356F6891,$6D6EBCBE,$8DA9E262,$50FD520E,$5BCA9E1E,$37472CF3,$69075057, |
$7EC5FDED,$0CAB892A,$FB2412BA,$1728DEBF,$A000A988,$D843CE79,$042E20DD,$4FE8F853, |
$56659C3C,$2739D119,$A78A6120,$80960375,$70420611,$85E09F78,$ABD17E96,$1B513EAF, |
$1E01EB63,$26AD2133,$A890C094,$7613CF60,$817E781B,$A39113D7,$E957FA58,$4131B99E, |
$28B1EFDA,$66ACFBA7,$FF68944A,$77A44FD1,$7F331522,$59FFB3FA,$A6DF935B,$FA12D9DF, |
$C6BF6F3F,$89520CF6,$659EDD6A,$544DA739,$8B052538,$7C30EA21,$C2345525,$15927FB2, |
$144A436B,$BA107B8B,$1219AC97,$06730432,$31831AB3,$C55A5C24,$AA0FCD3E,$E5606BE8, |
$5C88F19B,$4C0841EE,$1FE37267,$11F9C4F4,$9F1B9DAE,$864E76D0,$E637C731,$D97D23A6, |
$32F53D5C,$B8161980,$93FA0F84,$CAEF0870,$8874487E,$98F2CC73,$645FB5C6,$CD853659, |
$2062470D,$16EDE8E9,$6B06DAB5,$78B43900,$FC95B786,$5D8E7DE1,$465B5954,$FE7BA014, |
$F7D23F7B,$92BC8B18,$03593592,$55CEF4F7,$74B27317,$79DE1FC2,$C8A0BFBD,$229398CC, |
$62A602CE,$BCB94661,$5336D206,$D2A375FE,$6A6AB483,$4702A5A4,$A2E9D73D,$23A2E0F1, |
$9189140A,$581D18DC,$B39A922B,$82356212,$D5F432A9,$D356C2A3,$5F765B4D,$450AFCC8, |
$4415E137,$E8ECDFBC,$ED0DE3EA,$60D42B13,$F13DF971,$71FC5DA2,$C1455340,$F087742F, |
$F55E5751,$67B3C1F8,$AC6B8774,$7DCFAAAC,$95983BC0,$489BB0B1,$2C184223,$964B6726, |
$2BD3271C,$72266472,$DED64530,$0A2AA343,$D4F716A0,$B4DAD6D9,$2184345E,$512C990C, |
$29D92D08,$2EBE709A,$01144C69,$34584B9D,$E4634ED6,$ECC963CF,$3C6984AA,$4ED056EF, |
$9CA56976,$8F3E80D4,$B5BAE7C5,$30B5CAF5,$63F33A64,$A9E4BBDE,$F6B82298,$4D673C1D), |
($4B4F1121,$BA183081,$C784F41F,$D17D0BAC,$083D2267,$37B1361E,$3581AD05,$FDA2F6BC, |
$1E892CDD,$B56D3C3A,$32140E46,$138D8AAB,$E14773D4,$5B0E71DF,$5D1FE055,$3FB991D3, |
$F1F46C71,$A325988C,$10F66E80,$B1006348,$726A9F60,$3B67F8BA,$4E114EF4,$05C52115, |
$4C5CA11C,$99E1EFD8,$471B83B3,$CBF7E524,$43AD82F5,$690CA93B,$FAA61BB2,$12A832B5, |
$B734F943,$BD22AEA7,$88FEC626,$5E80C3E7,$BE3EAF5E,$44617652,$A5724475,$BB3B9695, |
$7F3FEE8F,$964E7DEB,$518C052D,$2A0BBC2B,$C2175F5C,$9A7B3889,$A70D8D0C,$EACCDD29, |
$CCCD6658,$34BB25E6,$B8391090,$F651356F,$52987C9E,$0C16C1CD,$8E372D3C,$2FC6EBBD, |
$6E5DA3E3,$B0E27239,$5F685738,$45411786,$067F65F8,$61778B40,$81AB2E65,$14C8F0F9, |
$A6B7B4CE,$4036EAEC,$BF62B00A,$ECFD5E02,$045449A6,$B20AFD28,$2166D273,$0D13A863, |
$89508756,$D51A7530,$2D653F7A,$3CDBDBC3,$80C9DF4F,$3D5812D9,$53FBB1F3,$C0F185C0, |
$7A3C3D7E,$68646410,$857607A0,$1D12622E,$97F33466,$DB4C9917,$6469607C,$566E043D, |
$79EF1EDB,$2C05898D,$C9578E25,$CD380101,$46E04377,$7D1CC7A9,$6552B837,$20192608, |
$B97500C5,$ED296B44,$368648B4,$62995CD5,$82731400,$F9AEBD8B,$3844C0C7,$7C2DE794, |
$33A1A770,$8AE528C2,$5A2BE812,$1F8F4A07,$2B5ED7CA,$937EB564,$6FDA7E11,$E49B5D6C, |
$B4B3244E,$18AA53A4,$3A061334,$4D6067A3,$83BA5868,$9BDF4DFE,$7449F261,$709F8450, |
$CAD133CB,$DE941C3F,$F52AE484,$781D77ED,$7E4395F0,$AE103B59,$922331BB,$42CE50C8, |
$E6F08153,$E7D941D0,$5028ED6B,$B3D2C49B,$AD4D9C3E,$D201FB6E,$A45BD5BE,$FFCB7F4B, |
$579D7806,$F821BB5B,$59D592AD,$D0BE0C31,$D4E3B676,$0107165A,$0FE939D2,$49BCAAFD, |
$55FFCFE5,$2EC1F783,$F39A09A5,$3EB42772,$19B55A5D,$024A0679,$8C83B3F7,$8642BA1D, |
$ACACD9EA,$87D352C4,$60931F45,$A05F97D7,$1CECD42C,$E2FCC87B,$B60F94E2,$67A34B0B, |
$FCDD40C9,$0B150A27,$D3EE9E04,$582E29E9,$4AC22B41,$6AC4E1B8,$BCCAA51A,$237AF30E, |
$EBC3B709,$C4A59D19,$284BC98A,$E9D41A93,$6BFA2018,$73B2D651,$11F9A2FA,$CE09BFF1, |
$41A470AA,$25888F22,$77E754E8,$F7330D8E,$158EAB16,$C5D68842,$C685A6F6,$E5B82FDE, |
$09EA3A96,$6DDE1536,$4FA919DA,$26C0BE9F,$9EED6F69,$F05555F2,$E06FC285,$9CD76D23, |
$AF452A92,$EFC74CB7,$9D6B4732,$8BE408EE,$22401D0D,$EE6C459D,$7587CB82,$E8746862, |
$5CBDDE87,$98794278,$31AFB94D,$C11E0F2F,$30E8FC2A,$CF3261EF,$1A3023E1,$AA2F86CF, |
$F202E24A,$8D08DCFF,$764837C6,$A26374CC,$9F7C3E88,$949CC57D,$DD26A07F,$C39EFAB0, |
$C8F879A1,$DCE67BB9,$F4B0A435,$912C9AE0,$D85603E4,$953A9BBF,$FB8290D6,$0AEBCD5F, |
$16206A9A,$6C787A14,$D9A0F16A,$29BF4F74,$8F8BCE91,$0E5A9354,$AB038CB1,$1B8AD11B, |
$E327FF49,$0053DA20,$90CF51DC,$DA92FE6D,$0390CA47,$A8958097,$A9DC5BAF,$3931E3C1, |
$840446B6,$63D069FB,$D7460299,$7124ECD1,$0791E613,$485918FC,$D635D04C,$DF96AC33, |
$66F2D303,$247056AE,$A1A7B2A8,$27D8CC9C,$17B6E998,$7BF5590F,$FE97F557,$5471D8A2), |
($83A327A1,$9F379F51,$40A7D007,$11307423,$224587C1,$AC27D63B,$3B7E64EA,$2E1CBFA6, |
$09996000,$03BC0E2C,$D4C4478A,$4542E0AB,$FEDA26D4,$C1D10FCB,$8252F596,$4494EB5C, |
$A362F314,$F5BA81FD,$75C3A376,$4CA214CA,$E164DEDD,$5088FA97,$4B0930E0,$2FCFB7E8, |
$33A6F4B2,$C7E94211,$2D66C774,$43BE8BAE,$C663D445,$908EB130,$F4E3BE15,$63B9D566, |
$529396B5,$1E1BE743,$4D5FF63F,$985E4A83,$71AB9DF7,$C516C6F5,$85C19AB4,$1F4DAEE4, |
$F2973431,$B713DC5E,$3F2E159A,$C824DA16,$06BF376A,$B2FE23EC,$E39B1C22,$F1EECB5F, |
$08E82D52,$565686C2,$AB0AEA93,$FD47219F,$EBDBABD7,$2404A185,$8C7312B9,$A8F2D828, |
$0C8902DA,$65B42B63,$C0BBEF62,$4E3E4CEF,$788F8018,$EE1EBAB7,$93928F9D,$683D2903, |
$D3B60689,$AFCB0DDC,$88A4C47A,$F6DD9C3D,$7EA5FCA0,$8A6D7244,$BE11F120,$04FF91B8, |
$8D2DC8C0,$27F97FDB,$7F9E1F47,$1734F0C7,$26F3ED8E,$0DF8F2BF,$B0833D9E,$E420A4E5, |
$A423CAE6,$95616772,$9AE6C049,$075941F2,$D8E12812,$000F6F4F,$3C0D6B05,$6CEF921C, |
$B82BC264,$396CB008,$5D608A6F,$6D7782C8,$186550AA,$6B6FEC09,$28E70B13,$57CE5688, |
$ECD3AF84,$23335A95,$91F40CD2,$7B6A3B26,$BD32B3B6,$3754A6FB,$8ED088F0,$F867E87C, |
$20851746,$6410F9C6,$35380442,$C2CA10A7,$1ADEA27F,$76BDDD79,$92742CF4,$0E98F7EE, |
$164E931D,$B9C835B3,$69060A99,$B44C531E,$FA7B66FE,$C98A5B53,$7D95AAE9,$302F467B, |
$74B811DE,$F3866ABD,$B5B3D32D,$FC3157A4,$D251FE19,$0B5D8EAC,$DA71FFD5,$47EA05A3, |
$05C6A9E1,$CA0EE958,$9939034D,$25DC5EDF,$79083CB1,$86768450,$CF757D6D,$5972B6BC, |
$A78D59C9,$C4AD8D41,$2A362AD3,$D1179991,$601407FF,$DCF50917,$587069D0,$E0821ED6, |
$DBB59427,$73911A4B,$7C904FC3,$844AFB92,$6F8C955D,$E8C0C5BB,$B67AB987,$A529D96C, |
$F91F7181,$618B1B06,$E718BB0C,$8BD7615B,$D5A93A59,$54AEF81B,$772136E3,$CE44FD9C, |
$10CDA57E,$87D66E0B,$3D798967,$1B2C1804,$3EDFBD68,$15F6E62B,$EF68B854,$3896DB35, |
$12B7B5E2,$CB489029,$9E4F98A5,$62EB77A8,$217C24A2,$964152F6,$49B2080A,$53D23EE7, |
$48FB6D69,$1903D190,$9449E494,$BF6E7886,$FB356CFA,$3A261365,$424BC1EB,$A1192570, |
$019CA782,$9D3F7E0E,$9C127575,$EDF02039,$AD57BCCE,$5C153277,$81A84540,$BCAA7356, |
$CCD59B60,$A62A629B,$A25CCD10,$2B5B65CF,$1C535832,$55FD4E3A,$31D9790D,$F06BC37D, |
$4AFC1D71,$AEED5533,$BA461634,$BB694B78,$5F3A5C73,$6A3C764A,$8FB0CCA9,$F725684C, |
$4FE5382F,$1D0163AF,$5AA07A8F,$E205A8ED,$C30BAD38,$FF22CF1F,$72432E2E,$32C2518B, |
$3487CE4E,$7AE0AC02,$709FA098,$0A3B395A,$5B4043F8,$A9E48C36,$149A8521,$D07DEE6B, |
$46ACD2F3,$8958DFFC,$B3A1223C,$B11D31C4,$CD7F4D3E,$0F28E3AD,$E5B100BE,$AAC54824, |
$E9C9D7BA,$9BD47001,$80F149B0,$66022F0F,$020C4048,$6EFA192A,$67073F8D,$13EC7BF9, |
$3655011A,$E6AFE157,$D9845F6E,$DECC4425,$511AE2CC,$DF81B4D8,$D7809E55,$D6D883D9, |
$2CC7978C,$5E787CC5,$DD0033D1,$A050C937,$97F75DCD,$299DE580,$41E2B261,$EA5A54F1), |
($7E672590,$BEA513BB,$2C906FE6,$86029C2B,$55DC4F74,$0553398E,$63E09647,$CAFD0BAB, |
$264C37DF,$8272210F,$67AFA669,$12D98A5F,$8CAB23C4,$75C68BD1,$C3370470,$33F37F4E, |
$283992FF,$E73A3A67,$1032F283,$F5AD9FC2,$963F0C5D,$664FBC45,$202BA41C,$C7C02D80, |
$54731E84,$8A1085F5,$601D80FB,$2F968E55,$35E96812,$E45A8F78,$BD7DE662,$3B6E6EAD, |
$8097C5EF,$070B6781,$B1E508F3,$24E4FAE3,$B81A7805,$EC0FC918,$43C8774B,$9B2512A9, |
$2B05AD04,$32C2536F,$EDF236E0,$8BC4B0CF,$BACEB837,$4535B289,$0D0E94C3,$A5A371D0, |
$AD695A58,$39E3437D,$9186BFFC,$21038C3B,$0AA9DFF9,$5D1F06CE,$62DEF8A4,$F740A2B4, |
$A2575868,$682683C1,$DBB30FAC,$61FE1928,$468A6511,$C61CD5F4,$E54D9800,$6B98D7F7, |
$8418B6A5,$5F09A5D2,$90B4E80B,$49B2C852,$69F11C77,$17412B7E,$7F6FC0ED,$56838DCC, |
$6E9546A2,$D0758619,$087B9B9A,$D231A01D,$AF46D415,$097060FD,$D920F657,$882D3F9F, |
$3AE7C3C9,$E8A00D9B,$4FE67EBE,$2EF80EB2,$C1916B0C,$F4DFFEA0,$B97EB3EB,$FDFF84DD, |
$FF8B14F1,$E96B0572,$F64B508C,$AE220A6E,$4423AE5A,$C2BECE5E,$DE27567C,$FC935C63, |
$47075573,$E65B27F0,$E121FD22,$F2668753,$2DEBF5D7,$8347E08D,$AC5EDA03,$2A7CEBE9, |
$3FE8D92E,$23542FE4,$1FA7BD50,$CF9B4102,$9D0DBA39,$9CB8902A,$A7249D8B,$0F6D667A, |
$5EBFA9EC,$6A594DF2,$79600938,$023B7591,$EA2C79C8,$C99D07EA,$64CB5EE1,$1A9CAB3D, |
$76DB9527,$C08E012F,$3DFB481A,$872F22E7,$2948D15C,$A4782C79,$6F50D232,$78F0728A, |
$5A87AAB1,$C4E2C19C,$EE767387,$1B2A1864,$7B8D10D3,$D1713161,$0EEAC456,$D8799E06, |
$B645B548,$4043CB65,$A874FB29,$4B12D030,$7D687413,$18EF9A1F,$D7631D4C,$5829C7DA, |
$CDFA30FA,$C5084BB0,$92CD20E2,$D4C16940,$03283EC0,$A917813F,$9A587D01,$70041F8F, |
$DC6AB1DC,$DDAEE3D5,$31829742,$198C022D,$1C9EAFCB,$5BBC6C49,$D3D3293A,$16D50007, |
$04BB8820,$3C5C2A41,$37EE7AF8,$8EB04025,$9313ECBA,$BFFC4799,$8955A744,$EF85D633, |
$504499A7,$A6CA6A86,$BB3D3297,$B34A8236,$6DCCBE4F,$06143394,$CE19FC7B,$CCC3C6C6, |
$E36254AE,$77B7EDA1,$A133DD9E,$EBF9356A,$513CCF88,$E2A1B417,$972EE5BD,$853824CD, |
$5752F4EE,$6C1142E8,$3EA4F309,$B2B5934A,$DFD628AA,$59ACEA3E,$A01EB92C,$389964BC, |
$DA305DD4,$019A59B7,$11D2CA93,$FAA6D3B9,$4E772ECA,$72651776,$FB4E5B0E,$A38F91A8, |
$1D0663B5,$30F4F192,$B50051B6,$B716CCB3,$4ABD1B59,$146C5F26,$F134E2DE,$00F67C6C, |
$B0E1B795,$98AA4EC7,$0CC73B34,$654276A3,$8D1BA871,$740A5216,$E0D01A23,$9ED161D6, |
$9F36A324,$993EBB7F,$FEB9491B,$365DDCDB,$810CFFC5,$71EC0382,$2249E7BF,$48817046, |
$F3A24A5B,$4288E4D9,$0BF5C243,$257FE151,$95B64C0D,$4164F066,$AAF7DB08,$73B1119D, |
$8F9F7BB8,$D6844596,$F07A34A6,$53943D0A,$F9DD166D,$7A8957AF,$F8BA3CE5,$27C9621E, |
$5CDAE910,$C8518998,$941538FE,$136115D8,$ABA8443C,$4D01F931,$34EDF760,$B45F266B, |
$D5D4DE14,$52D8AC35,$15CFD885,$CBC5CD21,$4CD76D4D,$7C80EF54,$BC92EE75,$1E56A1F6), |
($BAA20B6C,$9FFBAD26,$E1F7D738,$794AEC8D,$C9E9CF3C,$8A9A7846,$C57C4685,$B9A92FED, |
$29CB141F,$52F9DDB7,$F68BA6BC,$19CCC020,$4F584AAA,$3BF6A596,$003B7CF7,$54F0CE9A, |
$A7EC4303,$46CF0077,$78D33AA1,$215247D9,$74BCDF91,$08381D30,$DAC43E40,$64872531, |
$0BEFFE5F,$B317F457,$AEBB12DA,$D5D0D67B,$7D75C6B4,$42A6D241,$1502D0A9,$3FD97FFF, |
$C6C3ED28,$81868D0A,$92628BC5,$86679544,$FD1867AF,$5CA3EA61,$568D5578,$4A2D71F4, |
$43C9D549,$8D95DE2B,$6E5C74A0,$9120FFC7,$0D05D14A,$A93049D3,$BFA80E17,$F4096810, |
$043F5EF5,$A673B4F1,$6D780298,$A4847783,$5EE726FB,$9934C281,$220A588C,$384E240F, |
$933D5C69,$39E5EF47,$26E8B8F3,$4C1C6212,$8040F75D,$074B7093,$6625A8D7,$36298945, |
$76285088,$651D37C3,$24F5274D,$DBCA3DAB,$186B7EE1,$D80F8182,$14210C89,$943A3075, |
$4E6E11C4,$4D7E6BAD,$F05064C8,$025DCD97,$4BC10302,$7CEDE572,$8F90A970,$AB88EEBA, |
$B5998029,$5124D839,$B0EEB6A3,$89DDABDC,$E8074D76,$A1465223,$32518CF2,$9D39D4EB, |
$C0D84524,$E35E6EA8,$7ABF3804,$113E2348,$9AE6069D,$B4DFDABB,$A8C5313F,$23EA3F79, |
$530E36A2,$A5FD228B,$95D1D350,$2B14CC09,$40042956,$879D05CC,$2064B9CA,$ACACA40E, |
$B29C846E,$9676C9E3,$752B7B8A,$7BE2BCC2,$6BD58F5E,$D48F4C32,$606835E4,$9CD7C364, |
$2C269B7A,$3A0D079C,$73B683FE,$45374F1E,$10AFA242,$577F8666,$DDAA10F6,$F34F561C, |
$3D355D6B,$E47048AE,$AA13C492,$050344FD,$2AAB5151,$F5B26AE5,$ED919A59,$5AC67900, |
$F1CDE380,$0C79A11B,$351533FC,$CD4D8E36,$1F856005,$690B9FDD,$E736DCCF,$1D47BF6A, |
$7F66C72A,$85F21B7F,$983CBDB6,$01EBBEBF,$035F3B99,$EB111F34,$28CEFDC6,$5BFC9ECD, |
$F22EACB0,$9E41CBB2,$E0F8327C,$82E3E26F,$FC43FC86,$D0BA66DF,$489EF2A7,$D9E0C81D, |
$68690D52,$CC451367,$C2232E16,$E95A7335,$0FDAE19B,$FF5B962C,$97596527,$C46DB333, |
$3ED4C562,$C14C9D9E,$5D6FAA21,$638E940D,$F9316D58,$47B3B0EA,$30FFCAD2,$CE1BBA7D, |
$1E6108E6,$2E1EA33D,$507BF05B,$FAFEF94B,$D17DE8E2,$5598B214,$1663F813,$17D25A2D, |
$EEFA5FF9,$582F4E37,$12128773,$FEF17AB8,$06005322,$BB32BBC9,$8C898508,$592C15F0, |
$D38A4054,$4957B7D6,$D2B891DB,$37BD2D3E,$34AD20CB,$622288E9,$2DC7345A,$AFB416C0, |
$1CF459B1,$DC7739FA,$0A711A25,$13E18A0C,$5F72AF4C,$6AC8DB11,$BE53C18E,$1AA569B9, |
$EF551EA4,$A02A429F,$BD16E790,$7EB9171A,$77D693D8,$8E06993A,$9BDE7560,$E5801987, |
$C37A09BE,$B8DB76AC,$E2087294,$6C81616D,$B7F30FE7,$BC9B82BD,$FBA4E4D4,$C7B1012F, |
$A20C043B,$DE9FEBD0,$2F9297CE,$E610AEF8,$70B06F19,$C86AE00B,$0E01988F,$41192AE0, |
$448C1CB5,$ADBE92EE,$7293A007,$1B54B5B3,$D61F63D1,$EAE40A74,$61A72B55,$EC83A7D5, |
$88942806,$90A07DA5,$D7424B95,$67745B4E,$A31A1853,$CA6021EF,$DFB56C4F,$CBC2D915, |
$3C48E918,$8BAE3C63,$6F659C71,$F8B754C1,$2782F3DE,$F796F168,$71492C84,$33C0F5A6, |
$3144F6EC,$25DC412E,$B16C5743,$83A1FA7E,$0997B101,$B627E6E8,$CF33905C,$8456FB65), |
($B29BEA74,$C35DA605,$305C1CA3,$D2E9F5BC,$6FD5BFF4,$FF347703,$FC45B163,$F498E068, |
$B71229FC,$81ACC3FB,$78538A8B,$984ECF81,$A5DA47A4,$8F259EEF,$6475DC65,$081865B9, |
$49E14A3C,$19E66079,$D382E91B,$5B109794,$3F9F81E1,$4470A388,$41601ABE,$AAF9F407, |
$8E175EF6,$ED842297,$893A4271,$1790839A,$D566A99E,$6B417DEE,$75C90D23,$715EDB31, |
$723553F7,$9AFB50C9,$FBC5F600,$CD3B6A4E,$97ED0FBA,$29689AEC,$63135C8E,$F0E26C7E, |
$0692AE7F,$DBB208FF,$2EDE3E9B,$6A65BEBD,$D40867E9,$C954AFC5,$73B08201,$7FFDF809, |
$1195C24F,$1CA5ADCA,$74BD6D1F,$B393C455,$CADFD3FA,$99F13011,$0EBCA813,$60E791B8, |
$6597AC7A,$18A7E46B,$09CB49D3,$0B27DF6D,$CFE52F87,$CEF66837,$E6328035,$FA87C592, |
$37BAFF93,$D71FCC99,$DCAB205C,$4D7A5638,$48012510,$62797558,$B6CF1FE5,$BC311834, |
$9C2373AC,$14EC6175,$A439CBDF,$54AFB0EA,$D686960B,$FDD0D47B,$7B063902,$8B78BAC3, |
$26C6A4D5,$5C0055B6,$2376102E,$0411783E,$2AA3F1CD,$51FC6EA8,$701CE243,$9B2A0ABB, |
$0AD93733,$6E80D03D,$AF6295D1,$F629896F,$A30B0648,$463D8DD4,$963F84CB,$01FF94F8, |
$8D7FEFDC,$553611C0,$A97C1719,$B96AF759,$E0E3C95E,$0528335B,$21FE5925,$821A5245, |
$807238B1,$67F23DB5,$EA6B4EAB,$0DA6F985,$AB1BC85A,$EF8C90E4,$4526230E,$38EB8B1C, |
$1B91CD91,$9FCE5F0C,$F72CC72B,$C64F2617,$DAF7857D,$7D373CF1,$28EAEDD7,$203887D0, |
$C49A155F,$A251B3B0,$F2D47AE3,$3D9EF267,$4A94AB2F,$7755A222,$0205E329,$C28FA7A7, |
$AEC1FE51,$270F164C,$8C6D01BF,$53B5BC98,$C09D3FEB,$834986CC,$4309A12C,$578B2A96, |
$3BB74B86,$69561B4A,$037E32F3,$DE335B08,$C5156BE0,$E7EF09AD,$93B834C7,$A7719352, |
$59302821,$E3529D26,$F961DA76,$CB142C44,$A0F3B98D,$76502457,$945A414B,$078EEB12, |
$DFF8DE69,$EB6C8C2D,$BDA90C4D,$E9C44D16,$168DFD66,$AD64763B,$A65FD764,$95A29C06, |
$32D7713F,$40F0B277,$224AF08F,$004CB5E8,$92574814,$8877D827,$3E5B2D04,$68C2D5F2, |
$86966273,$1D433ADA,$8774988A,$3C0E0BFE,$DDAD581D,$2FD654ED,$0F4769FD,$C181EE9D, |
$5FD88F61,$341DBB3A,$528543F9,$D92235CF,$1EA82EB4,$B5CD790F,$91D24F1E,$A869E6C2, |
$61F474D2,$CC205ADD,$0C7BFBA9,$BF2B0489,$B02D72D8,$2B46ECE6,$E4DCD90A,$B8A11440, |
$EE8A63B7,$854DD1A1,$D1E00583,$42B40E24,$9E8964DE,$B4B35D78,$BEC76F6E,$24B9C620, |
$D8D399A6,$5ADB2190,$2DB12730,$3A5866AF,$58C8FADB,$5D8844E7,$8A4BF380,$15A01D70, |
$79F5C028,$66BE3B8C,$F3E42B53,$56990039,$2C0C3182,$5E16407C,$ECC04515,$6C440284, |
$4CB6701A,$13BFC142,$9D039F6A,$4F6E92C8,$A1407C62,$8483A095,$C70AE1C4,$E20213A2, |
$BACAFC41,$4ECC12B3,$4BEE3646,$1FE807AE,$25217F9C,$35DDE5F5,$7A7DD6CE,$F89CCE50, |
$AC07B718,$7E73D2C6,$E563E76C,$123CA536,$3948CA56,$9019DD49,$10AA88D9,$C82451E2, |
$473EB6D6,$506FE854,$E8BB03A5,$332F4C32,$FE1E1E72,$B1AE572A,$7C0D7BC1,$E1C37EB2, |
$F542AA60,$F1A48EA0,$D067B89F,$BBFA195D,$1A049B0D,$315946AA,$36D1B447,$6D2EBDF0), |
($0D188A6D,$12CEA0DB,$7E63740E,$6A444821,$253D234F,$6FFC6597,$94A6BDEF,$33EE1B2F, |
$0A6C00C0,$3AA336B1,$5AF55D17,$265FB3DC,$0E89CF4D,$0786B008,$C80055B8,$6B17C3CE, |
$72B05A74,$D21A8D78,$A6B70840,$FE8EAE77,$ED69565C,$55E1BCF4,$585C2F60,$E06F1A62, |
$AD67C0CD,$7712AF88,$9CC26ACA,$1888053D,$37EB853E,$9215ABD7,$DE30ADFC,$1F1038E6, |
$70C51C8A,$8D586C26,$F72BDD90,$4DC3CE15,$68EAEEFA,$D0E9C8B9,$200F9C44,$DDD141BA, |
$024BF1D3,$0F64C9D4,$C421E9E9,$9D11C14C,$9A0DD9E4,$5F92EC19,$1B980DF0,$1DCC4542, |
$B8FE8C56,$0C9C9167,$4E81EB49,$CA368F27,$E3603B37,$EA08ACCC,$AC516992,$C34F513B, |
$804D100D,$6EDCA4C4,$FC912939,$29D219B0,$278AAA3C,$4868DA7D,$54E890B7,$B46D735A, |
$514589AA,$D6C630AF,$4980DFE8,$BE3CCC55,$59D41202,$650C078B,$AF3A9E7B,$3ED9827A, |
$9E79FC6E,$AADBFBAE,$C5F7D803,$3DAF7F50,$67B4F465,$73406E11,$39313F8C,$8A6E6686, |
$D8075F1F,$D3CBFED1,$69C7E49C,$930581E0,$E4B1A5A8,$BBC45472,$09DDBF58,$C91D687E, |
$BDBFFDA5,$88C08735,$E9E36BF9,$DB5EA9B6,$95559404,$08F432FB,$E24EA281,$64663579, |
$000B8010,$7914E7D5,$32FD0473,$D1A7F0A4,$445AB98E,$EC72993F,$A29A4D32,$B77306D8, |
$C7C97CF6,$7B6AB645,$F5EF7ADF,$FB2E15F7,$E747F757,$5E944354,$234A2669,$47E46359, |
$9B9D11A9,$40762CED,$56F1DE98,$11334668,$890A9A70,$1A296113,$B3BD4AF5,$163B7548, |
$D51B4F84,$B99B2ABC,$3CC1DC30,$A9F0B56C,$812272B2,$0B233A5F,$B650DBF2,$F1A0771B, |
$36562B76,$DC037B0F,$104C97FF,$C2EC98D2,$90596F22,$28B6620B,$DF42B212,$FDBC4243, |
$F3FB175E,$4A2D8B00,$E8F3869B,$30D69BC3,$853714C8,$A7751D2E,$31E56DEA,$D4840B0C, |
$9685D783,$068C9333,$8FBA032C,$76D7BB47,$6D0EE22B,$B546794B,$D971B894,$8B09D253, |
$A0AD5761,$EE77BA06,$46359F31,$577CC7EC,$52825EFD,$A4BEED95,$9825C52A,$EB48029A, |
$BAAE59F8,$CF490EE1,$BC990164,$8CA49DFE,$4F38A6E7,$2BA98389,$8228F538,$199F64AC, |
$01A1CAC5,$A8B51641,$5CE72D01,$8E5DF26B,$60F28E1E,$CD5BE125,$E5B376BF,$1C8D3116, |
$7132CBB3,$CB7AE320,$C0FA5366,$D7653E34,$971C88C2,$C62C7DD0,$34D0A3DA,$868F6709, |
$7AE6FA8F,$22BBD523,$66CD3D5B,$1EF9288D,$F9CF58C1,$5B784E80,$7439A191,$AE134C36, |
$9116C463,$2E9E1396,$F8611F3A,$2D2F3307,$247F37DD,$C1E2FF9D,$43C821E5,$05ED5CAB, |
$EF74E80A,$4CCA6028,$F0AC3CBD,$5D874B29,$6C62F6A6,$4B2A2EF3,$B1AA2087,$62A5D0A3, |
$0327221C,$B096B4C6,$417EC693,$ABA840D6,$789725EB,$F4B9E02D,$E6E00975,$CC04961A, |
$63F624BB,$7FA21ECB,$2C01EA7F,$B2415005,$2A8BBEB5,$83B2B14E,$A383D1A7,$5352F96A, |
$043ECDAD,$CE1918A1,$FA6BE6C9,$50DEF36F,$F6B80CE2,$4543EF7C,$9953D651,$F257955D, |
$87244914,$DA1E0A24,$FFDA4785,$14D327A2,$3B93C29F,$840684B4,$61AB71A0,$9F7B784A, |
$2FD570CF,$15955BDE,$38F8D471,$3534A718,$133FB71D,$3FD80F52,$4290A8BE,$75FF44C7, |
$A554E546,$E1023499,$BF2652E3,$7D20399E,$A1DF7E82,$177092EE,$217DD3F1,$7C1FF8D9), |
($12113F2E,$BFBD0785,$F11793FB,$A5BFF566,$83C7B0E5,$72FB316B,$75526A9A,$41E0E612, |
$7156BA09,$53CE7DEE,$0AA26881,$A43E0D7D,$3DA73CA3,$182761ED,$BD5077FF,$56DB4AA0, |
$E792711C,$F0A4EB1D,$7F878237,$EC65C4E8,$08DC8D43,$0F8CE142,$8258ABDA,$F4154E16, |
$49DEC2FD,$CD8D5705,$6C2C3A0F,$5C12BB88,$EFF3CDB6,$2C89ED8C,$7BEBA967,$2A142157, |
$C6D0836F,$B4F97E96,$6931E969,$514E6C7C,$A7792600,$0BBBF780,$59671BBD,$0707B676, |
$37482D93,$80AF1479,$3805A60D,$E1F4CAC1,$580B3074,$30B8D6CE,$05A304BE,$D176626D, |
$EBCA97F3,$BB201F11,$6A1AFE23,$FFAA86E4,$62B4DA49,$1B6629F5,$F5D9E092,$F37F3DD1, |
$619BD45B,$A6EC8E4F,$29C80939,$0C7C0C34,$9CFE6E48,$E65FD3AC,$73613B65,$B3C669F9, |
$BE2E8A9E,$286F9678,$5797FD13,$99805D75,$CFB641C5,$A91074BA,$6343AF47,$6403CB46, |
$8894C8DB,$2663034C,$3C40DC5E,$00995231,$96789AA2,$2EFDE4B9,$7DC195E1,$547DADD5, |
$06A8EA04,$F2347A63,$5E0DC6F7,$8462DFC2,$1E6B2C3C,$9BD275B3,$91D419E2,$BCEFD17E, |
$B9003924,$D07E7320,$DEF0495C,$C36AD00E,$1785B1AB,$92E20BCF,$B139F0E9,$675BB9A1, |
$AECFA4AF,$132376CB,$E84589D3,$79A05456,$A2F860BC,$1AE4F8B5,$20DF4DB4,$A1E1428B, |
$3BF60A1A,$27FF7BF1,$CB44C0E7,$F7F587C4,$1F3B9B21,$94368F01,$856E23A4,$6F93DE3F, |
$773F5BBF,$8B22056E,$DF41F654,$B8246FF4,$8D57BFF2,$D57167EA,$C5699F22,$40734BA7, |
$5D5C2772,$033020A8,$E30A7C4D,$ADC40FD6,$76353441,$5AA5229B,$81516590,$DA49F14E, |
$4FA672A5,$4D9FAC5F,$154BE230,$8A7A5CC0,$CE3D2F84,$CCA15514,$5221360C,$AF0FB81E, |
$5BDD5873,$F6825F8F,$1113D228,$70AD996C,$93320051,$60471C53,$E9BA567B,$3A462AE3, |
$5F55E72D,$1D3C5AD7,$DCFC45EC,$34D812EF,$FA96EE1B,$369D1EF8,$C9B1A189,$7C1D3555, |
$50845EDC,$4BB31877,$8764A060,$8C9A9415,$230E1A3A,$B05E9133,$242B9E03,$A3B99DB7, |
$C2D7FB0A,$3333849D,$D27278D4,$B5D3EFA6,$78AC28AD,$C7B2C135,$0926ECF0,$C1374C91, |
$74F16D98,$2274084A,$3F6D9CFA,$7AC0A383,$B73AFF1F,$3909A23D,$9F1653AE,$4E2F3E71, |
$CA5AB22A,$E01E3858,$90C5A7EB,$3E4A17DF,$AA987FB0,$488BBD62,$B625062B,$2D776BB8, |
$43B5FC08,$1490D532,$D6D12495,$44E89845,$2FE60118,$9D9EF950,$AC38133E,$D3864329, |
$017B255A,$FDC2DD26,$256851E6,$318E7086,$2BFA4861,$89EAC706,$EE5940C6,$68C3BC2F, |
$E260334B,$98DA90BB,$F818F270,$4706D897,$212D3799,$4CF7E5D0,$D9C9649F,$A85DB5CD, |
$35E90E82,$6B881152,$AB1C02C7,$46752B02,$664F598E,$45AB2E64,$C4CDB4B2,$BA42107F, |
$EA2A808A,$971BF3DE,$4A54A836,$4253AECC,$1029BE68,$6DCC9225,$E4BCA56A,$C0AE50B1, |
$7E011D94,$E59C162C,$D8E5C340,$D470FA0B,$B2BE79DD,$D783889C,$1CEDE8F6,$8F4C817A, |
$DDB785C9,$860232D8,$198AAAD9,$A0814738,$3219CFFC,$169546D2,$FC0CB759,$55911510, |
$04D5CEC3,$ED08CC3B,$0D6CF427,$C8E38CCA,$0EEEE3FE,$9EE7D7C8,$F9F24FA9,$DB04B35D, |
$9AB0C9E0,$651F4417,$028F8B07,$6E28D9AA,$FBA96319,$8ED66687,$FECBC58D,$954DDB44), |
($7B0BDFFE,$865D16B1,$49A058C0,$97ABAA3F,$CAACC75D,$ABA6C17D,$F8746F92,$6F48AEED, |
$8841D4B5,$F36A146A,$73C390AB,$E6FB558F,$87B1019E,$26970252,$246377B2,$CBF676AE, |
$F923DB06,$F7389116,$14C81A90,$83114EB4,$8B137559,$95A86A7A,$D5B8DA8C,$C4DF780E, |
$5A9CB3E2,$E44D4062,$E8DC8EF6,$9D180845,$817AD18B,$C286C85B,$251F20DE,$EE6D5933, |
$F6EDEF81,$D4D16C1E,$C94A0C32,$8437FD22,$3271EE43,$42572AEE,$5F91962A,$1C522D98, |
$59B23F0C,$D86B8804,$08C63531,$2C0D7A40,$B97C4729,$04964DF9,$13C74A17,$5878362F, |
$4C808CD6,$092CB1E0,$6DF02885,$A0C2105E,$8ABA9E68,$64E03057,$E5D61325,$0E43A628, |
$16DBD62B,$2733D90B,$3AE57283,$C0C1052C,$4B6FB620,$37513953,$FC898BB3,$471B179F, |
$DF6E66B8,$D32142F5,$9B30FAFC,$4ED92549,$105C6D99,$4ACD69FF,$2B1A27D3,$6BFCC067, |
$6301A278,$AD36E6F2,$EF3FF64E,$56B3CADB,$0184BB61,$17BEB9FD,$FAEC6109,$A2E1FFA1, |
$2FD224F8,$238F5BE6,$8F8570CF,$AEB5F25A,$4F1D3E64,$4377EB24,$1FA45346,$B2056386, |
$52095E76,$BB7B5ADC,$3514E472,$DDE81E6E,$7ACEA9C4,$AC15CC48,$71C97D93,$767F941C, |
$911052A2,$FFEA09BF,$FE3DDCF0,$15EBF3AA,$9235B8BC,$75408615,$9A723437,$E1A1BD38, |
$33541B7E,$1BDD6856,$B307E13E,$90814BB0,$51D7217B,$0BB92219,$689F4500,$C568B01F, |
$5DF3D2D7,$3C0ECD0D,$2A0244C8,$852574E8,$E72F23A9,$8E26ED02,$2D92CBDD,$DABC0458, |
$CDF5FEB6,$9E4E8DCC,$F4F1E344,$0D8C436D,$4427603B,$BDD37FDA,$80505F26,$8C7D2B8E, |
$B73273C5,$397362EA,$618A3811,$608BFB88,$06F7D714,$212E4677,$28EFCEAD,$076C0371, |
$36A3A4D9,$5487B455,$3429A365,$65D467AC,$78EE7EEB,$99BF12B7,$4D129896,$772A5601, |
$CCE284C7,$2ED85C21,$D099E8A4,$A179158A,$6AC0AB1A,$299A4807,$BE67A58D,$DC19544A, |
$B8949B54,$8D315779,$B6F849C1,$53C5AC34,$66DE92A5,$F195DD13,$318D3A73,$301EC542, |
$0CC40DA6,$F253ADE4,$467EE566,$EA5585EC,$3BAF19BB,$7DE9F480,$79006E7C,$A9B7A197, |
$A44BD8F1,$FB2BA739,$EC342FD4,$ED4FD32D,$3D1789BA,$400F5D7F,$C798F594,$4506A847, |
$034C0A95,$E2162C9D,$55A9CFD0,$692D832E,$CF9DB2CA,$5E2287E9,$D2610EF3,$1AE7ECC2, |
$48399CA0,$A7E4269B,$6EE3A0AF,$7065BFE1,$A6FFE708,$2256804C,$7476E21B,$41B0796C, |
$7C243B05,$000A950F,$1858416B,$F5A53C89,$E9FEF823,$3F443275,$E0CBF091,$0AF27B84, |
$3EBB0F27,$1DE6F7F4,$C31C29F7,$B166DE3D,$12932EC3,$9C0C0674,$5CDA81B9,$D1BD9D12, |
$AFFD7C82,$8962BCA7,$A342C4A8,$62457151,$82089F03,$EB49C670,$5B5F6530,$7E28BAD2, |
$20880BA3,$F0FAAFCD,$CE82B56F,$0275335C,$C18E8AFB,$DE601D69,$BA9B820A,$C8A2BE4F, |
$D7CAC335,$D9A73741,$115E974D,$7F5AC21D,$383BF9C6,$BCAEB75F,$FD0350CE,$B5D06B87, |
$9820E03C,$72D5F163,$E3644FC9,$A5464C4B,$57048FCB,$9690C9DF,$DBF9EAFA,$BFF4649A, |
$053C00E3,$B4B61136,$67593DD1,$503EE960,$9FB4993A,$19831810,$C670D518,$B05B51D8, |
$0F3A1CE5,$6CAA1F9C,$AACC31BE,$949ED050,$1EAD07E7,$A8479ABD,$D6CFFCD5,$936993EF), |
($472E91CB,$5444B5B6,$62BE5861,$1BE102C7,$63E4B31E,$E81F71B7,$9E2317C9,$39A408AE, |
$518024F4,$1731C66F,$68CBC918,$71FB0C9E,$D03B7FDD,$7D6222EB,$9057EDA3,$1A34A407, |
$8CC2253D,$B6F6979D,$835675DC,$F319BE9F,$BE1CD743,$4D32FEE4,$77E7D887,$37E9EBFD, |
$15F851E8,$23DC3706,$19D78385,$BD506933,$A13AD4A6,$913F1A0E,$DDE560B9,$9A5F0996, |
$A65A0435,$48D34C4D,$E90839A7,$8ABBA54E,$6FD13CE1,$C7EEBD3C,$0E297602,$58B9BBB4, |
$EF7901E6,$64A28A62,$A509875A,$F8834442,$2702C709,$07353F31,$3B39F665,$F5B18B49, |
$4010AE37,$784DE00B,$7A1121E9,$DE918ED3,$C8529DCD,$816A5D05,$02ED8298,$04E3DD84, |
$FD2BC3E2,$AF167089,$96AF367E,$A4DA6232,$18FF7325,$05F9A9F1,$4FEFB9F9,$CD94EAA5, |
$BFAA5069,$A0B8C077,$60D86F57,$FE71C813,$29EBD2C8,$4CA86538,$6BF1A030,$A237B88A, |
$AA8AF41D,$E1F7B6EC,$E214D953,$33057879,$49CAA736,$FA45CFF3,$C063B411,$BA7E27D0, |
$31533819,$2A004AC1,$210EFC3F,$2646885E,$66727DCF,$9D7FBF54,$A8DD0EA8,$3447CACE, |
$3F0C14DB,$B8382AAC,$4ACE3539,$0A518D51,$95178981,$35AEE2CA,$73F0F7E3,$94281140, |
$59D0E523,$D292CB88,$565D1B27,$7EC8FBAF,$069AF08D,$C127FD24,$0BC77B10,$5F03E7EF, |
$453E99BA,$EED9FF7F,$87B55215,$7915AB4C,$D389A358,$5E75CE6D,$28D655C0,$DAD26C73, |
$2E2510FF,$9FA7EECC,$1D0629C3,$DC9C9C46,$2D67ECD7,$E75E94BD,$3D649E2A,$6C413A2B, |
$706F0D7C,$DFB0127B,$4E366B55,$2C825650,$24205720,$B5C998F7,$3E95462C,$756E5C72, |
$3259488F,$11E8771A,$A7C0A617,$577663E5,$089B6401,$8EAB1941,$AE55EF8C,$3AAC5460, |
$D4E6262F,$5D979A47,$B19823B0,$7F8D6A0C,$FFA08683,$0170CD0F,$858CD5D8,$53961C90, |
$C4C61556,$41F2F226,$CFCD062D,$F24C03B8,$EA81DF5B,$7BE2FA52,$B361F98B,$C2901316, |
$55BA4BBC,$93B234A9,$0FBC6603,$80A96822,$6D60491F,$22BD00F8,$BCAD5AAD,$52F3F13B, |
$42FD2B28,$B41DD01C,$C52C93BF,$FC663094,$8F58D100,$43FECC08,$C6331E5D,$E6480F66, |
$CA847204,$4BDF1DA0,$30CC2EFB,$13E02DEA,$FB49AC45,$F9D4434F,$F47C5B9C,$148879C2, |
$039FC234,$A3DB9BFC,$D1A1DC5C,$763D7CD4,$ED6D2F93,$AB13AF6E,$1E8E054A,$D68F4F9A, |
$C30484B3,$D7D50AFA,$6930855F,$CC07DB95,$CE746DB1,$744E967D,$F16CF575,$8643E8B5, |
$F0EAE38E,$E52DE1D1,$6587DAE0,$0C4B8121,$1C7AC567,$AC0DB20A,$36C3A812,$5B1A4514, |
$A9A3F868,$B9263BAA,$CB3CE9D2,$E44FB1A4,$9221BC82,$B29390FE,$6AB41863,$974A3E2E, |
$89F531C5,$255CA13E,$8B65D348,$EC248F78,$D8FC16F0,$50ECDEEE,$09010792,$3C7D1FB2, |
$EBA5426B,$847B417A,$468B40D9,$8DC4E680,$7CC1F391,$2F1EB086,$6E5BAA6A,$E0B395DA, |
$E31B2CF6,$D9690B0D,$729EC464,$38403DDE,$610B80A2,$5CF433AB,$B0785FC4,$D512E4C6, |
$BBB7D699,$5A86591B,$10CF5376,$12BF9F4B,$980FBAA1,$992A4E70,$20FA7AE7,$F7996EBB, |
$C918A2BE,$82DE74F2,$AD54209B,$F66B4D74,$1FC5B771,$169D9229,$887761DF,$00B667D5, |
$DB425E59,$B72F2844,$9B0AC1F5,$9C737E3A,$2B85476C,$6722ADD6,$44A63297,$0D688CED), |
($ABC59484,$4107778A,$8AD94C6F,$FE83DF90,$0F64053F,$D1292E9D,$C5744356,$8DD1ABB4, |
$4C4E7667,$FB4A7FC1,$74F402CB,$70F06AFD,$A82286F2,$918DD076,$7A97C5CE,$48F7BDE3, |
$6A04D11D,$AC243EF7,$33AC10CA,$2F7A341E,$5F75157A,$F4773381,$591C870E,$78DF8CC8, |
$22F3ADB0,$251A5993,$09FBEF66,$796942A8,$97541D2E,$2373DAA9,$1BD2F142,$B57E8EB2, |
$E1A5BFDB,$7D0EFA92,$B3442C94,$D2CB6447,$386AC97E,$66D61805,$BDADA15E,$11BC1AA7, |
$14E9F6EA,$E533A0C0,$F935EE0A,$8FEE8A04,$810D6D85,$7C68B6D6,$4EDC9AA2,$956E897D, |
$ED87581A,$264BE9D7,$FF4DDB29,$823857C2,$E005A9A0,$F1CC2450,$6F9951E1,$AADE2310, |
$E70C75F5,$83E1A31F,$4F7DDE8E,$F723B563,$368E0928,$86362B71,$21E8982D,$DFB3F92B, |
$44676352,$99EFBA31,$2EAB4E1C,$FC6CA5E7,$0EBE5D4E,$A0717D0C,$B64F8199,$946B31A1, |
$5656CBC6,$CFFEC3EF,$622766C9,$FA211E35,$52F98B89,$6D01674B,$4978A802,$F651F701, |
$15B0D43D,$D6FF4683,$3463855F,$672BA29C,$BC128312,$4626A70D,$C8927A5A,$B8481CF9, |
$1C962262,$A21196BA,$BABA5EE9,$5BB162D0,$69943BD1,$0C47E35C,$8CC9619A,$E284D948, |
$271BF264,$C27FB398,$4BC70897,$60CF202C,$7F42D6AA,$A5A13506,$5D3E8860,$CEA63D3C, |
$63BF0A8F,$F02E9EFA,$B17B0674,$B072B1D3,$06E5723B,$3737E436,$24AA49C7,$0DED0D18, |
$DB256B14,$58B27877,$ECB49F54,$6C40256A,$6EA92FFB,$3906AA4C,$C9866FD5,$4549323E, |
$A7B85FAB,$1918CC27,$7308D7B5,$1E16C7AD,$71850B37,$3095FD78,$A63B70E6,$D880E2AE, |
$3E282769,$A39BA6BC,$98700FA3,$F34C53E8,$288AF426,$B99D930F,$F5B99DF1,$E9D0C8CF, |
$5AC8405D,$50E7217B,$511FBBBE,$2CA2E639,$C020301B,$356DBC00,$8E43DDB9,$4D327B4A, |
$F20FF3ED,$1DBB29BD,$43D44779,$A1B68F70,$6114455B,$E63D280B,$6BF6FF65,$10FC39E5, |
$3DAE126E,$C1D7CF11,$CB60B795,$1789D5B3,$9BCA36B7,$08306075,$84615608,$8B3A0186, |
$E88FBECD,$7BA47C4D,$2DE44DAC,$653FE58D,$CCA0B968,$D7FA0E72,$93901780,$1F2C26CC, |
$AE595B6B,$A9ECEA9B,$E3DBF8C4,$319CC130,$12981196,$01A3A4DE,$32C454B6,$755BD817, |
$3CD871E4,$A48BB8DA,$02FDEC09,$FD2DC2E2,$9E578088,$9A9F916D,$4065FE6C,$1853999E, |
$C7793F23,$DC1016BB,$969355FF,$7EF292F6,$CDCE4ADC,$05E24416,$85C16C46,$D441D37F, |
$57BD6855,$8746F54F,$9CA773DF,$770BAE22,$54828413,$B75E4B19,$04C35C03,$BF7CCA07, |
$2955C4DD,$721DB041,$B2394F33,$03F51387,$89B73C9F,$0B1737F3,$07E69024,$9231D245, |
$76193861,$88159C15,$DEB552D9,$D9767E40,$20C6C0C3,$4281977C,$F8AFE1E0,$D32A0751, |
$3FC27432,$DDF1DCC5,$68581F34,$3BCD5025,$0091B2EE,$4AEB6944,$1602E743,$EA09EB58, |
$EF0A2A8B,$641E03A5,$EB50E021,$5C8CCEF8,$802FF0B8,$D5E3EDFE,$C4DD1B49,$5334CD2A, |
$13F82D2F,$47450C20,$55DAFBD2,$BEC0C6F4,$B45D7959,$3AD36E8C,$0AA8AC57,$1A3C8D73, |
$E45AAFB1,$9F664838,$C6880053,$D0039BBF,$EE5F19EB,$CA0041D8,$BBEA3AAF,$DA628291, |
$9D5C95D4,$ADD504A6,$C39AB482,$5E9E14A4,$2BE065F0,$2A13FC3A,$9052E8EC,$AF6F5AFC), |
($519AA8B5,$BB303DA9,$E00E2B10,$DFA6C1DB,$2E6B952E,$EE10DC23,$37936D09,$1FC42E92, |
$39B25A9F,$13FF89F4,$C8F53FEA,$18500BC7,$95A0379D,$98F751C2,$2289C42F,$A21E4098, |
$6F391F41,$F27E7E58,$0D0DF887,$4B79D540,$8E8409AA,$71FE46F8,$688A9B29,$3F08B548, |
$84ABE03A,$5E91B6C1,$FDE4C2AE,$251D0E72,$92D4FEE5,$F9371967,$9175108F,$E6E81835, |
$8C8CB8EE,$B55A67B3,$CEF138CC,$8B256268,$00D815F5,$E8810812,$77826189,$EA73267D, |
$19B90F8D,$45C33BB4,$82477056,$E1770075,$09467AA6,$A7C6F54A,$79768742,$61B86BCA, |
$D6644A44,$E33F0171,$C229FBCD,$41B08FEB,$D1903E30,$65EC9080,$563D6FBD,$F56DA488, |
$EBF64CD8,$4934426B,$7C8592FC,$6ACA8CF2,$1CEA111B,$3A57EE7A,$ACE11C0D,$9942D85E, |
$C4613407,$FA8E643B,$327FC701,$4CA9BE82,$3352526D,$2C047F63,$F3A8F7DD,$1A4A98A8, |
$762ED4D1,$27C75008,$BDF497C0,$7A7B84DF,$315C28AB,$801F93E3,$F19B0CA1,$8F14E46A, |
$E48BA333,$9605E625,$F03ECB60,$60385F2D,$902845BA,$7F96D66F,$24BFF05C,$2820730B, |
$947133CB,$D444828A,$B343F6F1,$0BEF4705,$8DA574F9,$01E25D6C,$1732793E,$4F0F7B27, |
$364B7117,$B2D1DA77,$A6C5F1E9,$574CA5B1,$386A3076,$AD6894D6,$1156D7FA,$A48D1D9A, |
$4794C0AF,$150C0AA0,$26D348AC,$29FDEABE,$A5DEDE53,$81671E8E,$594EE3BF,$A96C56E6, |
$3426A726,$C5976579,$BC22E5E4,$C1006319,$DAAFDD2A,$A1A1AA83,$3BADD0E7,$C3B14981, |
$D770B155,$CCD7C693,$42E944C5,$03E0064F,$CA95B4EF,$3DEE81C3,$FBBCD98C,$1E07E15B, |
$667CE949,$E7D6773F,$21B6124B,$6B2A6EF7,$D3278A9C,$9A988304,$75D2AE9B,$FE49E2FF, |
$9BC24F46,$74CC2CF6,$A3139F36,$6C9EF35A,$9FC1DFFE,$9E5FACDC,$AADC8BBB,$5ABDBC5F, |
$44B3B390,$F754EFA7,$5FE3BDB7,$4E59C886,$06A4C984,$A0338878,$CD513CD7,$63EBD27E, |
$8ABA80AD,$50DA144E,$5D9F4E97,$025B751C,$2D580200,$B6C05837,$580AA15D,$54022A6E, |
$B41A5415,$4863FAB6,$B0B79957,$46D0D159,$DC2B8650,$20A7BB0C,$4A032974,$EC8636A2, |
$8548F24C,$F6A2BF16,$1088F4B0,$0C2F3A94,$525DC396,$14065785,$2B4DCA52,$08AEED39, |
$ABEDFC99,$B1DBCF18,$87F85BBC,$AE3AFF61,$433CCD70,$5B23CC64,$7B453213,$5355C545, |
$9318EC0A,$78692D31,$0A21693D,$D5666814,$05FB59D9,$C71985B2,$2ABB8E0E,$CF6E6C91, |
$D9CFE7C6,$EFE7132C,$9711AB28,$3CE52732,$12D516D2,$7209A0D0,$D278D306,$70FA4B7B, |
$1D407DD3,$DB0BEBA4,$BFD97621,$A8BE21E1,$1B6F1B66,$30650DDA,$BA7DDBB9,$7DF953FB, |
$9D1C3902,$EDF0E8D5,$B8741AE0,$0F240565,$62CD438B,$C616A924,$AF7A96A3,$35365538, |
$E583AF4D,$73415EB8,$23176A47,$FC9CCEE8,$7EFC9DE2,$695E03CF,$F8CE66D4,$88B4781D, |
$67DD9C03,$3E8F9E73,$C0C95C51,$BE314D22,$55AA0795,$CB1BB011,$E980FDC8,$9C62B7CE, |
$DE2D239E,$042CADF3,$FFDF04DE,$5CE6A60F,$D8C831ED,$B7B5B9EC,$B9CBF962,$E253B254, |
$0735BA1F,$16AC917F,$DD607C2B,$64A335C4,$40159A7C,$869222F0,$6EF21769,$839D20A5, |
$D03B24C9,$F412601E,$6D72A243,$0E018DFD,$89F3721A,$C94F4134,$2F992F20,$4D87253C) |
); |
Tiger_Data: array[0..3, 0..511] of UInt32 = ( |
($F7E90C5E,$02AAB17C,$E243A8EC,$AC424B03,$0DD5FCD3,$72CD5BE3,$F6F97F3A,$6D019B93, |
$D21F9193,$CD9978FF,$708029E2,$7573A1C9,$922A83C3,$B164326B,$04915870,$46883EEE, |
$7103ECE6,$EAACE305,$08A3535C,$C54169B8,$8DDEC47C,$4CE75491,$DC0DF40C,$0AA2F4DF, |
$A74DBEFA,$10B76F18,$5AD1AB6A,$C6CCB623,$572FE2FF,$13726121,$199D921E,$1A488C6F, |
$DA0007CA,$4BC9F9F4,$E85241C7,$26F5E6F6,$EA5947B6,$859079DB,$C99E8C92,$4F1885C5, |
$A96F864B,$D78E761E,$52B5C17D,$8E36428C,$373063C1,$69CF6827,$9BB4C56E,$B607C93D, |
$0E76B5EA,$7D820E76,$F07FDC42,$645C9CC6,$243342E0,$BF38A078,$9D2E7D04,$5F6B343C, |
$600B0EC6,$F2C28AEB,$7254BCAC,$6C0ED85F,$A4DB4FE5,$71592281,$CE0FED9F,$1967FA69, |
$B96545DB,$FD5293F8,$F2A7600B,$C879E9D7,$0193194E,$86024892,$2D9CC0B3,$A4F9533B, |
$15957613,$9053836C,$FC357BF1,$DB6DCF8A,$7A370F57,$18BEEA7A,$50B99066,$037117CA, |
$74424A35,$6AB30A97,$E325249B,$F4E92F02,$061CCAE1,$7739DB07,$ECA42A05,$D8F3B49C, |
$51382F73,$BD56BE3F,$43B0BB28,$45FAED58,$11BF1F83,$1C813D5C,$D75FA169,$8AF0E4B6, |
$87AD9999,$33EE18A4,$B1C94410,$3C26E8EA,$C0A822F9,$B510102B,$0CE6123B,$141EEF31, |
$59DDB154,$FC65B900,$C5E0E607,$E0158640,$26C3A3CF,$884E0798,$23C535FD,$930D0D95, |
$4E9A2B00,$35638D75,$40469DD5,$4085FCCF,$8BE23A4C,$C4B17AD2,$6A3E6A2E,$CAB2F0FC, |
$6B943FCD,$2860971A,$12E30446,$3DDE6EE2,$E01765AE,$6222F32A,$478308FE,$5D550BB5, |
$A0EDA22A,$A9EFA98D,$86C40DA7,$C351A716,$9C867C84,$1105586D,$FDA22853,$DCFFEE85, |
$2C5EEF76,$CCFBD026,$8990D201,$BAF294CB,$2AFAD975,$E69464F5,$DF133E14,$94B013AF, |
$2823C958,$06A7D1A3,$30F61119,$6F95FE51,$462C06C0,$D92AB34E,$887C71D2,$ED7BDE33, |
$6518393E,$79746D6E,$5D713329,$5BA41938,$48A97564,$7C1BA6B9,$7BFDAC67,$31987C19, |
$4B053D02,$DE6C23C4,$D002D64D,$581C49FE,$38261571,$DD474D63,$E473D062,$AA4546C3, |
$9455F860,$928FCE34,$CAAB94D9,$48161BBA,$770E6F68,$63912430,$02C6641C,$6EC8A5E6, |
$337DDD2B,$87282515,$034B701B,$2CDA6B42,$81CB096D,$B03D37C1,$66C71C6F,$E1084382, |
$EB51B255,$2B3180C7,$96C08BBC,$DF92B82F,$A632F3BA,$5C68C8C0,$1C3D0556,$5504CC86, |
$5FB26B8F,$ABBFA4E5,$B3BACEB4,$41848B0A,$AA445D32,$B334A273,$A85AD881,$BCA696F0, |
$B528D56C,$24F6EC65,$90F4524A,$0CE1512E,$5506D35A,$4E9DD79D,$C6CE9779,$258905FA, |
$3E109B33,$2019295B,$73A054CC,$F8A9478B,$34417EB0,$2924F2F9,$536D1BC4,$3993357D, |
$1DB6FF8B,$38A81AC2,$7D6016BF,$47C4FBF1,$7667E3F5,$1E0FAADD,$938BEB96,$7ABCFF62, |
$8FC179C9,$A78DAD94,$2911E50D,$8F1F98B7,$27121A91,$61E48EAE,$31859808,$4D62F7AD, |
$EF5CEAEB,$ECEBA345,$BC9684CE,$F5CEB25E,$B7F76221,$F633E20C,$AB8293E4,$A32CDF06, |
$A5EE2CA4,$985A202C,$CC8A8FB1,$CF0B8447,$979859A3,$9F765244,$A1240017,$A8D516B1, |
$BB5DC726,$0BD7BA3E,$B86ADB39,$E54BCA55,$6C478063,$1D7A3AFD,$E7669EDD,$519EC608, |
$D149AA23,$0E5715A2,$848FF194,$177D4571,$41014C22,$EEB55F32,$3A6E2EC2,$0F5E5CA1, |
$75F5C361,$8029927B,$C3D6E436,$AD139FAB,$4CCF402F,$0D5DF1A9,$BEA5DFC8,$3E8BD948, |
$BD3FF77E,$A5A0D357,$1F74F645,$A2D12E25,$5E81A082,$66FD9E52,$7F687A49,$2E0C90CE, |
$BA973BC5,$C2E8BCBE,$E509745F,$000001BC,$E6DAB3D6,$423777BB,$AEF06EB5,$D1661C7E, |
$4DAACFD8,$A1781F35,$2B16AFFC,$2D11284A,$FA891D1F,$F1FC4F67,$CB920ADA,$73ECC25D, |
$C2A12651,$AE610C22,$D356B78A,$96E0A810,$2FE7870F,$5A9A381F,$E94E5530,$D5AD62ED, |
$368D1427,$D225E5E8,$C7AF4631,$65977B70,$DE39D74F,$99F889B2,$54E1D143,$233F30BF, |
$D9A63C97,$9A9675D3,$F334F9A8,$5470554F,$4A4F5688,$166ACB74,$B2E4AEAD,$70C74CAA, |
$6F294D12,$F0D09164,$684031D1,$57B82A89,$61BE0B6B,$EFD95A5A,$69F2F29A,$2FBD12E9, |
$FEFF9FE8,$9BD37013,$D6085A06,$3F9B0404,$166CFE15,$4940C1F3,$CDF3DEFB,$09542C4D, |
$85CD5CE3,$B4C52183,$4462A641,$C935B7DC,$8ED3B63F,$3417F8A6,$5B215B40,$B8095929, |
$3B8C8572,$F99CDAEF,$F8FCB95D,$018C0614,$1A3ACDF3,$1B14ACCD,$00BB732D,$84D471F2, |
$95E8DA16,$C1A3110E,$BF1A82B8,$430A7220,$39DF210E,$B77E090D,$3CD05E9D,$5EF4BD9F, |
$7E57A444,$9D4FF6DA,$83D4A5F8,$DA1D60E1,$17998E47,$B287C384,$1BB31886,$FE3EDC12, |
$980CCBEF,$C7FE3CCC,$189BFD03,$E46FB590,$9A4C57DC,$3732FD46,$7CF1AD65,$7EF700A0, |
$A31D8859,$59C64468,$D45B61F6,$762FB0B4,$99047718,$155BAED0,$3D50BAA6,$68755E4C, |
$22D8B4DF,$E9214E7F,$2EAC95F4,$2ADDBF53,$B4BD0109,$32AE3909,$B08E3450,$834DF537, |
$4220728D,$FA209DA8,$9EFE23F7,$9E691D9B,$C4AE8D7F,$0446D288,$E169785B,$7B4CC524, |
$35CA1385,$21D87F01,$137B8AA5,$CEBB400F,$580796BE,$272E2B66,$25C2B0DE,$36122641, |
$AD1EFBB2,$057702BD,$ACF84BE9,$D4BABB8E,$641BC67B,$91583139,$8036E024,$8BDC2DE0, |
$F49F68ED,$603C8156,$DBEF5111,$F7D236F7,$8AD21E80,$9727C459,$670A5FD7,$A08A0896, |
$09EBA9CB,$CB4A8F43,$0F7036A1,$81AF564B,$78199ABD,$C0B99AA7,$3FC8E952,$959F1EC8, |
$794A81B9,$8C505077,$056338F0,$3ACAAF8F,$627A6778,$07B43F50,$F5ECCC77,$4A44AB49, |
$B679EE98,$3BC3D6E4,$CF14108C,$9CC0D4D1,$206BC8A0,$4406C00B,$C8D72D89,$82A18854, |
$5C3C432C,$67E366B3,$102B37F2,$B923DD61,$D884271D,$56AB2779,$FF1525AF,$BE83E1B0, |
$217E49A9,$FB7C65D4,$6D48E7D4,$6BDBE0E7,$45D9179E,$08DF8287,$DD53BD34,$22EA6A9A, |
$5622200A,$E36E141C,$8CB750EE,$7F805D1B,$9F58E837,$AFE5C7A5,$4FB1C23C,$E27F996A, |
$0775F0D0,$D3867DFB,$6E88891A,$D0E673DE,$AFB86C25,$123AEB9E,$C145B895,$30F1D5D5, |
$EE7269E7,$BB434A2D,$F931FA38,$78CB67EC,$323BBF9C,$F33B0372,$FB279C74,$52D66336, |
$0AFB4EAA,$505F33AC,$A2CCE187,$E8A5CD99,$1E2D30BB,$53497480,$D5876D90,$8D2D5711, |
$91BC038E,$1F1A4128,$82E56648,$D6E2E71D,$497732B7,$74036C3A,$6361F5AB,$89B67ED9, |
$F1EA02A2,$FFED95D8,$1464D43D,$E72B3BD6,$0BDC4820,$A6300F17,$ED78A77A,$EBC18760), |
($05A12138,$E6A6BE5A,$B4F87C98,$B5A122A5,$140B6990,$563C6089,$391F5DD5,$4C46CB2E, |
$C9B79434,$D932ADDB,$2015AFF5,$08EA70E4,$3E478CF1,$D765A667,$AB278D99,$C4FB757E, |
$2D6E0692,$DF11C686,$0D7F3B16,$DDEB84F1,$A665EA04,$6F2EF604,$F0E0DFB3,$4A8E0F0F, |
$3DBCBA51,$A5EDEEF8,$0EA4371E,$FC4F0A2A,$5CB38429,$E83E1DA8,$BA1B1CE2,$DC8FF882, |
$8353E80D,$CD45505E,$D4DB0717,$18D19A00,$A5F38101,$34A0CFED,$8887CAF2,$0BE77E51, |
$B3C45136,$1E341438,$9089CCF9,$E05797F4,$F2591D14,$FFD23F9D,$8595C5CD,$543DDA22, |
$99052A33,$661F81FD,$DB0F7B76,$8736E641,$418E5307,$15227725,$162EB2FA,$E25F7F46, |
$6C13D9FE,$48A8B212,$92E76EEA,$AFDC5417,$C6D1898F,$03D912BF,$1B83F51B,$31B1AAFA, |
$E42AB7D9,$F1AC2796,$FCD2EBAC,$40A3A7D7,$0AFBBCC5,$1056136D,$9A6D0C85,$7889E1DD, |
$2A7974AA,$D3352578,$078AC09B,$A7E25D09,$EAC6EDD0,$BD4138B3,$71EB9E70,$920ABFBE, |
$4FC2625C,$A2A5D0F5,$0B1290A3,$C054E36B,$62FE932B,$F6DD59FF,$11A8AC7D,$35373545, |
$72FADCD4,$CA845E91,$329D20DC,$84F82B60,$CD672F18,$79C62CE1,$D124642C,$8B09A2AD, |
$19D9E726,$D0C1E96A,$4BA9500C,$5A786A9B,$634C43F3,$0E020336,$EB66D822,$C17B474A, |
$EC9BAAC2,$6A731AE3,$E0840258,$8226667A,$91CAECA5,$67D45676,$4875ADB5,$1D94155C, |
$5B813FDF,$6D00FD98,$B774CD06,$51286EFC,$1FA744AF,$5E883447,$E761AE2E,$F72CA0AE, |
$AEE8E09A,$BE40E4CD,$5118F665,$E9970BBB,$33DF1964,$726E4BEB,$29199762,$703B0007, |
$F5EF30A7,$4631D816,$1504A6BE,$B880B5B5,$7ED84B6C,$641793C3,$F6E97D96,$7B21ED77, |
$2EF96B73,$77630631,$E86FF3F4,$AE528948,$86A3F8F8,$53DBD7F2,$4CFC1063,$16CADCE7, |
$FA52C6DD,$005C19BD,$64D46AD3,$68868F5D,$CF1E186A,$3A9D512C,$385660AE,$367E62C2, |
$77DCB1D7,$E359E7EA,$749ABE6E,$526C0773,$D09F734B,$735AE5F9,$8A558BA8,$493FC7CC, |
$3041AB45,$B0B9C153,$470A59BD,$321958BA,$5F46C393,$852DB00B,$D336B0E5,$91209B2B, |
$659EF19F,$6E604F7D,$782CCB24,$B99A8AE2,$C814C4C7,$CCF52AB6,$BE11727B,$4727D9AF, |
$0121B34D,$7E950D0C,$70AD471F,$756F4356,$615A6849,$F5ADD442,$80B9957A,$4E87E099, |
$50AEE355,$2ACFA1DF,$FD2FD556,$D898263A,$D80C8FD6,$C8F4924D,$754A173A,$CF99CA3D, |
$AF91BF3C,$FE477BAC,$D690C12D,$ED5371F6,$5E687094,$831A5C28,$3708A0A4,$C5D3C90A, |
$17D06580,$0F7F9037,$B8FDF27F,$19F9BB13,$4D502843,$B1BD6F1B,$8FFF4012,$1C761BA3, |
$E2E21F3B,$0D1530C4,$A7372C8A,$8943CE69,$FEB5CE66,$E5184E11,$BD736621,$618BDB80, |
$8B574D0B,$7D29BAD6,$25E6FE5B,$81BB613E,$BC07913F,$071C9C10,$09AC2D97,$C7BEEB79, |
$3BC5D757,$C3E58D35,$F38F61E8,$EB017892,$9B1CC21A,$D4EFFB9C,$F494F7AB,$99727D26, |
$956B3E03,$A3E063A2,$4AA09C30,$9D4A8B9A,$00090FB4,$3F6AB7D5,$57268AC0,$9CC0F2A0, |
$EDBF42D1,$3DEE9D2D,$7960A972,$330F49C8,$87421B41,$C6B27202,$7C00369C,$0AC59EC0, |
$CB353425,$EF4EAC49,$EF0129D8,$F450244E,$CAF4DEB6,$8ACC46E5,$989263F7,$2FFEAB63, |
$5D7A4578,$8F7CB9FE,$4E634635,$5BD8F764,$BF2DC900,$427A7315,$2125261C,$17D0C4AA, |
$93518E50,$3992486C,$A2D7D4C3,$B4CBFEE0,$2C5DDD8D,$7C75D620,$E35B6C61,$DBC295D8, |
$02032B19,$60B369D3,$DCE44132,$CE42685F,$DDF65610,$06F3DDB9,$B5E148F0,$8EA4D21D, |
$2FCD496F,$20B0FCE6,$58B0EE31,$2C1B9123,$18F5A308,$B28317B8,$9CA6D2CF,$A89C1E18, |
$6AAADBC8,$0C6B1857,$1299FAE3,$B65DEAA9,$7F1027E7,$FB2B794B,$443B5BEB,$04E4317F, |
$5939D0A6,$4B852D32,$FB207FFC,$D5AE6BEE,$81C7D374,$309682B2,$94C3B475,$BAE309A1, |
$13B49F05,$8CC3F97B,$F8293967,$98A9422F,$1076FF7C,$244B16B0,$663D67EE,$F8BF571C, |
$EEE30DA1,$1F0D6758,$7ADEB9B7,$C9B611D9,$7B6C57A2,$B7AFD588,$6B984FE1,$6290AE84, |
$ACC1A5FD,$94DF4CDE,$C5483AFF,$058A5BD1,$42BA3C37,$63166CC1,$B2F76F40,$8DB8526E, |
$6F0D6D4E,$E1088003,$971D311D,$9E0523C9,$CC7CD691,$45EC2824,$E62382C9,$575B8359, |
$C4889995,$FA9E400D,$45721568,$D1823ECB,$8206082F,$DAFD983B,$2386A8CB,$AA7D2908, |
$03B87588,$269FCD44,$28BDD1E0,$1B91F5F7,$040201F6,$E4669F39,$8CF04ADE,$7A1D7C21, |
$D79CE5CE,$65623C29,$96C00BB1,$23684490,$9DA503BA,$AB9BF187,$A458058E,$BC23ECB1, |
$BB401ECC,$9A58DF01,$A85F143D,$A070E868,$7DF2239E,$4FF18830,$1A641183,$14D565B4, |
$52701602,$EE133374,$3F285E09,$950E3DCF,$B9C80953,$59930254,$8930DA6D,$3BF29940, |
$53691387,$A955943F,$A9CB8784,$A15EDECA,$352BE9A0,$29142127,$FF4E7AFB,$76F0371F, |
$274F2228,$0239F450,$1D5E868B,$BB073AF0,$C10E96C1,$BFC80571,$68222E23,$D2670885, |
$8E80B5B0,$9671A3D4,$E193BB81,$55B5D38A,$A18B04B8,$693AE2D0,$ADD5335F,$5C48B4EC, |
$4916A1CA,$FD743B19,$34BE98C4,$25770181,$3C54A4AD,$E77987E8,$DA33E1B9,$28E11014, |
$226AA213,$270CC59E,$6D1A5F60,$71495F75,$60AFEF77,$9BE853FB,$F7443DBF,$ADC786A7, |
$73B29A82,$09044561,$C232BD5E,$58BC7A66,$673AC8B2,$F306558C,$B6C9772A,$41F639C6, |
$9FDA35DA,$216DEFE9,$1C7BE615,$11640CC7,$565C5527,$93C43694,$46777839,$EA038E62, |
$5A3E2469,$F9ABF3CE,$0FD312D2,$741E768D,$CED652C6,$0144B883,$A33F8552,$C20B5A5B, |
$C3435A9D,$1AE69633,$088CFDEC,$97A28CA4,$1E96F420,$8824A43C,$6EEEA746,$37612FA6, |
$F9CF0E5A,$6B4CB165,$A0ABFB4A,$43AA1C06,$F162796B,$7F4DC26F,$54ED9B0F,$6CBACC8E, |
$D2BB253E,$A6B7FFEF,$B0A29D4F,$2E25BC95,$DEF1388C,$86D6A58B,$76B6F054,$DED74AC5, |
$2B45805D,$8030BDBC,$E94D9289,$3C81AF70,$9E3100DB,$3EFF6DDA,$DFCC8847,$B38DC39F, |
$8D17B87E,$12388552,$40B1B642,$F2DA0ED2,$D54BF9A9,$44CEFADC,$433C7EE6,$1312200E, |
$3A78C748,$9FFCC84F,$248576BB,$F0CD1F72,$3638CFE4,$EC697405,$0CEC4E4C,$2BA7B67C, |
$E5CE32ED,$AC2F4DF3,$26EA4C11,$CB33D143,$C77E58BC,$A4E9044C,$D934FCEF,$5F513293, |
$06E55444,$5DC96455,$317DE40A,$50DE418F,$69DDE259,$388CB31A,$55820A86,$2DB4A834, |
$84711AE9,$9010A91E,$B1498371,$4DF7F0B7,$C0977179,$D62A2EAB,$AA8D5C0E,$22FAC097), |
($F1DAF39B,$F49FCC2F,$6FF29281,$487FD5C6,$FCDCA83F,$E8A30667,$D2FCCE63,$2C9B4BE3, |
$93FBBBC2,$DA3FF74B,$FE70BA66,$2FA165D2,$970E93D4,$A103E279,$B0E45E71,$BECDEC77, |
$3985E497,$CFB41E72,$5EF75017,$B70AAA02,$3840B8E0,$D42309F0,$35898579,$8EFC1AD0, |
$E2B2ABC5,$96C6920B,$375A9172,$66AF4163,$CA7127FB,$2174ABDC,$4A72FF41,$B33CCEA6, |
$083066A5,$F04A4933,$D7289AF5,$8D970ACD,$31C8C25E,$8F96E8E0,$76875D47,$F3FEC022, |
$056190DD,$EC7BF310,$BB0F1491,$F5ADB0AE,$0FD58892,$9B50F885,$58B74DE8,$49754883, |
$91531C61,$A3354FF6,$81D2C6EE,$0702BBE4,$7DEDED98,$89FB2405,$8596E902,$AC307513, |
$172772ED,$1D2D3580,$8E6BC30D,$EB738FC2,$63044326,$5854EF8F,$5ADD3BBE,$9E5C5232, |
$325C4623,$90AA53CF,$349DD067,$C1D24D51,$A69EA624,$2051CFEE,$862E7E4F,$13220F0A, |
$04E04864,$CE393994,$7086FCB7,$D9C42CA4,$8A03E7CC,$685AD223,$AB2FF1DB,$066484B2, |
$EFBF79EC,$FE9D5D70,$9C481854,$5B13B9DD,$ED1509AD,$15F0D475,$0EC79851,$0BEBCD06, |
$183AB7F8,$D58C6791,$52F3EEE4,$D1187C50,$E54E82FF,$C95D1192,$B9AC6CA2,$86EEA14C, |
$53677D5D,$3485BEB1,$1F8C492A,$DD191D78,$A784EBF9,$F60866BA,$A2D08C74,$518F643B, |
$E1087C22,$8852E956,$C410AE8D,$A768CB8D,$BFEC8E1A,$38047726,$CD3B45AA,$A67738B4, |
$EC0DDE19,$AD16691C,$80462E07,$C6D43193,$0BA61938,$C5A5876D,$A58FD840,$16B9FA1F, |
$3CA74F18,$188AB117,$C99C021F,$ABDA2F98,$134AE816,$3E0580AB,$73645ABB,$5F3B05B7, |
$5575F2F6,$2501A2BE,$4E7E8BA9,$1B2F7400,$71E8D953,$1CD75803,$62764E30,$7F6ED895, |
$596F003D,$B15926FF,$A8C5D6B9,$9F65293D,$D690F84C,$6ECEF04D,$FF33AF88,$4782275F, |
$3F820801,$E4143308,$9A1AF9B5,$FD0DFE40,$2CDB396B,$4325A334,$B301B252,$8AE77E62, |
$6655615A,$C36F9E9F,$92D32C09,$85455A2D,$49477485,$F2C7DEA9,$33A39EBA,$63CFB4C1, |
$6EBC5462,$83B040CC,$FDB326B0,$3B9454C8,$87FFD78C,$56F56A9E,$99F42BC6,$2DC2940D, |
$6B096E2D,$98F7DF09,$3AD852BF,$19A6E01E,$DBD4B40B,$42A99CCB,$45E9C559,$A59998AF, |
$07D93186,$366295E8,$FAA1F773,$6B48181B,$157A0A1D,$1FEC57E2,$F6201AD5,$4667446A, |
$CFB0F075,$E615EBCA,$68290778,$B8F31F4F,$CE22D11E,$22713ED6,$2EC3C93B,$3057C1A7, |
$7C3F1F2F,$CB46ACC3,$02AAF50E,$DBB893FD,$600B9FCF,$331FD92E,$48EA3AD6,$A498F961, |
$8B6A83EA,$A8D8426E,$B7735CDC,$A089B274,$1E524A11,$87F6B373,$CBC96749,$118808E5, |
$B19BD394,$9906E4C7,$9B24A20C,$AFED7F7E,$EB3644A7,$6509EADE,$E8EF0EDE,$6C1EF1D3, |
$E9798FB4,$B9C97D43,$740C28A3,$A2F2D784,$6197566F,$7B849647,$B65F069D,$7A5BE3E6, |
$78BE6F10,$F96330ED,$7A076A15,$EEE60DE7,$A08B9BD0,$2B4BEE4A,$C7B8894E,$6A56A63E, |
$BA34FEF4,$02121359,$283703FC,$4CBF99F8,$0CAF30C8,$39807135,$F017687A,$D0A77A89, |
$9E423569,$F1C1A9EB,$2DEE8199,$8C797628,$DD1F7ABD,$5D1737A5,$09A9FA80,$4F53433C, |
$DF7CA1D9,$FA8B0C53,$886CCB77,$3FD9DCBC,$A91B4720,$C040917C,$F9D1DCDF,$7DD00142, |
$4F387B58,$8476FC1D,$F3316503,$23F8E7C5,$E7E37339,$032A2244,$50F5A74B,$5C87A5D7, |
$3698992E,$082B4CC4,$B858F63C,$DF917BEC,$5BF86DDA,$3270B8FC,$29B5DD76,$10AE72BB, |
$7700362B,$576AC94E,$C61EFB8F,$1AD112DA,$C5FAA427,$691BC30E,$CC327143,$FF246311, |
$30E53206,$3142368E,$E02CA396,$71380E31,$0AAD76F1,$958D5C96,$C16DA536,$F8D6F430, |
$1BE7E1D2,$C8FFD13F,$004DDBE1,$7578AE66,$067BE646,$05833F01,$3BFE586D,$BB34B5AD, |
$A12B97F0,$095F34C9,$25D60CA8,$247AB645,$017477D1,$DCDBC6F3,$DECAD24D,$4A2E14D4, |
$BE0A1EEB,$BDB5E6D9,$794301AB,$2A7E70F7,$270540FD,$DEF42D8A,$A34C22C1,$01078EC0, |
$F4C16387,$E5DE511A,$BD9A330A,$7EBB3A52,$AA7D6435,$77697857,$03AE4C32,$004E8316, |
$AD78E312,$E7A21020,$6AB420F2,$9D41A70C,$EA1141E6,$28E06C18,$984F6B28,$D2B28CBD, |
$446E9D83,$26B75F6C,$4D418D7F,$BA47568C,$E6183D8E,$D80BADBF,$5F166044,$0E206D7F, |
$11CBCA3E,$E258A439,$B21DC0BC,$723A1746,$F5D7CDD3,$C7CAA854,$3D261D9C,$7CAC3288, |
$23BA942C,$7690C264,$478042B8,$17E55524,$56A2389F,$E0BE4776,$67AB2DA0,$4D289B5E, |
$8FBBFD31,$44862B9C,$9D141365,$B47CC804,$2B91C793,$822C1B36,$FB13DFD8,$4EB14655, |
$14E2A97B,$1ECBBA07,$5CDE5F14,$6143459D,$D5F0AC89,$53A8FBF1,$1C5E5B00,$97EA04D8, |
$D4FDB3F3,$622181A8,$572A1208,$E9BCD341,$43CCE58A,$14112586,$A4C6E0A4,$9144C5FE, |
$65CF620F,$0D33D065,$9F219CA1,$54A48D48,$6D63C821,$C43E5EAC,$72770DAF,$A9728B3A, |
$20DF87EF,$D7934E7B,$1A3E86E5,$E35503B6,$C819D504,$CAE321FB,$AC60BFA6,$129A50B3, |
$7E9FB6C3,$CD5E68EA,$9483B1C7,$B01C9019,$C295376C,$3DE93CD5,$2AB9AD13,$AED52EDF, |
$C0A07884,$2E60F512,$E36210C9,$BC3D86A3,$163951CE,$35269D9B,$D0CDB5FA,$0C7D6E2A, |
$D87F5733,$59E86297,$898DB0E7,$298EF221,$D1A5AA7E,$55000029,$B5061B45,$8BC08AE1, |
$6C92703A,$C2C31C2B,$AF25EF42,$94CC596B,$22540456,$0A1D73DB,$D9C4179A,$04B6A0F9, |
$AE3D3C60,$EFFDAFA2,$B49496C4,$F7C8075B,$1D1CD4E3,$9CC5C714,$218E5534,$78BD1638, |
$F850246A,$B2F11568,$9502BC29,$EDFABCFA,$DA23051B,$796CE5F2,$DC93537C,$AAE128B0, |
$EE4B29AE,$3A493DA0,$416895D7,$B5DF6B2C,$122D7F37,$FCABBD25,$105DC4B1,$70810B58, |
$F7882A90,$E10FDD37,$518A3F5C,$524DCAB5,$8451255B,$3C9E8587,$19BD34E2,$40298281, |
$5D3CECCB,$74A05B6F,$42E13ECA,$B6100215,$2F59E2AC,$0FF979D1,$E4F9CC50,$6037DA27, |
$0DF1847D,$5E92975A,$D3E623FE,$D66DE190,$7B568048,$5032D6B8,$8235216E,$9A36B7CE, |
$24F64B4A,$80272A7A,$8C6916F7,$93EFED8B,$4CCE1555,$37DDBFF4,$4B99BD25,$4B95DB5D, |
$69812FC0,$92D3FDA1,$90660BB6,$FB1A4A9A,$46A4B9B2,$730C1969,$7F49DA68,$81E289AA, |
$83B1A05F,$64669A0F,$9644F48B,$27B3FF7D,$8DB675B3,$CC6B615C,$BCEBBE95,$674F20B9, |
$75655982,$6F312382,$3E45CF05,$5AE48871,$54C21157,$BF619F99,$40A8EAE9,$EABAC460, |
$F2C0C1CD,$454C6FE9,$6412691C,$419CF649,$265B0F70,$D3DC3BEF,$C3578A9E,$6D0E60F5), |
($26323C55,$5B0E6085,$FA1B59F5,$1A46C1A9,$7C4C8FFA,$A9E245A1,$DB2955D7,$65CA5159, |
$CE35AFC2,$05DB0A76,$A9113D45,$81EAC77E,$B6AC0A0D,$528EF88A,$597BE3FF,$A09EA253, |
$AC48CD56,$430DDFB3,$F45CE46F,$C4B3A67A,$FBE2D05E,$4ECECFD8,$B39935F0,$3EF56F10, |
$9CD619C6,$0B22D682,$74DF2069,$17FD460A,$8510ED40,$6CF8CC8E,$3A6ECAA7,$D6C824BF, |
$1A817049,$61243D58,$BBC163A2,$048BACB6,$7D44CC32,$D9A38AC2,$AAF410AB,$7FDDFF5B, |
$A804824B,$AD6D495A,$2D8C9F94,$E1A6A74F,$35DEE8E3,$D4F78512,$6540D893,$FD4B7F88, |
$2AA4BFDA,$247C2004,$17D1327C,$096EA1C5,$361A6685,$D56966B4,$1221057D,$277DA5C3, |
$A43ACFF7,$94D59893,$CDC02281,$64F0C51C,$FF6189DB,$3D33BCC4,$4CE66AF1,$E005CB18, |
$1DB99BEA,$FF5CCD1D,$FE42980F,$B0B854A7,$718D4B9F,$7BD46A6A,$22A5FD8C,$D10FA8CC, |
$2BE4BD31,$D3148495,$CB243847,$C7FA975F,$5846C407,$4886ED1E,$1EB70B04,$28CDDB79, |
$F573417F,$C2B00BE2,$2180F877,$5C959045,$F370EB00,$7A6BDDFF,$D6D9D6A4,$CE509E38, |
$647FA702,$EBEB0F00,$76606F06,$1DCC06CF,$A286FF0A,$E4D9F28B,$C918C262,$D85A305D, |
$32225F54,$475B1D87,$68CCB5FE,$2D4FB516,$D72BBA20,$A679B9D9,$912D43A5,$53841C0D, |
$BF12A4E8,$3B7EAA48,$F22F1DDF,$781E0E47,$0AB50973,$EFF20CE6,$9DFFB742,$20D261D1, |
$062A2E39,$16A12B03,$39650495,$1960EB22,$D50EB8B8,$251C16FE,$F826016E,$9AC0C330, |
$953E7671,$ED152665,$A6369570,$02D63194,$94B1C987,$5074F083,$90B25CE1,$70BA598C, |
$0B9742F6,$794A1581,$FCAF8C6C,$0D5925E9,$D868744E,$3067716C,$E8D7731B,$910AB077, |
$5AC42F61,$6A61BBDB,$F0851567,$93513EFB,$9E83E9D5,$F494724B,$5C09648D,$E887E198, |
$75370CFD,$34B1D3C6,$BC0D255D,$DC35E433,$34131BE0,$D0AAB842,$B48B7EAF,$08042A50, |
$44A3AB35,$9997C4EE,$201799D0,$829A7B49,$B7C54441,$263B8307,$FD6A6CA6,$752F95F4, |
$2C08C6E5,$92721740,$A795D9EE,$2A8AB754,$2F72943D,$A442F755,$19781208,$2C31334E, |
$EAEE6291,$4FA98D7C,$665DB309,$55C3862F,$5D53B1F3,$BD061017,$40413F27,$46FE6CB8, |
$DF0CFA59,$3FE03792,$2EB85E8F,$CFE70037,$ADBCE118,$A7BE29E7,$DE8431DD,$E544EE5C, |
$41F1873E,$8A781B1B,$A0D2F0E7,$A5C94C78,$77B60728,$39412E28,$AFC9A62C,$A1265EF3, |
$6A2506C5,$BCC2770C,$DCE1CE12,$3AB66DD5,$4A675B37,$E65499D0,$81BFD216,$7D8F5234, |
$EC15F389,$0F6F64FC,$8B5B13C8,$74EFBE61,$14273E1D,$ACDC82B7,$03199D17,$DD40BFE0, |
$E7E061F8,$37E99257,$04775AAA,$FA526269,$463D56F9,$8BBBF63A,$43A26E64,$F0013F15, |
$879EC898,$A8307E9F,$150177CC,$CC4C27A4,$CA1D3348,$1B432F2C,$9F6FA013,$DE1D1F8F, |
$47A7DDD6,$606602A0,$CC1CB2C7,$D237AB64,$25FCD1D3,$9B938E72,$8E0FF476,$EC4E0370, |
$3D03C12D,$FEB2FBDA,$EE43889A,$AE0BCED2,$EBFB4F43,$22CB8923,$3CF7396D,$69360D01, |
$D2D4E022,$855E3602,$D01F784C,$073805BA,$3852F546,$33E17A13,$8AC7B638,$DF487405, |
$678AA14A,$BA92B29C,$6CFAADCD,$0CE89FC7,$08339E34,$5F9D4E09,$1F5923B9,$F1AFE929, |
$0F4A265F,$6E3480F6,$B29B841C,$EEBF3A2A,$8F91B4AD,$E21938A8,$45C6D3C3,$57DFEFF8, |
$F62CAAF2,$2F006B0B,$6F75EE78,$62F479EF,$1C8916A9,$11A55AD4,$84FED453,$F229D290, |
$16B000E6,$42F1C27B,$9823C074,$2B1F7674,$C2745360,$4B76ECA3,$B91691BD,$8C98F463, |
$F1ADE66A,$14BCC93C,$6D458397,$8885213E,$274D4711,$8E177DF0,$503F2951,$B49B73B5, |
$C3F96B6B,$10168168,$63CAB0AE,$0E3D963B,$55A1DB14,$8DFC4B56,$6E14DE5C,$F789F135, |
$4E51DAC1,$683E68AF,$8D4B0FD9,$C9A84F9D,$52A0F9D1,$3691E03F,$E1878E80,$5ED86E46, |
$99D07150,$3C711A0E,$0C4E9310,$5A0865B2,$E4F0682E,$56FBFC1F,$105EDF9B,$EA8D5DE3, |
$2379187A,$71ABFDB1,$BEE77B9C,$2EB99DE1,$33CF4523,$21ECC0EA,$1805C7A1,$59A4D752, |
$56AE7C72,$3896F5EB,$B18F75DC,$AA638F3D,$ABE9808E,$9F39358D,$C00B72AC,$B7DEFA91, |
$62492D92,$6B5541FD,$F92E4D5B,$6DC6DEE8,$C4BEEA7E,$353F57AB,$DA5690CE,$735769D6, |
$42391484,$0A234AA6,$28F80D9D,$F6F95080,$7AB3F215,$B8E319A2,$51341A4D,$31AD9C11, |
$7BEF5805,$773C22A5,$07968633,$45C7561A,$249DBE36,$F913DA9E,$78A64C68,$DA652D9B, |
$3BC334EF,$4C27A97F,$E66B17F4,$76621220,$9ACD7D0B,$96774389,$E0ED6782,$F3EE5BCA, |
$00C879FC,$409F7536,$B5926DB6,$06D09A39,$317AC588,$6F83AEB0,$86381F21,$01E6CA4A, |
$D19F3025,$66FF3462,$DDFD3BFB,$72207C24,$E2ECE2EB,$4AF6B6D3,$C7EA08DE,$9C994DBE, |
$B09A8BC4,$49ACE597,$CF0797BA,$B38C4766,$C57C2A75,$131B9373,$61931E58,$B1822CCE, |
$09BA1C0C,$9D7555B9,$937D11D2,$127FAFDD,$C66D92E4,$29DA3BAD,$54C2ECBC,$A2C1D571, |
$82F6FE24,$58C5134D,$5B62274F,$1C3AE351,$01CB8126,$E907C82E,$13E37FCB,$F8ED0919, |
$C80046C9,$3249D8F9,$E388FB63,$80CF9BED,$116CF19E,$1881539A,$6BD52457,$5103F3F7, |
$AE47F7A8,$15B7E6F5,$D47E9CCF,$DBD7C6DE,$0228BB1A,$44E55C41,$5EDB4E99,$B647D425, |
$B8AAFC30,$5D11882B,$29D3212A,$F5098BBB,$E90296B3,$8FB5EA14,$57DD025A,$677B9421, |
$A390ACB5,$FB58E7C0,$83BD4A01,$89D3674C,$4BF3B93B,$9E2DA4DF,$8CAB4829,$FCC41E32, |
$BA582C52,$03F38C96,$7FD85DB2,$CAD1BDBD,$6082AE83,$BBB442C1,$A5DA9AB0,$B95FE86B, |
$3771A93F,$B22E0467,$493152D8,$845358C9,$97B4541E,$BE2A4886,$D38E6966,$95A2DC2D, |
$923C852B,$C02C11AC,$0DF2A87B,$2388B199,$1B4F37BE,$7C8008FA,$4D54E503,$1F70D0C8, |
$7ECE57D4,$5490ADEC,$D9063A3A,$002B3C27,$8030A2BF,$7EAEA384,$ED2003C0,$C602326D, |
$69A94086,$83A7287D,$30F57A8A,$C57A5FCB,$79EBE779,$B56844E4,$05DCBCE9,$A373B40F, |
$88570EE2,$D71A786E,$BDE8F6A0,$879CBACD,$C164A32F,$976AD1BC,$9666D78B,$AB21E25E, |
$E5E5C33C,$901063AA,$48698D90,$9818B344,$3E1E8ABB,$E36487AE,$893BDCB4,$AFBDF931, |
$5FBBD519,$6345A0DC,$9B9465CA,$8628FE26,$3F9C51EC,$1E5D0160,$A15049B7,$4DE44006, |
$F776CBB1,$BF6C70E5,$EF552BED,$411218F2,$705A36A3,$CB0C0708,$4F986044,$E74D1475, |
$0EA8280E,$CD56D943,$535F5065,$C12591D7,$720AEF96,$C83223F1,$7363A51F,$C3A0396F) |
); |
SHA_256K: array[0..63] of UInt32 = ( |
$428A2F98,$71374491,$B5C0FBCF,$E9B5DBA5,$3956C25B,$59F111F1,$923F82A4,$AB1C5ED5, |
$D807AA98,$12835B01,$243185BE,$550C7DC3,$72BE5D74,$80DEB1FE,$9BDC06A7,$C19BF174, |
$E49B69C1,$EFBE4786,$0FC19DC6,$240CA1CC,$2DE92C6F,$4A7484AA,$5CB0A9DC,$76F988DA, |
$983E5152,$A831C66D,$B00327C8,$BF597FC7,$C6E00BF3,$D5A79147,$06CA6351,$14292967, |
$27B70A85,$2E1B2138,$4D2C6DFC,$53380D13,$650A7354,$766A0ABB,$81C2C92E,$92722C85, |
$A2BFE8A1,$A81A664B,$C24B8B70,$C76C51A3,$D192E819,$D6990624,$F40E3585,$106AA070, |
$19A4C116,$1E376C08,$2748774C,$34B0BCB5,$391C0CB3,$4ED8AA4A,$5B9CCA4F,$682E6FF3, |
$748F82EE,$78A5636F,$84C87814,$8CC70208,$90BEFFFA,$A4506CEB,$BEF9A3F7,$C67178F2 |
); |
// Compiler warning about constant expression volating subrange bounds should |
// be safely ignored here! |
SHA_512K: array[0..79] of UInt64 = ( |
$428A2F98D728AE22,$7137449123EF65CD,$B5C0FBCFEC4D3B2F,$E9B5DBA58189DBBC, |
$3956C25BF348B538,$59F111F1B605D019,$923F82A4AF194F9B,$AB1C5ED5DA6D8118, |
$D807AA98A3030242,$12835B0145706FBE,$243185BE4EE4B28C,$550C7DC3D5FFB4E2, |
$72BE5D74F27B896F,$80DEB1FE3B1696B1,$9BDC06A725C71235,$C19BF174CF692694, |
$E49B69C19EF14AD2,$EFBE4786384F25E3,$0FC19DC68B8CD5B5,$240CA1CC77AC9C65, |
$2DE92C6F592B0275,$4A7484AA6EA6E483,$5CB0A9DCBD41FBD4,$76F988DA831153B5, |
$983E5152EE66DFAB,$A831C66D2DB43210,$B00327C898FB213F,$BF597FC7BEEF0EE4, |
$C6E00BF33DA88FC2,$D5A79147930AA725,$06CA6351E003826F,$142929670A0E6E70, |
$27B70A8546D22FFC,$2E1B21385C26C926,$4D2C6DFC5AC42AED,$53380D139D95B3DF, |
$650A73548BAF63DE,$766A0ABB3C77B2A8,$81C2C92E47EDAEE6,$92722C851482353B, |
$A2BFE8A14CF10364,$A81A664BBC423001,$C24B8B70D0F89791,$C76C51A30654BE30, |
$D192E819D6EF5218,$D69906245565A910,$F40E35855771202A,$106AA07032BBD1B8, |
$19A4C116B8D2D0C8,$1E376C085141AB53,$2748774CDF8EEB99,$34B0BCB5E19B48A8, |
$391C0CB3C5C95A63,$4ED8AA4AE3418ACB,$5B9CCA4F7763E373,$682E6FF3D6B2B8A3, |
$748F82EE5DEFB2FC,$78A5636F43172F60,$84C87814A1F0AB72,$8CC702081A6439EC, |
$90BEFFFA23631E28,$A4506CEBDE82BDE9,$BEF9A3F7B2C67915,$C67178F2E372532B, |
$CA273ECEEA26619C,$D186B8C721C0C207,$EADA7DD6CDE0EB1E,$F57D4F7FEE6ED178, |
$06F067AA72176FBA,$0A637DC5A2C898A6,$113F9804BEF90DAE,$1B710B35131C471B, |
$28DB77F523047D84,$32CAAB7B40C72493,$3C9EBE0A15C9BEBC,$431D67C49C100D4C, |
$4CC5D4BECB3E42B6,$597F299CFC657E2A,$5FCB6FAB3AD6FAEC,$6C44198C4A475817 |
); |
Whirlpool_Rounds = 10; |
/// <summary> |
/// Whirlpool 0 |
/// </summary> |
Whirlpool_RC_U: array[0..Whirlpool_Rounds * 2 - 1] of UInt32 = ( |
$2BEBD068,$E46A9D48,$8156A3E3,$9E85F17D,$CA788E2C,$D561A917,$3C8C0B5D,$42225177, |
$8041543F,$18B386CC,$6206572E,$6BD136F4,$1075651B,$F92649DA,$BAE766CB,$AB5250AE, |
$730DF005,$FE20043B,$5FB4F5DD,$A0C0B50A |
); |
Whirlpool_C_U: array[0..7, 0..511] of UInt32 = ( |
($68B86868,$D50F67D5,$D06DD0D0,$B71ECEB7,$EB20EBEB,$60E00B60,$2B7D2B2B,$876E4587, |
$48D84848,$75327A75,$9DBA9D9D,$D3019CD3,$6ABE6A6A,$DF1D77DF,$E431E4E4,$53977353, |
$E338E3E3,$48A84B48,$A3F8A3A3,$15D27115,$56FA5656,$13DC8A13,$819E8181,$BFFD7CBF, |
$7D877D7D,$94B2CF94,$F10EF1F1,$122ADB12,$85928585,$ABD95CAB,$9EBF9E9E,$DC1A84DC, |
$2C742C2C,$9C517D9C,$8E8F8E8E,$8C8A048C,$78887878,$859FE785,$CA43CACA,$C5D41EC5, |
$17391717,$4BAFB84B,$A9E6A9A9,$37882137,$61A36161,$F84E2FF8,$D562D5D5,$A633E6A6, |
$5DE75D5D,$348FD234,$0B1D0B0B,$27535827,$8C898C8C,$86981486,$3C443C3C,$CCC1FDCC, |
$77997777,$B6E89FB6,$51F35151,$08E3B208,$22662222,$AA2F0DAA,$42C64242,$57682A57, |
$3F413F3F,$C3DAE5C3,$54FC5454,$19CE9A19,$41C34141,$58733258,$809D8080,$BAF474BA, |
$CC49CCCC,$DBE22EDB,$86978686,$A4C244A4,$B3C8B3B3,$4542F145,$18281818,$78D8C078, |
$2E722E2E,$96436D96,$57F95757,$16D58216,$060A0606,$1E36301E,$62A66262,$F75537F7, |
$F401F4F4,$0307F303,$365A3636,$EE9BADEE,$D16ED1D1,$B217C6B2,$6BBD6B6B,$DA147FDA, |
$1B2D1B1B,$77C3D877,$65AF6565,$EC6A0FEC,$759F7575,$BCFA8FBC,$10301010,$50908050, |
$DA73DADA,$95449E95,$49DB4949,$703B7270,$266A2626,$BE0B2DBE,$F916F9F9,$3A629B3A, |
$CB40CBCB,$C0DD16C0,$66AA6666,$E37117E3,$E734E7E7,$5C8C6B5C,$BAD3BABA,$6803B968, |
$AEEFAEAE,$2CB7192C,$50F05050,$0DEABA0D,$52F65252,$07F8AA07,$ABE0ABAB,$3D9A313D, |
$050F0505,$112D2811,$F00DF0F0,$1723D317,$0D170D0D,$39656839,$73957373,$A2CCBFA2, |
$3B4D3B3B,$D7FEC5D7,$040C0404,$14242014,$20602020,$A03D1DA0,$FE1FFEFE,$215DA321, |
$DD7ADDDD,$8E7BA68E,$F502F5F5,$060EFB06,$B4C1B4B4,$5E7DC95E,$5FE15F5F,$3E9DC23E, |
$0A1E0A0A,$225A5022,$B5C2B5B5,$5B74C15B,$C05DC0C0,$E78E4EE7,$A0FDA0A0,$1AC9691A, |
$71937171,$A8DEAFA8,$A5F2A5A5,$0BE4410B,$2D772D2D,$99587599,$60A06060,$FD4727FD, |
$72967272,$A7C5B7A7,$93A89393,$E57FECE5,$394B3939,$DDECD5DD,$08180808,$28484028, |
$83988383,$B5EF6CB5,$21632121,$A53415A5,$5CE45C5C,$3186DA31,$87948787,$A1CB4CA1, |
$B1CEB1B1,$4F50E14F,$E03DE0E0,$47B35347,$00000000,$00000000,$C358C3C3,$E89556E8, |
$12361212,$5A82905A,$91AE9191,$EF6DFCEF,$8A838A8A,$98AE2498,$02060202,$0A12100A, |
$1C241C1C,$6CFCE06C,$E637E6E6,$59856359,$45CF4545,$4C57124C,$C25BC2C2,$ED9C5EED, |
$C451C4C4,$F3AA6EF3,$FD1AFDFD,$2E46BB2E,$BFDCBFBF,$792E9179,$44CC4444,$495E1A49, |
$A1FEA1A1,$1FC0611F,$4CD44C4C,$61165A61,$33553333,$FFB685FF,$C552C5C5,$F6A366F6, |
$84918484,$AED054AE,$23652323,$AF2605AF,$7C847C7C,$91BBC791,$B0CDB0B0,$4A59E94A, |
$256F2525,$B11035B1,$153F1515,$41BDA841,$355F3535,$E180B5E1,$69BB6969,$D0066FD0, |
$FF1CFFFF,$2454AB24,$94A19494,$FE40D4FE,$4DD74D4D,$641F5264,$70907070,$ADD7A7AD, |
$A2FBA2A2,$10DB7910,$AFECAFAF,$29BE1129,$CD4ACDCD,$DEEB26DE,$D667D6D6,$A928FEA9, |
$6CB46C6C,$C12B47C1,$B7C4B7B7,$5166D151,$F815F8F8,$3F6B933F,$091B0909,$2D41482D, |
$F308F3F3,$1838CB18,$67A96767,$E6781FE6,$A4F1A4A4,$0EED490E,$EA23EAEA,$65E90365, |
$EC29ECEC,$7BDF337B,$B6C7B6B6,$546FD954,$D461D4D4,$A33AEEA3,$D26BD2D2,$BD0CDEBD, |
$143C1414,$44B4A044,$1E221E1E,$66EEF066,$E13EE1E1,$42BA5B42,$246C2424,$B4193DB4, |
$38483838,$D8E5DDD8,$C657C6C6,$F9B87EF9,$DB70DBDB,$904D9690,$4BDD4B4B,$7A29627A, |
$7A8E7A7A,$8F8DF78F,$3A4E3A3A,$D2F7CDD2,$DE7FDEDE,$8160BE81,$5EE25E5E,$3B94CA3B, |
$DF7CDFDF,$8469B684,$95A29595,$FB49DCFB,$FC19FCFC,$2B4FB32B,$AAE3AAAA,$38933938, |
$D764D7D7,$AC21F6AC,$CE4FCECE,$D1F03ED1,$07090707,$1B3F381B,$0F110F0F,$33777833, |
$3D473D3D,$C9C8F5C9,$58E85858,$25A2FA25,$9AB39A9A,$C83EA4C8,$98B59898,$C22CB4C2, |
$9CB99C9C,$D60894D6,$F20BF2F2,$1D31C31D,$A7F4A7A7,$01F65101,$11331111,$55998855, |
$7E827E7E,$9BA9D79B,$8B808B8B,$9DA72C9D,$43C54343,$52612252,$03050303,$0F1B180F, |
$E23BE2E2,$4DA1434D,$DC79DCDC,$8B72AE8B,$E532E5E5,$569E7B56,$B2CBB2B2,$404BF940, |
$4ED24E4E,$6B044A6B,$C754C7C7,$FCB176FC,$6DB76D6D,$C4224FC4,$E926E9E9,$6AF21B6A, |
$27692727,$BB0225BB,$40C04040,$5D7A3A5D,$D875D8D8,$9F568E9F,$37593737,$EB92A5EB, |
$92AB9292,$E076E4E0,$8F8C8F8F,$89830C89,$01030101,$05090805,$1D271D1D,$69F5E869, |
$53F55353,$02F1A202,$3E423E3E,$C6D3EDC6,$59EB5959,$20ABF220,$C15EC1C1,$E28746E2, |
$4FD14F4F,$6E0D426E,$32563232,$FABF8DFA,$163A1616,$4EA6B04E,$FA13FAFA,$35798335, |
$749C7474,$B9F387B9,$FB10FBFB,$30708B30,$63A56363,$F25C3FF2,$9FBC9F9F,$D9138CD9, |
$345C3434,$E489BDE4,$1A2E1A1A,$72CAD072,$2A7E2A2A,$82674D82,$5AEE5A5A,$2FB0EA2F, |
$8D8A8D8D,$83911C83,$C946C9C9,$CACF06CA,$CF4CCFCF,$D4F936D4,$F607F6F6,$0915E309, |
$90AD9090,$EA64F4EA,$28782828,$88755D88,$88858888,$92BC3492,$9BB09B9B,$CD37ACCD, |
$31533131,$F5A495F5,$0E120E0E,$367E7036,$BDDABDBD,$733C8173,$4ADE4A4A,$7F206A7F, |
$E825E8E8,$6FFB136F,$96A79696,$F452C4F4,$A6F7A6A6,$04FF5904,$0C140C0C,$3C6C603C, |
$C845C8C8,$CFC60ECF,$798B7979,$8096EF80,$BCD9BCBC,$76358976,$BEDFBEBE,$7C27997C, |
$EF2CEFEF,$74C42B74,$6EB26E6E,$CB3957CB,$46CA4646,$434C0A43,$97A49797,$F15BCCF1, |
$5BED5B5B,$2AB9E22A,$ED2AEDED,$7ED63B7E,$192B1919,$7DD1C87D,$D976D9D9,$9A5F869A, |
$ACE9ACAC,$26A50926,$99B69999,$C725BCC7,$A8E5A8A8,$32812932,$297B2929,$8D7C558D, |
$64AC6464,$E96307E9,$1F211F1F,$63E7F863,$ADEAADAD,$23AC0123,$55FF5555,$1CC7921C, |
$13351313,$5F8B985F,$BBD0BBBB,$6D0AB16D,$F704F7F7,$0C1CEB0C,$6FB16F6F,$CE305FCE, |
$B9D6B9B9,$6718A167,$47C94747,$46450246,$2F712F2F,$934A6593,$EE2FEEEE,$71CD2371, |
$B8D5B8B8,$6211A962,$7B8D7B7B,$8A84FF8A,$89868989,$97B53C97,$30503030,$F0AD9DF0, |
$D368D3D3,$B805D6B8,$7F817F7F,$9EA0DF9E,$769A7676,$B3E197B3,$829B8282,$B0E664B0), |
($B86868D5,$0F67D568,$6DD0D0B7,$1ECEB7D0,$20EBEB60,$E00B60EB,$7D2B2B87,$6E45872B, |
$D8484875,$327A7548,$BA9D9DD3,$019CD39D,$BE6A6ADF,$1D77DF6A,$31E4E453,$977353E4, |
$38E3E348,$A84B48E3,$F8A3A315,$D27115A3,$FA565613,$DC8A1356,$9E8181BF,$FD7CBF81, |
$877D7D94,$B2CF947D,$0EF1F112,$2ADB12F1,$928585AB,$D95CAB85,$BF9E9EDC,$1A84DC9E, |
$742C2C9C,$517D9C2C,$8F8E8E8C,$8A048C8E,$88787885,$9FE78578,$43CACAC5,$D41EC5CA, |
$3917174B,$AFB84B17,$E6A9A937,$882137A9,$A36161F8,$4E2FF861,$62D5D5A6,$33E6A6D5, |
$E75D5D34,$8FD2345D,$1D0B0B27,$5358270B,$898C8C86,$9814868C,$443C3CCC,$C1FDCC3C, |
$997777B6,$E89FB677,$F3515108,$E3B20851,$662222AA,$2F0DAA22,$C6424257,$682A5742, |
$413F3FC3,$DAE5C33F,$FC545419,$CE9A1954,$C3414158,$73325841,$9D8080BA,$F474BA80, |
$49CCCCDB,$E22EDBCC,$978686A4,$C244A486,$C8B3B345,$42F145B3,$28181878,$D8C07818, |
$722E2E96,$436D962E,$F9575716,$D5821657,$0A06061E,$36301E06,$A66262F7,$5537F762, |
$01F4F403,$07F303F4,$5A3636EE,$9BADEE36,$6ED1D1B2,$17C6B2D1,$BD6B6BDA,$147FDA6B, |
$2D1B1B77,$C3D8771B,$AF6565EC,$6A0FEC65,$9F7575BC,$FA8FBC75,$30101050,$90805010, |
$73DADA95,$449E95DA,$DB494970,$3B727049,$6A2626BE,$0B2DBE26,$16F9F93A,$629B3AF9, |
$40CBCBC0,$DD16C0CB,$AA6666E3,$7117E366,$34E7E75C,$8C6B5CE7,$D3BABA68,$03B968BA, |
$EFAEAE2C,$B7192CAE,$F050500D,$EABA0D50,$F6525207,$F8AA0752,$E0ABAB3D,$9A313DAB, |
$0F050511,$2D281105,$0DF0F017,$23D317F0,$170D0D39,$6568390D,$957373A2,$CCBFA273, |
$4D3B3BD7,$FEC5D73B,$0C040414,$24201404,$602020A0,$3D1DA020,$1FFEFE21,$5DA321FE, |
$7ADDDD8E,$7BA68EDD,$02F5F506,$0EFB06F5,$C1B4B45E,$7DC95EB4,$E15F5F3E,$9DC23E5F, |
$1E0A0A22,$5A50220A,$C2B5B55B,$74C15BB5,$5DC0C0E7,$8E4EE7C0,$FDA0A01A,$C9691AA0, |
$937171A8,$DEAFA871,$F2A5A50B,$E4410BA5,$772D2D99,$5875992D,$A06060FD,$4727FD60, |
$967272A7,$C5B7A772,$A89393E5,$7FECE593,$4B3939DD,$ECD5DD39,$18080828,$48402808, |
$988383B5,$EF6CB583,$632121A5,$3415A521,$E45C5C31,$86DA315C,$948787A1,$CB4CA187, |
$CEB1B14F,$50E14FB1,$3DE0E047,$B35347E0,$00000000,$00000000,$58C3C3E8,$9556E8C3, |
$3612125A,$82905A12,$AE9191EF,$6DFCEF91,$838A8A98,$AE24988A,$0602020A,$12100A02, |
$241C1C6C,$FCE06C1C,$37E6E659,$856359E6,$CF45454C,$57124C45,$5BC2C2ED,$9C5EEDC2, |
$51C4C4F3,$AA6EF3C4,$1AFDFD2E,$46BB2EFD,$DCBFBF79,$2E9179BF,$CC444449,$5E1A4944, |
$FEA1A11F,$C0611FA1,$D44C4C61,$165A614C,$553333FF,$B685FF33,$52C5C5F6,$A366F6C5, |
$918484AE,$D054AE84,$652323AF,$2605AF23,$847C7C91,$BBC7917C,$CDB0B04A,$59E94AB0, |
$6F2525B1,$1035B125,$3F151541,$BDA84115,$5F3535E1,$80B5E135,$BB6969D0,$066FD069, |
$1CFFFF24,$54AB24FF,$A19494FE,$40D4FE94,$D74D4D64,$1F52644D,$907070AD,$D7A7AD70, |
$FBA2A210,$DB7910A2,$ECAFAF29,$BE1129AF,$4ACDCDDE,$EB26DECD,$67D6D6A9,$28FEA9D6, |
$B46C6CC1,$2B47C16C,$C4B7B751,$66D151B7,$15F8F83F,$6B933FF8,$1B09092D,$41482D09, |
$08F3F318,$38CB18F3,$A96767E6,$781FE667,$F1A4A40E,$ED490EA4,$23EAEA65,$E90365EA, |
$29ECEC7B,$DF337BEC,$C7B6B654,$6FD954B6,$61D4D4A3,$3AEEA3D4,$6BD2D2BD,$0CDEBDD2, |
$3C141444,$B4A04414,$221E1E66,$EEF0661E,$3EE1E142,$BA5B42E1,$6C2424B4,$193DB424, |
$483838D8,$E5DDD838,$57C6C6F9,$B87EF9C6,$70DBDB90,$4D9690DB,$DD4B4B7A,$29627A4B, |
$8E7A7A8F,$8DF78F7A,$4E3A3AD2,$F7CDD23A,$7FDEDE81,$60BE81DE,$E25E5E3B,$94CA3B5E, |
$7CDFDF84,$69B684DF,$A29595FB,$49DCFB95,$19FCFC2B,$4FB32BFC,$E3AAAA38,$933938AA, |
$64D7D7AC,$21F6ACD7,$4FCECED1,$F03ED1CE,$0907071B,$3F381B07,$110F0F33,$7778330F, |
$473D3DC9,$C8F5C93D,$E8585825,$A2FA2558,$B39A9AC8,$3EA4C89A,$B59898C2,$2CB4C298, |
$B99C9CD6,$0894D69C,$0BF2F21D,$31C31DF2,$F4A7A701,$F65101A7,$33111155,$99885511, |
$827E7E9B,$A9D79B7E,$808B8B9D,$A72C9D8B,$C5434352,$61225243,$0503030F,$1B180F03, |
$3BE2E24D,$A1434DE2,$79DCDC8B,$72AE8BDC,$32E5E556,$9E7B56E5,$CBB2B240,$4BF940B2, |
$D24E4E6B,$044A6B4E,$54C7C7FC,$B176FCC7,$B76D6DC4,$224FC46D,$26E9E96A,$F21B6AE9, |
$692727BB,$0225BB27,$C040405D,$7A3A5D40,$75D8D89F,$568E9FD8,$593737EB,$92A5EB37, |
$AB9292E0,$76E4E092,$8C8F8F89,$830C898F,$03010105,$09080501,$271D1D69,$F5E8691D, |
$F5535302,$F1A20253,$423E3EC6,$D3EDC63E,$EB595920,$ABF22059,$5EC1C1E2,$8746E2C1, |
$D14F4F6E,$0D426E4F,$563232FA,$BF8DFA32,$3A16164E,$A6B04E16,$13FAFA35,$798335FA, |
$9C7474B9,$F387B974,$10FBFB30,$708B30FB,$A56363F2,$5C3FF263,$BC9F9FD9,$138CD99F, |
$5C3434E4,$89BDE434,$2E1A1A72,$CAD0721A,$7E2A2A82,$674D822A,$EE5A5A2F,$B0EA2F5A, |
$8A8D8D83,$911C838D,$46C9C9CA,$CF06CAC9,$4CCFCFD4,$F936D4CF,$07F6F609,$15E309F6, |
$AD9090EA,$64F4EA90,$78282888,$755D8828,$85888892,$BC349288,$B09B9BCD,$37ACCD9B, |
$533131F5,$A495F531,$120E0E36,$7E70360E,$DABDBD73,$3C8173BD,$DE4A4A7F,$206A7F4A, |
$25E8E86F,$FB136FE8,$A79696F4,$52C4F496,$F7A6A604,$FF5904A6,$140C0C3C,$6C603C0C, |
$45C8C8CF,$C60ECFC8,$8B797980,$96EF8079,$D9BCBC76,$358976BC,$DFBEBE7C,$27997CBE, |
$2CEFEF74,$C42B74EF,$B26E6ECB,$3957CB6E,$CA464643,$4C0A4346,$A49797F1,$5BCCF197, |
$ED5B5B2A,$B9E22A5B,$2AEDED7E,$D63B7EED,$2B19197D,$D1C87D19,$76D9D99A,$5F869AD9, |
$E9ACAC26,$A50926AC,$B69999C7,$25BCC799,$E5A8A832,$812932A8,$7B29298D,$7C558D29, |
$AC6464E9,$6307E964,$211F1F63,$E7F8631F,$EAADAD23,$AC0123AD,$FF55551C,$C7921C55, |
$3513135F,$8B985F13,$D0BBBB6D,$0AB16DBB,$04F7F70C,$1CEB0CF7,$B16F6FCE,$305FCE6F, |
$D6B9B967,$18A167B9,$C9474746,$45024647,$712F2F93,$4A65932F,$2FEEEE71,$CD2371EE, |
$D5B8B862,$11A962B8,$8D7B7B8A,$84FF8A7B,$86898997,$B53C9789,$503030F0,$AD9DF030, |
$68D3D3B8,$05D6B8D3,$817F7F9E,$A0DF9E7F,$9A7676B3,$E197B376,$9B8282B0,$E664B082), |
($6868D50F,$67D568B8,$D0D0B71E,$CEB7D06D,$EBEB60E0,$0B60EB20,$2B2B876E,$45872B7D, |
$48487532,$7A7548D8,$9D9DD301,$9CD39DBA,$6A6ADF1D,$77DF6ABE,$E4E45397,$7353E431, |
$E3E348A8,$4B48E338,$A3A315D2,$7115A3F8,$565613DC,$8A1356FA,$8181BFFD,$7CBF819E, |
$7D7D94B2,$CF947D87,$F1F1122A,$DB12F10E,$8585ABD9,$5CAB8592,$9E9EDC1A,$84DC9EBF, |
$2C2C9C51,$7D9C2C74,$8E8E8C8A,$048C8E8F,$7878859F,$E7857888,$CACAC5D4,$1EC5CA43, |
$17174BAF,$B84B1739,$A9A93788,$2137A9E6,$6161F84E,$2FF861A3,$D5D5A633,$E6A6D562, |
$5D5D348F,$D2345DE7,$0B0B2753,$58270B1D,$8C8C8698,$14868C89,$3C3CCCC1,$FDCC3C44, |
$7777B6E8,$9FB67799,$515108E3,$B20851F3,$2222AA2F,$0DAA2266,$42425768,$2A5742C6, |
$3F3FC3DA,$E5C33F41,$545419CE,$9A1954FC,$41415873,$325841C3,$8080BAF4,$74BA809D, |
$CCCCDBE2,$2EDBCC49,$8686A4C2,$44A48697,$B3B34542,$F145B3C8,$181878D8,$C0781828, |
$2E2E9643,$6D962E72,$575716D5,$821657F9,$06061E36,$301E060A,$6262F755,$37F762A6, |
$F4F40307,$F303F401,$3636EE9B,$ADEE365A,$D1D1B217,$C6B2D16E,$6B6BDA14,$7FDA6BBD, |
$1B1B77C3,$D8771B2D,$6565EC6A,$0FEC65AF,$7575BCFA,$8FBC759F,$10105090,$80501030, |
$DADA9544,$9E95DA73,$4949703B,$727049DB,$2626BE0B,$2DBE266A,$F9F93A62,$9B3AF916, |
$CBCBC0DD,$16C0CB40,$6666E371,$17E366AA,$E7E75C8C,$6B5CE734,$BABA6803,$B968BAD3, |
$AEAE2CB7,$192CAEEF,$50500DEA,$BA0D50F0,$525207F8,$AA0752F6,$ABAB3D9A,$313DABE0, |
$0505112D,$2811050F,$F0F01723,$D317F00D,$0D0D3965,$68390D17,$7373A2CC,$BFA27395, |
$3B3BD7FE,$C5D73B4D,$04041424,$2014040C,$2020A03D,$1DA02060,$FEFE215D,$A321FE1F, |
$DDDD8E7B,$A68EDD7A,$F5F5060E,$FB06F502,$B4B45E7D,$C95EB4C1,$5F5F3E9D,$C23E5FE1, |
$0A0A225A,$50220A1E,$B5B55B74,$C15BB5C2,$C0C0E78E,$4EE7C05D,$A0A01AC9,$691AA0FD, |
$7171A8DE,$AFA87193,$A5A50BE4,$410BA5F2,$2D2D9958,$75992D77,$6060FD47,$27FD60A0, |
$7272A7C5,$B7A77296,$9393E57F,$ECE593A8,$3939DDEC,$D5DD394B,$08082848,$40280818, |
$8383B5EF,$6CB58398,$2121A534,$15A52163,$5C5C3186,$DA315CE4,$8787A1CB,$4CA18794, |
$B1B14F50,$E14FB1CE,$E0E047B3,$5347E03D,$00000000,$00000000,$C3C3E895,$56E8C358, |
$12125A82,$905A1236,$9191EF6D,$FCEF91AE,$8A8A98AE,$24988A83,$02020A12,$100A0206, |
$1C1C6CFC,$E06C1C24,$E6E65985,$6359E637,$45454C57,$124C45CF,$C2C2ED9C,$5EEDC25B, |
$C4C4F3AA,$6EF3C451,$FDFD2E46,$BB2EFD1A,$BFBF792E,$9179BFDC,$4444495E,$1A4944CC, |
$A1A11FC0,$611FA1FE,$4C4C6116,$5A614CD4,$3333FFB6,$85FF3355,$C5C5F6A3,$66F6C552, |
$8484AED0,$54AE8491,$2323AF26,$05AF2365,$7C7C91BB,$C7917C84,$B0B04A59,$E94AB0CD, |
$2525B110,$35B1256F,$151541BD,$A841153F,$3535E180,$B5E1355F,$6969D006,$6FD069BB, |
$FFFF2454,$AB24FF1C,$9494FE40,$D4FE94A1,$4D4D641F,$52644DD7,$7070ADD7,$A7AD7090, |
$A2A210DB,$7910A2FB,$AFAF29BE,$1129AFEC,$CDCDDEEB,$26DECD4A,$D6D6A928,$FEA9D667, |
$6C6CC12B,$47C16CB4,$B7B75166,$D151B7C4,$F8F83F6B,$933FF815,$09092D41,$482D091B, |
$F3F31838,$CB18F308,$6767E678,$1FE667A9,$A4A40EED,$490EA4F1,$EAEA65E9,$0365EA23, |
$ECEC7BDF,$337BEC29,$B6B6546F,$D954B6C7,$D4D4A33A,$EEA3D461,$D2D2BD0C,$DEBDD26B, |
$141444B4,$A044143C,$1E1E66EE,$F0661E22,$E1E142BA,$5B42E13E,$2424B419,$3DB4246C, |
$3838D8E5,$DDD83848,$C6C6F9B8,$7EF9C657,$DBDB904D,$9690DB70,$4B4B7A29,$627A4BDD, |
$7A7A8F8D,$F78F7A8E,$3A3AD2F7,$CDD23A4E,$DEDE8160,$BE81DE7F,$5E5E3B94,$CA3B5EE2, |
$DFDF8469,$B684DF7C,$9595FB49,$DCFB95A2,$FCFC2B4F,$B32BFC19,$AAAA3893,$3938AAE3, |
$D7D7AC21,$F6ACD764,$CECED1F0,$3ED1CE4F,$07071B3F,$381B0709,$0F0F3377,$78330F11, |
$3D3DC9C8,$F5C93D47,$585825A2,$FA2558E8,$9A9AC83E,$A4C89AB3,$9898C22C,$B4C298B5, |
$9C9CD608,$94D69CB9,$F2F21D31,$C31DF20B,$A7A701F6,$5101A7F4,$11115599,$88551133, |
$7E7E9BA9,$D79B7E82,$8B8B9DA7,$2C9D8B80,$43435261,$225243C5,$03030F1B,$180F0305, |
$E2E24DA1,$434DE23B,$DCDC8B72,$AE8BDC79,$E5E5569E,$7B56E532,$B2B2404B,$F940B2CB, |
$4E4E6B04,$4A6B4ED2,$C7C7FCB1,$76FCC754,$6D6DC422,$4FC46DB7,$E9E96AF2,$1B6AE926, |
$2727BB02,$25BB2769,$40405D7A,$3A5D40C0,$D8D89F56,$8E9FD875,$3737EB92,$A5EB3759, |
$9292E076,$E4E092AB,$8F8F8983,$0C898F8C,$01010509,$08050103,$1D1D69F5,$E8691D27, |
$535302F1,$A20253F5,$3E3EC6D3,$EDC63E42,$595920AB,$F22059EB,$C1C1E287,$46E2C15E, |
$4F4F6E0D,$426E4FD1,$3232FABF,$8DFA3256,$16164EA6,$B04E163A,$FAFA3579,$8335FA13, |
$7474B9F3,$87B9749C,$FBFB3070,$8B30FB10,$6363F25C,$3FF263A5,$9F9FD913,$8CD99FBC, |
$3434E489,$BDE4345C,$1A1A72CA,$D0721A2E,$2A2A8267,$4D822A7E,$5A5A2FB0,$EA2F5AEE, |
$8D8D8391,$1C838D8A,$C9C9CACF,$06CAC946,$CFCFD4F9,$36D4CF4C,$F6F60915,$E309F607, |
$9090EA64,$F4EA90AD,$28288875,$5D882878,$888892BC,$34928885,$9B9BCD37,$ACCD9BB0, |
$3131F5A4,$95F53153,$0E0E367E,$70360E12,$BDBD733C,$8173BDDA,$4A4A7F20,$6A7F4ADE, |
$E8E86FFB,$136FE825,$9696F452,$C4F496A7,$A6A604FF,$5904A6F7,$0C0C3C6C,$603C0C14, |
$C8C8CFC6,$0ECFC845,$79798096,$EF80798B,$BCBC7635,$8976BCD9,$BEBE7C27,$997CBEDF, |
$EFEF74C4,$2B74EF2C,$6E6ECB39,$57CB6EB2,$4646434C,$0A4346CA,$9797F15B,$CCF197A4, |
$5B5B2AB9,$E22A5BED,$EDED7ED6,$3B7EED2A,$19197DD1,$C87D192B,$D9D99A5F,$869AD976, |
$ACAC26A5,$0926ACE9,$9999C725,$BCC799B6,$A8A83281,$2932A8E5,$29298D7C,$558D297B, |
$6464E963,$07E964AC,$1F1F63E7,$F8631F21,$ADAD23AC,$0123ADEA,$55551CC7,$921C55FF, |
$13135F8B,$985F1335,$BBBB6D0A,$B16DBBD0,$F7F70C1C,$EB0CF704,$6F6FCE30,$5FCE6FB1, |
$B9B96718,$A167B9D6,$47474645,$024647C9,$2F2F934A,$65932F71,$EEEE71CD,$2371EE2F, |
$B8B86211,$A962B8D5,$7B7B8A84,$FF8A7B8D,$898997B5,$3C978986,$3030F0AD,$9DF03050, |
$D3D3B805,$D6B8D368,$7F7F9EA0,$DF9E7F81,$7676B3E1,$97B3769A,$8282B0E6,$64B0829B), |
($68D50F67,$D568B868,$D0B71ECE,$B7D06DD0,$EB60E00B,$60EB20EB,$2B876E45,$872B7D2B, |
$4875327A,$7548D848,$9DD3019C,$D39DBA9D,$6ADF1D77,$DF6ABE6A,$E4539773,$53E431E4, |
$E348A84B,$48E338E3,$A315D271,$15A3F8A3,$5613DC8A,$1356FA56,$81BFFD7C,$BF819E81, |
$7D94B2CF,$947D877D,$F1122ADB,$12F10EF1,$85ABD95C,$AB859285,$9EDC1A84,$DC9EBF9E, |
$2C9C517D,$9C2C742C,$8E8C8A04,$8C8E8F8E,$78859FE7,$85788878,$CAC5D41E,$C5CA43CA, |
$174BAFB8,$4B173917,$A9378821,$37A9E6A9,$61F84E2F,$F861A361,$D5A633E6,$A6D562D5, |
$5D348FD2,$345DE75D,$0B275358,$270B1D0B,$8C869814,$868C898C,$3CCCC1FD,$CC3C443C, |
$77B6E89F,$B6779977,$5108E3B2,$0851F351,$22AA2F0D,$AA226622,$4257682A,$5742C642, |
$3FC3DAE5,$C33F413F,$5419CE9A,$1954FC54,$41587332,$5841C341,$80BAF474,$BA809D80, |
$CCDBE22E,$DBCC49CC,$86A4C244,$A4869786,$B34542F1,$45B3C8B3,$1878D8C0,$78182818, |
$2E96436D,$962E722E,$5716D582,$1657F957,$061E3630,$1E060A06,$62F75537,$F762A662, |
$F40307F3,$03F401F4,$36EE9BAD,$EE365A36,$D1B217C6,$B2D16ED1,$6BDA147F,$DA6BBD6B, |
$1B77C3D8,$771B2D1B,$65EC6A0F,$EC65AF65,$75BCFA8F,$BC759F75,$10509080,$50103010, |
$DA95449E,$95DA73DA,$49703B72,$7049DB49,$26BE0B2D,$BE266A26,$F93A629B,$3AF916F9, |
$CBC0DD16,$C0CB40CB,$66E37117,$E366AA66,$E75C8C6B,$5CE734E7,$BA6803B9,$68BAD3BA, |
$AE2CB719,$2CAEEFAE,$500DEABA,$0D50F050,$5207F8AA,$0752F652,$AB3D9A31,$3DABE0AB, |
$05112D28,$11050F05,$F01723D3,$17F00DF0,$0D396568,$390D170D,$73A2CCBF,$A2739573, |
$3BD7FEC5,$D73B4D3B,$04142420,$14040C04,$20A03D1D,$A0206020,$FE215DA3,$21FE1FFE, |
$DD8E7BA6,$8EDD7ADD,$F5060EFB,$06F502F5,$B45E7DC9,$5EB4C1B4,$5F3E9DC2,$3E5FE15F, |
$0A225A50,$220A1E0A,$B55B74C1,$5BB5C2B5,$C0E78E4E,$E7C05DC0,$A01AC969,$1AA0FDA0, |
$71A8DEAF,$A8719371,$A50BE441,$0BA5F2A5,$2D995875,$992D772D,$60FD4727,$FD60A060, |
$72A7C5B7,$A7729672,$93E57FEC,$E593A893,$39DDECD5,$DD394B39,$08284840,$28081808, |
$83B5EF6C,$B5839883,$21A53415,$A5216321,$5C3186DA,$315CE45C,$87A1CB4C,$A1879487, |
$B14F50E1,$4FB1CEB1,$E047B353,$47E03DE0,$00000000,$00000000,$C3E89556,$E8C358C3, |
$125A8290,$5A123612,$91EF6DFC,$EF91AE91,$8A98AE24,$988A838A,$020A1210,$0A020602, |
$1C6CFCE0,$6C1C241C,$E6598563,$59E637E6,$454C5712,$4C45CF45,$C2ED9C5E,$EDC25BC2, |
$C4F3AA6E,$F3C451C4,$FD2E46BB,$2EFD1AFD,$BF792E91,$79BFDCBF,$44495E1A,$4944CC44, |
$A11FC061,$1FA1FEA1,$4C61165A,$614CD44C,$33FFB685,$FF335533,$C5F6A366,$F6C552C5, |
$84AED054,$AE849184,$23AF2605,$AF236523,$7C91BBC7,$917C847C,$B04A59E9,$4AB0CDB0, |
$25B11035,$B1256F25,$1541BDA8,$41153F15,$35E180B5,$E1355F35,$69D0066F,$D069BB69, |
$FF2454AB,$24FF1CFF,$94FE40D4,$FE94A194,$4D641F52,$644DD74D,$70ADD7A7,$AD709070, |
$A210DB79,$10A2FBA2,$AF29BE11,$29AFECAF,$CDDEEB26,$DECD4ACD,$D6A928FE,$A9D667D6, |
$6CC12B47,$C16CB46C,$B75166D1,$51B7C4B7,$F83F6B93,$3FF815F8,$092D4148,$2D091B09, |
$F31838CB,$18F308F3,$67E6781F,$E667A967,$A40EED49,$0EA4F1A4,$EA65E903,$65EA23EA, |
$EC7BDF33,$7BEC29EC,$B6546FD9,$54B6C7B6,$D4A33AEE,$A3D461D4,$D2BD0CDE,$BDD26BD2, |
$1444B4A0,$44143C14,$1E66EEF0,$661E221E,$E142BA5B,$42E13EE1,$24B4193D,$B4246C24, |
$38D8E5DD,$D8384838,$C6F9B87E,$F9C657C6,$DB904D96,$90DB70DB,$4B7A2962,$7A4BDD4B, |
$7A8F8DF7,$8F7A8E7A,$3AD2F7CD,$D23A4E3A,$DE8160BE,$81DE7FDE,$5E3B94CA,$3B5EE25E, |
$DF8469B6,$84DF7CDF,$95FB49DC,$FB95A295,$FC2B4FB3,$2BFC19FC,$AA389339,$38AAE3AA, |
$D7AC21F6,$ACD764D7,$CED1F03E,$D1CE4FCE,$071B3F38,$1B070907,$0F337778,$330F110F, |
$3DC9C8F5,$C93D473D,$5825A2FA,$2558E858,$9AC83EA4,$C89AB39A,$98C22CB4,$C298B598, |
$9CD60894,$D69CB99C,$F21D31C3,$1DF20BF2,$A701F651,$01A7F4A7,$11559988,$55113311, |
$7E9BA9D7,$9B7E827E,$8B9DA72C,$9D8B808B,$43526122,$5243C543,$030F1B18,$0F030503, |
$E24DA143,$4DE23BE2,$DC8B72AE,$8BDC79DC,$E5569E7B,$56E532E5,$B2404BF9,$40B2CBB2, |
$4E6B044A,$6B4ED24E,$C7FCB176,$FCC754C7,$6DC4224F,$C46DB76D,$E96AF21B,$6AE926E9, |
$27BB0225,$BB276927,$405D7A3A,$5D40C040,$D89F568E,$9FD875D8,$37EB92A5,$EB375937, |
$92E076E4,$E092AB92,$8F89830C,$898F8C8F,$01050908,$05010301,$1D69F5E8,$691D271D, |
$5302F1A2,$0253F553,$3EC6D3ED,$C63E423E,$5920ABF2,$2059EB59,$C1E28746,$E2C15EC1, |
$4F6E0D42,$6E4FD14F,$32FABF8D,$FA325632,$164EA6B0,$4E163A16,$FA357983,$35FA13FA, |
$74B9F387,$B9749C74,$FB30708B,$30FB10FB,$63F25C3F,$F263A563,$9FD9138C,$D99FBC9F, |
$34E489BD,$E4345C34,$1A72CAD0,$721A2E1A,$2A82674D,$822A7E2A,$5A2FB0EA,$2F5AEE5A, |
$8D83911C,$838D8A8D,$C9CACF06,$CAC946C9,$CFD4F936,$D4CF4CCF,$F60915E3,$09F607F6, |
$90EA64F4,$EA90AD90,$2888755D,$88287828,$8892BC34,$92888588,$9BCD37AC,$CD9BB09B, |
$31F5A495,$F5315331,$0E367E70,$360E120E,$BD733C81,$73BDDABD,$4A7F206A,$7F4ADE4A, |
$E86FFB13,$6FE825E8,$96F452C4,$F496A796,$A604FF59,$04A6F7A6,$0C3C6C60,$3C0C140C, |
$C8CFC60E,$CFC845C8,$798096EF,$80798B79,$BC763589,$76BCD9BC,$BE7C2799,$7CBEDFBE, |
$EF74C42B,$74EF2CEF,$6ECB3957,$CB6EB26E,$46434C0A,$4346CA46,$97F15BCC,$F197A497, |
$5B2AB9E2,$2A5BED5B,$ED7ED63B,$7EED2AED,$197DD1C8,$7D192B19,$D99A5F86,$9AD976D9, |
$AC26A509,$26ACE9AC,$99C725BC,$C799B699,$A8328129,$32A8E5A8,$298D7C55,$8D297B29, |
$64E96307,$E964AC64,$1F63E7F8,$631F211F,$AD23AC01,$23ADEAAD,$551CC792,$1C55FF55, |
$135F8B98,$5F133513,$BB6D0AB1,$6DBBD0BB,$F70C1CEB,$0CF704F7,$6FCE305F,$CE6FB16F, |
$B96718A1,$67B9D6B9,$47464502,$4647C947,$2F934A65,$932F712F,$EE71CD23,$71EE2FEE, |
$B86211A9,$62B8D5B8,$7B8A84FF,$8A7B8D7B,$8997B53C,$97898689,$30F0AD9D,$F0305030, |
$D3B805D6,$B8D368D3,$7F9EA0DF,$9E7F817F,$76B3E197,$B3769A76,$82B0E664,$B0829B82), |
($D50F67D5,$68B86868,$B71ECEB7,$D06DD0D0,$60E00B60,$EB20EBEB,$876E4587,$2B7D2B2B, |
$75327A75,$48D84848,$D3019CD3,$9DBA9D9D,$DF1D77DF,$6ABE6A6A,$53977353,$E431E4E4, |
$48A84B48,$E338E3E3,$15D27115,$A3F8A3A3,$13DC8A13,$56FA5656,$BFFD7CBF,$819E8181, |
$94B2CF94,$7D877D7D,$122ADB12,$F10EF1F1,$ABD95CAB,$85928585,$DC1A84DC,$9EBF9E9E, |
$9C517D9C,$2C742C2C,$8C8A048C,$8E8F8E8E,$859FE785,$78887878,$C5D41EC5,$CA43CACA, |
$4BAFB84B,$17391717,$37882137,$A9E6A9A9,$F84E2FF8,$61A36161,$A633E6A6,$D562D5D5, |
$348FD234,$5DE75D5D,$27535827,$0B1D0B0B,$86981486,$8C898C8C,$CCC1FDCC,$3C443C3C, |
$B6E89FB6,$77997777,$08E3B208,$51F35151,$AA2F0DAA,$22662222,$57682A57,$42C64242, |
$C3DAE5C3,$3F413F3F,$19CE9A19,$54FC5454,$58733258,$41C34141,$BAF474BA,$809D8080, |
$DBE22EDB,$CC49CCCC,$A4C244A4,$86978686,$4542F145,$B3C8B3B3,$78D8C078,$18281818, |
$96436D96,$2E722E2E,$16D58216,$57F95757,$1E36301E,$060A0606,$F75537F7,$62A66262, |
$0307F303,$F401F4F4,$EE9BADEE,$365A3636,$B217C6B2,$D16ED1D1,$DA147FDA,$6BBD6B6B, |
$77C3D877,$1B2D1B1B,$EC6A0FEC,$65AF6565,$BCFA8FBC,$759F7575,$50908050,$10301010, |
$95449E95,$DA73DADA,$703B7270,$49DB4949,$BE0B2DBE,$266A2626,$3A629B3A,$F916F9F9, |
$C0DD16C0,$CB40CBCB,$E37117E3,$66AA6666,$5C8C6B5C,$E734E7E7,$6803B968,$BAD3BABA, |
$2CB7192C,$AEEFAEAE,$0DEABA0D,$50F05050,$07F8AA07,$52F65252,$3D9A313D,$ABE0ABAB, |
$112D2811,$050F0505,$1723D317,$F00DF0F0,$39656839,$0D170D0D,$A2CCBFA2,$73957373, |
$D7FEC5D7,$3B4D3B3B,$14242014,$040C0404,$A03D1DA0,$20602020,$215DA321,$FE1FFEFE, |
$8E7BA68E,$DD7ADDDD,$060EFB06,$F502F5F5,$5E7DC95E,$B4C1B4B4,$3E9DC23E,$5FE15F5F, |
$225A5022,$0A1E0A0A,$5B74C15B,$B5C2B5B5,$E78E4EE7,$C05DC0C0,$1AC9691A,$A0FDA0A0, |
$A8DEAFA8,$71937171,$0BE4410B,$A5F2A5A5,$99587599,$2D772D2D,$FD4727FD,$60A06060, |
$A7C5B7A7,$72967272,$E57FECE5,$93A89393,$DDECD5DD,$394B3939,$28484028,$08180808, |
$B5EF6CB5,$83988383,$A53415A5,$21632121,$3186DA31,$5CE45C5C,$A1CB4CA1,$87948787, |
$4F50E14F,$B1CEB1B1,$47B35347,$E03DE0E0,$00000000,$00000000,$E89556E8,$C358C3C3, |
$5A82905A,$12361212,$EF6DFCEF,$91AE9191,$98AE2498,$8A838A8A,$0A12100A,$02060202, |
$6CFCE06C,$1C241C1C,$59856359,$E637E6E6,$4C57124C,$45CF4545,$ED9C5EED,$C25BC2C2, |
$F3AA6EF3,$C451C4C4,$2E46BB2E,$FD1AFDFD,$792E9179,$BFDCBFBF,$495E1A49,$44CC4444, |
$1FC0611F,$A1FEA1A1,$61165A61,$4CD44C4C,$FFB685FF,$33553333,$F6A366F6,$C552C5C5, |
$AED054AE,$84918484,$AF2605AF,$23652323,$91BBC791,$7C847C7C,$4A59E94A,$B0CDB0B0, |
$B11035B1,$256F2525,$41BDA841,$153F1515,$E180B5E1,$355F3535,$D0066FD0,$69BB6969, |
$2454AB24,$FF1CFFFF,$FE40D4FE,$94A19494,$641F5264,$4DD74D4D,$ADD7A7AD,$70907070, |
$10DB7910,$A2FBA2A2,$29BE1129,$AFECAFAF,$DEEB26DE,$CD4ACDCD,$A928FEA9,$D667D6D6, |
$C12B47C1,$6CB46C6C,$5166D151,$B7C4B7B7,$3F6B933F,$F815F8F8,$2D41482D,$091B0909, |
$1838CB18,$F308F3F3,$E6781FE6,$67A96767,$0EED490E,$A4F1A4A4,$65E90365,$EA23EAEA, |
$7BDF337B,$EC29ECEC,$546FD954,$B6C7B6B6,$A33AEEA3,$D461D4D4,$BD0CDEBD,$D26BD2D2, |
$44B4A044,$143C1414,$66EEF066,$1E221E1E,$42BA5B42,$E13EE1E1,$B4193DB4,$246C2424, |
$D8E5DDD8,$38483838,$F9B87EF9,$C657C6C6,$904D9690,$DB70DBDB,$7A29627A,$4BDD4B4B, |
$8F8DF78F,$7A8E7A7A,$D2F7CDD2,$3A4E3A3A,$8160BE81,$DE7FDEDE,$3B94CA3B,$5EE25E5E, |
$8469B684,$DF7CDFDF,$FB49DCFB,$95A29595,$2B4FB32B,$FC19FCFC,$38933938,$AAE3AAAA, |
$AC21F6AC,$D764D7D7,$D1F03ED1,$CE4FCECE,$1B3F381B,$07090707,$33777833,$0F110F0F, |
$C9C8F5C9,$3D473D3D,$25A2FA25,$58E85858,$C83EA4C8,$9AB39A9A,$C22CB4C2,$98B59898, |
$D60894D6,$9CB99C9C,$1D31C31D,$F20BF2F2,$01F65101,$A7F4A7A7,$55998855,$11331111, |
$9BA9D79B,$7E827E7E,$9DA72C9D,$8B808B8B,$52612252,$43C54343,$0F1B180F,$03050303, |
$4DA1434D,$E23BE2E2,$8B72AE8B,$DC79DCDC,$569E7B56,$E532E5E5,$404BF940,$B2CBB2B2, |
$6B044A6B,$4ED24E4E,$FCB176FC,$C754C7C7,$C4224FC4,$6DB76D6D,$6AF21B6A,$E926E9E9, |
$BB0225BB,$27692727,$5D7A3A5D,$40C04040,$9F568E9F,$D875D8D8,$EB92A5EB,$37593737, |
$E076E4E0,$92AB9292,$89830C89,$8F8C8F8F,$05090805,$01030101,$69F5E869,$1D271D1D, |
$02F1A202,$53F55353,$C6D3EDC6,$3E423E3E,$20ABF220,$59EB5959,$E28746E2,$C15EC1C1, |
$6E0D426E,$4FD14F4F,$FABF8DFA,$32563232,$4EA6B04E,$163A1616,$35798335,$FA13FAFA, |
$B9F387B9,$749C7474,$30708B30,$FB10FBFB,$F25C3FF2,$63A56363,$D9138CD9,$9FBC9F9F, |
$E489BDE4,$345C3434,$72CAD072,$1A2E1A1A,$82674D82,$2A7E2A2A,$2FB0EA2F,$5AEE5A5A, |
$83911C83,$8D8A8D8D,$CACF06CA,$C946C9C9,$D4F936D4,$CF4CCFCF,$0915E309,$F607F6F6, |
$EA64F4EA,$90AD9090,$88755D88,$28782828,$92BC3492,$88858888,$CD37ACCD,$9BB09B9B, |
$F5A495F5,$31533131,$367E7036,$0E120E0E,$733C8173,$BDDABDBD,$7F206A7F,$4ADE4A4A, |
$6FFB136F,$E825E8E8,$F452C4F4,$96A79696,$04FF5904,$A6F7A6A6,$3C6C603C,$0C140C0C, |
$CFC60ECF,$C845C8C8,$8096EF80,$798B7979,$76358976,$BCD9BCBC,$7C27997C,$BEDFBEBE, |
$74C42B74,$EF2CEFEF,$CB3957CB,$6EB26E6E,$434C0A43,$46CA4646,$F15BCCF1,$97A49797, |
$2AB9E22A,$5BED5B5B,$7ED63B7E,$ED2AEDED,$7DD1C87D,$192B1919,$9A5F869A,$D976D9D9, |
$26A50926,$ACE9ACAC,$C725BCC7,$99B69999,$32812932,$A8E5A8A8,$8D7C558D,$297B2929, |
$E96307E9,$64AC6464,$63E7F863,$1F211F1F,$23AC0123,$ADEAADAD,$1CC7921C,$55FF5555, |
$5F8B985F,$13351313,$6D0AB16D,$BBD0BBBB,$0C1CEB0C,$F704F7F7,$CE305FCE,$6FB16F6F, |
$6718A167,$B9D6B9B9,$46450246,$47C94747,$934A6593,$2F712F2F,$71CD2371,$EE2FEEEE, |
$6211A962,$B8D5B8B8,$8A84FF8A,$7B8D7B7B,$97B53C97,$89868989,$F0AD9DF0,$30503030, |
$B805D6B8,$D368D3D3,$9EA0DF9E,$7F817F7F,$B3E197B3,$769A7676,$B0E664B0,$829B8282), |
($0F67D568,$B86868D5,$1ECEB7D0,$6DD0D0B7,$E00B60EB,$20EBEB60,$6E45872B,$7D2B2B87, |
$327A7548,$D8484875,$019CD39D,$BA9D9DD3,$1D77DF6A,$BE6A6ADF,$977353E4,$31E4E453, |
$A84B48E3,$38E3E348,$D27115A3,$F8A3A315,$DC8A1356,$FA565613,$FD7CBF81,$9E8181BF, |
$B2CF947D,$877D7D94,$2ADB12F1,$0EF1F112,$D95CAB85,$928585AB,$1A84DC9E,$BF9E9EDC, |
$517D9C2C,$742C2C9C,$8A048C8E,$8F8E8E8C,$9FE78578,$88787885,$D41EC5CA,$43CACAC5, |
$AFB84B17,$3917174B,$882137A9,$E6A9A937,$4E2FF861,$A36161F8,$33E6A6D5,$62D5D5A6, |
$8FD2345D,$E75D5D34,$5358270B,$1D0B0B27,$9814868C,$898C8C86,$C1FDCC3C,$443C3CCC, |
$E89FB677,$997777B6,$E3B20851,$F3515108,$2F0DAA22,$662222AA,$682A5742,$C6424257, |
$DAE5C33F,$413F3FC3,$CE9A1954,$FC545419,$73325841,$C3414158,$F474BA80,$9D8080BA, |
$E22EDBCC,$49CCCCDB,$C244A486,$978686A4,$42F145B3,$C8B3B345,$D8C07818,$28181878, |
$436D962E,$722E2E96,$D5821657,$F9575716,$36301E06,$0A06061E,$5537F762,$A66262F7, |
$07F303F4,$01F4F403,$9BADEE36,$5A3636EE,$17C6B2D1,$6ED1D1B2,$147FDA6B,$BD6B6BDA, |
$C3D8771B,$2D1B1B77,$6A0FEC65,$AF6565EC,$FA8FBC75,$9F7575BC,$90805010,$30101050, |
$449E95DA,$73DADA95,$3B727049,$DB494970,$0B2DBE26,$6A2626BE,$629B3AF9,$16F9F93A, |
$DD16C0CB,$40CBCBC0,$7117E366,$AA6666E3,$8C6B5CE7,$34E7E75C,$03B968BA,$D3BABA68, |
$B7192CAE,$EFAEAE2C,$EABA0D50,$F050500D,$F8AA0752,$F6525207,$9A313DAB,$E0ABAB3D, |
$2D281105,$0F050511,$23D317F0,$0DF0F017,$6568390D,$170D0D39,$CCBFA273,$957373A2, |
$FEC5D73B,$4D3B3BD7,$24201404,$0C040414,$3D1DA020,$602020A0,$5DA321FE,$1FFEFE21, |
$7BA68EDD,$7ADDDD8E,$0EFB06F5,$02F5F506,$7DC95EB4,$C1B4B45E,$9DC23E5F,$E15F5F3E, |
$5A50220A,$1E0A0A22,$74C15BB5,$C2B5B55B,$8E4EE7C0,$5DC0C0E7,$C9691AA0,$FDA0A01A, |
$DEAFA871,$937171A8,$E4410BA5,$F2A5A50B,$5875992D,$772D2D99,$4727FD60,$A06060FD, |
$C5B7A772,$967272A7,$7FECE593,$A89393E5,$ECD5DD39,$4B3939DD,$48402808,$18080828, |
$EF6CB583,$988383B5,$3415A521,$632121A5,$86DA315C,$E45C5C31,$CB4CA187,$948787A1, |
$50E14FB1,$CEB1B14F,$B35347E0,$3DE0E047,$00000000,$00000000,$9556E8C3,$58C3C3E8, |
$82905A12,$3612125A,$6DFCEF91,$AE9191EF,$AE24988A,$838A8A98,$12100A02,$0602020A, |
$FCE06C1C,$241C1C6C,$856359E6,$37E6E659,$57124C45,$CF45454C,$9C5EEDC2,$5BC2C2ED, |
$AA6EF3C4,$51C4C4F3,$46BB2EFD,$1AFDFD2E,$2E9179BF,$DCBFBF79,$5E1A4944,$CC444449, |
$C0611FA1,$FEA1A11F,$165A614C,$D44C4C61,$B685FF33,$553333FF,$A366F6C5,$52C5C5F6, |
$D054AE84,$918484AE,$2605AF23,$652323AF,$BBC7917C,$847C7C91,$59E94AB0,$CDB0B04A, |
$1035B125,$6F2525B1,$BDA84115,$3F151541,$80B5E135,$5F3535E1,$066FD069,$BB6969D0, |
$54AB24FF,$1CFFFF24,$40D4FE94,$A19494FE,$1F52644D,$D74D4D64,$D7A7AD70,$907070AD, |
$DB7910A2,$FBA2A210,$BE1129AF,$ECAFAF29,$EB26DECD,$4ACDCDDE,$28FEA9D6,$67D6D6A9, |
$2B47C16C,$B46C6CC1,$66D151B7,$C4B7B751,$6B933FF8,$15F8F83F,$41482D09,$1B09092D, |
$38CB18F3,$08F3F318,$781FE667,$A96767E6,$ED490EA4,$F1A4A40E,$E90365EA,$23EAEA65, |
$DF337BEC,$29ECEC7B,$6FD954B6,$C7B6B654,$3AEEA3D4,$61D4D4A3,$0CDEBDD2,$6BD2D2BD, |
$B4A04414,$3C141444,$EEF0661E,$221E1E66,$BA5B42E1,$3EE1E142,$193DB424,$6C2424B4, |
$E5DDD838,$483838D8,$B87EF9C6,$57C6C6F9,$4D9690DB,$70DBDB90,$29627A4B,$DD4B4B7A, |
$8DF78F7A,$8E7A7A8F,$F7CDD23A,$4E3A3AD2,$60BE81DE,$7FDEDE81,$94CA3B5E,$E25E5E3B, |
$69B684DF,$7CDFDF84,$49DCFB95,$A29595FB,$4FB32BFC,$19FCFC2B,$933938AA,$E3AAAA38, |
$21F6ACD7,$64D7D7AC,$F03ED1CE,$4FCECED1,$3F381B07,$0907071B,$7778330F,$110F0F33, |
$C8F5C93D,$473D3DC9,$A2FA2558,$E8585825,$3EA4C89A,$B39A9AC8,$2CB4C298,$B59898C2, |
$0894D69C,$B99C9CD6,$31C31DF2,$0BF2F21D,$F65101A7,$F4A7A701,$99885511,$33111155, |
$A9D79B7E,$827E7E9B,$A72C9D8B,$808B8B9D,$61225243,$C5434352,$1B180F03,$0503030F, |
$A1434DE2,$3BE2E24D,$72AE8BDC,$79DCDC8B,$9E7B56E5,$32E5E556,$4BF940B2,$CBB2B240, |
$044A6B4E,$D24E4E6B,$B176FCC7,$54C7C7FC,$224FC46D,$B76D6DC4,$F21B6AE9,$26E9E96A, |
$0225BB27,$692727BB,$7A3A5D40,$C040405D,$568E9FD8,$75D8D89F,$92A5EB37,$593737EB, |
$76E4E092,$AB9292E0,$830C898F,$8C8F8F89,$09080501,$03010105,$F5E8691D,$271D1D69, |
$F1A20253,$F5535302,$D3EDC63E,$423E3EC6,$ABF22059,$EB595920,$8746E2C1,$5EC1C1E2, |
$0D426E4F,$D14F4F6E,$BF8DFA32,$563232FA,$A6B04E16,$3A16164E,$798335FA,$13FAFA35, |
$F387B974,$9C7474B9,$708B30FB,$10FBFB30,$5C3FF263,$A56363F2,$138CD99F,$BC9F9FD9, |
$89BDE434,$5C3434E4,$CAD0721A,$2E1A1A72,$674D822A,$7E2A2A82,$B0EA2F5A,$EE5A5A2F, |
$911C838D,$8A8D8D83,$CF06CAC9,$46C9C9CA,$F936D4CF,$4CCFCFD4,$15E309F6,$07F6F609, |
$64F4EA90,$AD9090EA,$755D8828,$78282888,$BC349288,$85888892,$37ACCD9B,$B09B9BCD, |
$A495F531,$533131F5,$7E70360E,$120E0E36,$3C8173BD,$DABDBD73,$206A7F4A,$DE4A4A7F, |
$FB136FE8,$25E8E86F,$52C4F496,$A79696F4,$FF5904A6,$F7A6A604,$6C603C0C,$140C0C3C, |
$C60ECFC8,$45C8C8CF,$96EF8079,$8B797980,$358976BC,$D9BCBC76,$27997CBE,$DFBEBE7C, |
$C42B74EF,$2CEFEF74,$3957CB6E,$B26E6ECB,$4C0A4346,$CA464643,$5BCCF197,$A49797F1, |
$B9E22A5B,$ED5B5B2A,$D63B7EED,$2AEDED7E,$D1C87D19,$2B19197D,$5F869AD9,$76D9D99A, |
$A50926AC,$E9ACAC26,$25BCC799,$B69999C7,$812932A8,$E5A8A832,$7C558D29,$7B29298D, |
$6307E964,$AC6464E9,$E7F8631F,$211F1F63,$AC0123AD,$EAADAD23,$C7921C55,$FF55551C, |
$8B985F13,$3513135F,$0AB16DBB,$D0BBBB6D,$1CEB0CF7,$04F7F70C,$305FCE6F,$B16F6FCE, |
$18A167B9,$D6B9B967,$45024647,$C9474746,$4A65932F,$712F2F93,$CD2371EE,$2FEEEE71, |
$11A962B8,$D5B8B862,$84FF8A7B,$8D7B7B8A,$B53C9789,$86898997,$AD9DF030,$503030F0, |
$05D6B8D3,$68D3D3B8,$A0DF9E7F,$817F7F9E,$E197B376,$9A7676B3,$E664B082,$9B8282B0), |
($67D568B8,$6868D50F,$CEB7D06D,$D0D0B71E,$0B60EB20,$EBEB60E0,$45872B7D,$2B2B876E, |
$7A7548D8,$48487532,$9CD39DBA,$9D9DD301,$77DF6ABE,$6A6ADF1D,$7353E431,$E4E45397, |
$4B48E338,$E3E348A8,$7115A3F8,$A3A315D2,$8A1356FA,$565613DC,$7CBF819E,$8181BFFD, |
$CF947D87,$7D7D94B2,$DB12F10E,$F1F1122A,$5CAB8592,$8585ABD9,$84DC9EBF,$9E9EDC1A, |
$7D9C2C74,$2C2C9C51,$048C8E8F,$8E8E8C8A,$E7857888,$7878859F,$1EC5CA43,$CACAC5D4, |
$B84B1739,$17174BAF,$2137A9E6,$A9A93788,$2FF861A3,$6161F84E,$E6A6D562,$D5D5A633, |
$D2345DE7,$5D5D348F,$58270B1D,$0B0B2753,$14868C89,$8C8C8698,$FDCC3C44,$3C3CCCC1, |
$9FB67799,$7777B6E8,$B20851F3,$515108E3,$0DAA2266,$2222AA2F,$2A5742C6,$42425768, |
$E5C33F41,$3F3FC3DA,$9A1954FC,$545419CE,$325841C3,$41415873,$74BA809D,$8080BAF4, |
$2EDBCC49,$CCCCDBE2,$44A48697,$8686A4C2,$F145B3C8,$B3B34542,$C0781828,$181878D8, |
$6D962E72,$2E2E9643,$821657F9,$575716D5,$301E060A,$06061E36,$37F762A6,$6262F755, |
$F303F401,$F4F40307,$ADEE365A,$3636EE9B,$C6B2D16E,$D1D1B217,$7FDA6BBD,$6B6BDA14, |
$D8771B2D,$1B1B77C3,$0FEC65AF,$6565EC6A,$8FBC759F,$7575BCFA,$80501030,$10105090, |
$9E95DA73,$DADA9544,$727049DB,$4949703B,$2DBE266A,$2626BE0B,$9B3AF916,$F9F93A62, |
$16C0CB40,$CBCBC0DD,$17E366AA,$6666E371,$6B5CE734,$E7E75C8C,$B968BAD3,$BABA6803, |
$192CAEEF,$AEAE2CB7,$BA0D50F0,$50500DEA,$AA0752F6,$525207F8,$313DABE0,$ABAB3D9A, |
$2811050F,$0505112D,$D317F00D,$F0F01723,$68390D17,$0D0D3965,$BFA27395,$7373A2CC, |
$C5D73B4D,$3B3BD7FE,$2014040C,$04041424,$1DA02060,$2020A03D,$A321FE1F,$FEFE215D, |
$A68EDD7A,$DDDD8E7B,$FB06F502,$F5F5060E,$C95EB4C1,$B4B45E7D,$C23E5FE1,$5F5F3E9D, |
$50220A1E,$0A0A225A,$C15BB5C2,$B5B55B74,$4EE7C05D,$C0C0E78E,$691AA0FD,$A0A01AC9, |
$AFA87193,$7171A8DE,$410BA5F2,$A5A50BE4,$75992D77,$2D2D9958,$27FD60A0,$6060FD47, |
$B7A77296,$7272A7C5,$ECE593A8,$9393E57F,$D5DD394B,$3939DDEC,$40280818,$08082848, |
$6CB58398,$8383B5EF,$15A52163,$2121A534,$DA315CE4,$5C5C3186,$4CA18794,$8787A1CB, |
$E14FB1CE,$B1B14F50,$5347E03D,$E0E047B3,$00000000,$00000000,$56E8C358,$C3C3E895, |
$905A1236,$12125A82,$FCEF91AE,$9191EF6D,$24988A83,$8A8A98AE,$100A0206,$02020A12, |
$E06C1C24,$1C1C6CFC,$6359E637,$E6E65985,$124C45CF,$45454C57,$5EEDC25B,$C2C2ED9C, |
$6EF3C451,$C4C4F3AA,$BB2EFD1A,$FDFD2E46,$9179BFDC,$BFBF792E,$1A4944CC,$4444495E, |
$611FA1FE,$A1A11FC0,$5A614CD4,$4C4C6116,$85FF3355,$3333FFB6,$66F6C552,$C5C5F6A3, |
$54AE8491,$8484AED0,$05AF2365,$2323AF26,$C7917C84,$7C7C91BB,$E94AB0CD,$B0B04A59, |
$35B1256F,$2525B110,$A841153F,$151541BD,$B5E1355F,$3535E180,$6FD069BB,$6969D006, |
$AB24FF1C,$FFFF2454,$D4FE94A1,$9494FE40,$52644DD7,$4D4D641F,$A7AD7090,$7070ADD7, |
$7910A2FB,$A2A210DB,$1129AFEC,$AFAF29BE,$26DECD4A,$CDCDDEEB,$FEA9D667,$D6D6A928, |
$47C16CB4,$6C6CC12B,$D151B7C4,$B7B75166,$933FF815,$F8F83F6B,$482D091B,$09092D41, |
$CB18F308,$F3F31838,$1FE667A9,$6767E678,$490EA4F1,$A4A40EED,$0365EA23,$EAEA65E9, |
$337BEC29,$ECEC7BDF,$D954B6C7,$B6B6546F,$EEA3D461,$D4D4A33A,$DEBDD26B,$D2D2BD0C, |
$A044143C,$141444B4,$F0661E22,$1E1E66EE,$5B42E13E,$E1E142BA,$3DB4246C,$2424B419, |
$DDD83848,$3838D8E5,$7EF9C657,$C6C6F9B8,$9690DB70,$DBDB904D,$627A4BDD,$4B4B7A29, |
$F78F7A8E,$7A7A8F8D,$CDD23A4E,$3A3AD2F7,$BE81DE7F,$DEDE8160,$CA3B5EE2,$5E5E3B94, |
$B684DF7C,$DFDF8469,$DCFB95A2,$9595FB49,$B32BFC19,$FCFC2B4F,$3938AAE3,$AAAA3893, |
$F6ACD764,$D7D7AC21,$3ED1CE4F,$CECED1F0,$381B0709,$07071B3F,$78330F11,$0F0F3377, |
$F5C93D47,$3D3DC9C8,$FA2558E8,$585825A2,$A4C89AB3,$9A9AC83E,$B4C298B5,$9898C22C, |
$94D69CB9,$9C9CD608,$C31DF20B,$F2F21D31,$5101A7F4,$A7A701F6,$88551133,$11115599, |
$D79B7E82,$7E7E9BA9,$2C9D8B80,$8B8B9DA7,$225243C5,$43435261,$180F0305,$03030F1B, |
$434DE23B,$E2E24DA1,$AE8BDC79,$DCDC8B72,$7B56E532,$E5E5569E,$F940B2CB,$B2B2404B, |
$4A6B4ED2,$4E4E6B04,$76FCC754,$C7C7FCB1,$4FC46DB7,$6D6DC422,$1B6AE926,$E9E96AF2, |
$25BB2769,$2727BB02,$3A5D40C0,$40405D7A,$8E9FD875,$D8D89F56,$A5EB3759,$3737EB92, |
$E4E092AB,$9292E076,$0C898F8C,$8F8F8983,$08050103,$01010509,$E8691D27,$1D1D69F5, |
$A20253F5,$535302F1,$EDC63E42,$3E3EC6D3,$F22059EB,$595920AB,$46E2C15E,$C1C1E287, |
$426E4FD1,$4F4F6E0D,$8DFA3256,$3232FABF,$B04E163A,$16164EA6,$8335FA13,$FAFA3579, |
$87B9749C,$7474B9F3,$8B30FB10,$FBFB3070,$3FF263A5,$6363F25C,$8CD99FBC,$9F9FD913, |
$BDE4345C,$3434E489,$D0721A2E,$1A1A72CA,$4D822A7E,$2A2A8267,$EA2F5AEE,$5A5A2FB0, |
$1C838D8A,$8D8D8391,$06CAC946,$C9C9CACF,$36D4CF4C,$CFCFD4F9,$E309F607,$F6F60915, |
$F4EA90AD,$9090EA64,$5D882878,$28288875,$34928885,$888892BC,$ACCD9BB0,$9B9BCD37, |
$95F53153,$3131F5A4,$70360E12,$0E0E367E,$8173BDDA,$BDBD733C,$6A7F4ADE,$4A4A7F20, |
$136FE825,$E8E86FFB,$C4F496A7,$9696F452,$5904A6F7,$A6A604FF,$603C0C14,$0C0C3C6C, |
$0ECFC845,$C8C8CFC6,$EF80798B,$79798096,$8976BCD9,$BCBC7635,$997CBEDF,$BEBE7C27, |
$2B74EF2C,$EFEF74C4,$57CB6EB2,$6E6ECB39,$0A4346CA,$4646434C,$CCF197A4,$9797F15B, |
$E22A5BED,$5B5B2AB9,$3B7EED2A,$EDED7ED6,$C87D192B,$19197DD1,$869AD976,$D9D99A5F, |
$0926ACE9,$ACAC26A5,$BCC799B6,$9999C725,$2932A8E5,$A8A83281,$558D297B,$29298D7C, |
$07E964AC,$6464E963,$F8631F21,$1F1F63E7,$0123ADEA,$ADAD23AC,$921C55FF,$55551CC7, |
$985F1335,$13135F8B,$B16DBBD0,$BBBB6D0A,$EB0CF704,$F7F70C1C,$5FCE6FB1,$6F6FCE30, |
$A167B9D6,$B9B96718,$024647C9,$47474645,$65932F71,$2F2F934A,$2371EE2F,$EEEE71CD, |
$A962B8D5,$B8B86211,$FF8A7B8D,$7B7B8A84,$3C978986,$898997B5,$9DF03050,$3030F0AD, |
$D6B8D368,$D3D3B805,$DF9E7F81,$7F7F9EA0,$97B3769A,$7676B3E1,$64B0829B,$8282B0E6), |
($D568B868,$68D50F67,$B7D06DD0,$D0B71ECE,$60EB20EB,$EB60E00B,$872B7D2B,$2B876E45, |
$7548D848,$4875327A,$D39DBA9D,$9DD3019C,$DF6ABE6A,$6ADF1D77,$53E431E4,$E4539773, |
$48E338E3,$E348A84B,$15A3F8A3,$A315D271,$1356FA56,$5613DC8A,$BF819E81,$81BFFD7C, |
$947D877D,$7D94B2CF,$12F10EF1,$F1122ADB,$AB859285,$85ABD95C,$DC9EBF9E,$9EDC1A84, |
$9C2C742C,$2C9C517D,$8C8E8F8E,$8E8C8A04,$85788878,$78859FE7,$C5CA43CA,$CAC5D41E, |
$4B173917,$174BAFB8,$37A9E6A9,$A9378821,$F861A361,$61F84E2F,$A6D562D5,$D5A633E6, |
$345DE75D,$5D348FD2,$270B1D0B,$0B275358,$868C898C,$8C869814,$CC3C443C,$3CCCC1FD, |
$B6779977,$77B6E89F,$0851F351,$5108E3B2,$AA226622,$22AA2F0D,$5742C642,$4257682A, |
$C33F413F,$3FC3DAE5,$1954FC54,$5419CE9A,$5841C341,$41587332,$BA809D80,$80BAF474, |
$DBCC49CC,$CCDBE22E,$A4869786,$86A4C244,$45B3C8B3,$B34542F1,$78182818,$1878D8C0, |
$962E722E,$2E96436D,$1657F957,$5716D582,$1E060A06,$061E3630,$F762A662,$62F75537, |
$03F401F4,$F40307F3,$EE365A36,$36EE9BAD,$B2D16ED1,$D1B217C6,$DA6BBD6B,$6BDA147F, |
$771B2D1B,$1B77C3D8,$EC65AF65,$65EC6A0F,$BC759F75,$75BCFA8F,$50103010,$10509080, |
$95DA73DA,$DA95449E,$7049DB49,$49703B72,$BE266A26,$26BE0B2D,$3AF916F9,$F93A629B, |
$C0CB40CB,$CBC0DD16,$E366AA66,$66E37117,$5CE734E7,$E75C8C6B,$68BAD3BA,$BA6803B9, |
$2CAEEFAE,$AE2CB719,$0D50F050,$500DEABA,$0752F652,$5207F8AA,$3DABE0AB,$AB3D9A31, |
$11050F05,$05112D28,$17F00DF0,$F01723D3,$390D170D,$0D396568,$A2739573,$73A2CCBF, |
$D73B4D3B,$3BD7FEC5,$14040C04,$04142420,$A0206020,$20A03D1D,$21FE1FFE,$FE215DA3, |
$8EDD7ADD,$DD8E7BA6,$06F502F5,$F5060EFB,$5EB4C1B4,$B45E7DC9,$3E5FE15F,$5F3E9DC2, |
$220A1E0A,$0A225A50,$5BB5C2B5,$B55B74C1,$E7C05DC0,$C0E78E4E,$1AA0FDA0,$A01AC969, |
$A8719371,$71A8DEAF,$0BA5F2A5,$A50BE441,$992D772D,$2D995875,$FD60A060,$60FD4727, |
$A7729672,$72A7C5B7,$E593A893,$93E57FEC,$DD394B39,$39DDECD5,$28081808,$08284840, |
$B5839883,$83B5EF6C,$A5216321,$21A53415,$315CE45C,$5C3186DA,$A1879487,$87A1CB4C, |
$4FB1CEB1,$B14F50E1,$47E03DE0,$E047B353,$00000000,$00000000,$E8C358C3,$C3E89556, |
$5A123612,$125A8290,$EF91AE91,$91EF6DFC,$988A838A,$8A98AE24,$0A020602,$020A1210, |
$6C1C241C,$1C6CFCE0,$59E637E6,$E6598563,$4C45CF45,$454C5712,$EDC25BC2,$C2ED9C5E, |
$F3C451C4,$C4F3AA6E,$2EFD1AFD,$FD2E46BB,$79BFDCBF,$BF792E91,$4944CC44,$44495E1A, |
$1FA1FEA1,$A11FC061,$614CD44C,$4C61165A,$FF335533,$33FFB685,$F6C552C5,$C5F6A366, |
$AE849184,$84AED054,$AF236523,$23AF2605,$917C847C,$7C91BBC7,$4AB0CDB0,$B04A59E9, |
$B1256F25,$25B11035,$41153F15,$1541BDA8,$E1355F35,$35E180B5,$D069BB69,$69D0066F, |
$24FF1CFF,$FF2454AB,$FE94A194,$94FE40D4,$644DD74D,$4D641F52,$AD709070,$70ADD7A7, |
$10A2FBA2,$A210DB79,$29AFECAF,$AF29BE11,$DECD4ACD,$CDDEEB26,$A9D667D6,$D6A928FE, |
$C16CB46C,$6CC12B47,$51B7C4B7,$B75166D1,$3FF815F8,$F83F6B93,$2D091B09,$092D4148, |
$18F308F3,$F31838CB,$E667A967,$67E6781F,$0EA4F1A4,$A40EED49,$65EA23EA,$EA65E903, |
$7BEC29EC,$EC7BDF33,$54B6C7B6,$B6546FD9,$A3D461D4,$D4A33AEE,$BDD26BD2,$D2BD0CDE, |
$44143C14,$1444B4A0,$661E221E,$1E66EEF0,$42E13EE1,$E142BA5B,$B4246C24,$24B4193D, |
$D8384838,$38D8E5DD,$F9C657C6,$C6F9B87E,$90DB70DB,$DB904D96,$7A4BDD4B,$4B7A2962, |
$8F7A8E7A,$7A8F8DF7,$D23A4E3A,$3AD2F7CD,$81DE7FDE,$DE8160BE,$3B5EE25E,$5E3B94CA, |
$84DF7CDF,$DF8469B6,$FB95A295,$95FB49DC,$2BFC19FC,$FC2B4FB3,$38AAE3AA,$AA389339, |
$ACD764D7,$D7AC21F6,$D1CE4FCE,$CED1F03E,$1B070907,$071B3F38,$330F110F,$0F337778, |
$C93D473D,$3DC9C8F5,$2558E858,$5825A2FA,$C89AB39A,$9AC83EA4,$C298B598,$98C22CB4, |
$D69CB99C,$9CD60894,$1DF20BF2,$F21D31C3,$01A7F4A7,$A701F651,$55113311,$11559988, |
$9B7E827E,$7E9BA9D7,$9D8B808B,$8B9DA72C,$5243C543,$43526122,$0F030503,$030F1B18, |
$4DE23BE2,$E24DA143,$8BDC79DC,$DC8B72AE,$56E532E5,$E5569E7B,$40B2CBB2,$B2404BF9, |
$6B4ED24E,$4E6B044A,$FCC754C7,$C7FCB176,$C46DB76D,$6DC4224F,$6AE926E9,$E96AF21B, |
$BB276927,$27BB0225,$5D40C040,$405D7A3A,$9FD875D8,$D89F568E,$EB375937,$37EB92A5, |
$E092AB92,$92E076E4,$898F8C8F,$8F89830C,$05010301,$01050908,$691D271D,$1D69F5E8, |
$0253F553,$5302F1A2,$C63E423E,$3EC6D3ED,$2059EB59,$5920ABF2,$E2C15EC1,$C1E28746, |
$6E4FD14F,$4F6E0D42,$FA325632,$32FABF8D,$4E163A16,$164EA6B0,$35FA13FA,$FA357983, |
$B9749C74,$74B9F387,$30FB10FB,$FB30708B,$F263A563,$63F25C3F,$D99FBC9F,$9FD9138C, |
$E4345C34,$34E489BD,$721A2E1A,$1A72CAD0,$822A7E2A,$2A82674D,$2F5AEE5A,$5A2FB0EA, |
$838D8A8D,$8D83911C,$CAC946C9,$C9CACF06,$D4CF4CCF,$CFD4F936,$09F607F6,$F60915E3, |
$EA90AD90,$90EA64F4,$88287828,$2888755D,$92888588,$8892BC34,$CD9BB09B,$9BCD37AC, |
$F5315331,$31F5A495,$360E120E,$0E367E70,$73BDDABD,$BD733C81,$7F4ADE4A,$4A7F206A, |
$6FE825E8,$E86FFB13,$F496A796,$96F452C4,$04A6F7A6,$A604FF59,$3C0C140C,$0C3C6C60, |
$CFC845C8,$C8CFC60E,$80798B79,$798096EF,$76BCD9BC,$BC763589,$7CBEDFBE,$BE7C2799, |
$74EF2CEF,$EF74C42B,$CB6EB26E,$6ECB3957,$4346CA46,$46434C0A,$F197A497,$97F15BCC, |
$2A5BED5B,$5B2AB9E2,$7EED2AED,$ED7ED63B,$7D192B19,$197DD1C8,$9AD976D9,$D99A5F86, |
$26ACE9AC,$AC26A509,$C799B699,$99C725BC,$32A8E5A8,$A8328129,$8D297B29,$298D7C55, |
$E964AC64,$64E96307,$631F211F,$1F63E7F8,$23ADEAAD,$AD23AC01,$1C55FF55,$551CC792, |
$5F133513,$135F8B98,$6DBBD0BB,$BB6D0AB1,$0CF704F7,$F70C1CEB,$CE6FB16F,$6FCE305F, |
$67B9D6B9,$B96718A1,$4647C947,$47464502,$932F712F,$2F934A65,$71EE2FEE,$EE71CD23, |
$62B8D5B8,$B86211A9,$8A7B8D7B,$7B8A84FF,$97898689,$8997B53C,$F0305030,$30F0AD9D, |
$B8D368D3,$D3B805D6,$9E7F817F,$7F9EA0DF,$B3769A76,$76B3E197,$B0829B82,$82B0E664) |
); |
/// <summary> |
/// Whirlpool T |
/// </summary> |
Whirlpool_RC_T: array[0..Whirlpool_Rounds * 2 - 1] of UInt32 = ( |
$E8C62318,$4F01B887,$F5D2A636,$52916F79,$8E9BBC60,$357B0CA3,$C2D7E01D,$57FE4B2E, |
$E5377715,$DA4AF09F,$0A29C958,$856BA0B1,$F4105DBD,$67053ECB,$8B4127E4,$D8957DA7, |
$667CEEFB,$9E4717DD,$07BF2DCA,$33835AAD |
); |
Whirlpool_C_T: array[0..7, 0..511] of UInt32 = ( |
($18281818,$78D8C078,$23652323,$AF2605AF,$C657C6C6,$F9B87EF9,$E825E8E8,$6FFB136F, |
$87948787,$A1CB4CA1,$B8D5B8B8,$6211A962,$01030101,$05090805,$4FD14F4F,$6E0D426E, |
$365A3636,$EE9BADEE,$A6F7A6A6,$04FF5904,$D26BD2D2,$BD0CDEBD,$F502F5F5,$060EFB06, |
$798B7979,$8096EF80,$6FB16F6F,$CE305FCE,$91AE9191,$EF6DFCEF,$52F65252,$07F8AA07, |
$60A06060,$FD4727FD,$BCD9BCBC,$76358976,$9BB09B9B,$CD37ACCD,$8E8F8E8E,$8C8A048C, |
$A3F8A3A3,$15D27115,$0C140C0C,$3C6C603C,$7B8D7B7B,$8A84FF8A,$355F3535,$E180B5E1, |
$1D271D1D,$69F5E869,$E03DE0E0,$47B35347,$D764D7D7,$AC21F6AC,$C25BC2C2,$ED9C5EED, |
$2E722E2E,$96436D96,$4BDD4B4B,$7A29627A,$FE1FFEFE,$215DA321,$57F95757,$16D58216, |
$153F1515,$41BDA841,$77997777,$B6E89FB6,$37593737,$EB92A5EB,$E532E5E5,$569E7B56, |
$9FBC9F9F,$D9138CD9,$F00DF0F0,$1723D317,$4ADE4A4A,$7F206A7F,$DA73DADA,$95449E95, |
$58E85858,$25A2FA25,$C946C9C9,$CACF06CA,$297B2929,$8D7C558D,$0A1E0A0A,$225A5022, |
$B1CEB1B1,$4F50E14F,$A0FDA0A0,$1AC9691A,$6BBD6B6B,$DA147FDA,$85928585,$ABD95CAB, |
$BDDABDBD,$733C8173,$5DE75D5D,$348FD234,$10301010,$50908050,$F401F4F4,$0307F303, |
$CB40CBCB,$C0DD16C0,$3E423E3E,$C6D3EDC6,$050F0505,$112D2811,$67A96767,$E6781FE6, |
$E431E4E4,$53977353,$27692727,$BB0225BB,$41C34141,$58733258,$8B808B8B,$9DA72C9D, |
$A7F4A7A7,$01F65101,$7D877D7D,$94B2CF94,$95A29595,$FB49DCFB,$D875D8D8,$9F568E9F, |
$FB10FBFB,$30708B30,$EE2FEEEE,$71CD2371,$7C847C7C,$91BBC791,$66AA6666,$E37117E3, |
$DD7ADDDD,$8E7BA68E,$17391717,$4BAFB84B,$47C94747,$46450246,$9EBF9E9E,$DC1A84DC, |
$CA43CACA,$C5D41EC5,$2D772D2D,$99587599,$BFDCBFBF,$792E9179,$07090707,$1B3F381B, |
$ADEAADAD,$23AC0123,$5AEE5A5A,$2FB0EA2F,$83988383,$B5EF6CB5,$33553333,$FFB685FF, |
$63A56363,$F25C3FF2,$02060202,$0A12100A,$AAE3AAAA,$38933938,$71937171,$A8DEAFA8, |
$C845C8C8,$CFC60ECF,$192B1919,$7DD1C87D,$49DB4949,$703B7270,$D976D9D9,$9A5F869A, |
$F20BF2F2,$1D31C31D,$E338E3E3,$48A84B48,$5BED5B5B,$2AB9E22A,$88858888,$92BC3492, |
$9AB39A9A,$C83EA4C8,$266A2626,$BE0B2DBE,$32563232,$FABF8DFA,$B0CDB0B0,$4A59E94A, |
$E926E9E9,$6AF21B6A,$0F110F0F,$33777833,$D562D5D5,$A633E6A6,$809D8080,$BAF474BA, |
$BEDFBEBE,$7C27997C,$CD4ACDCD,$DEEB26DE,$345C3434,$E489BDE4,$48D84848,$75327A75, |
$FF1CFFFF,$2454AB24,$7A8E7A7A,$8F8DF78F,$90AD9090,$EA64F4EA,$5FE15F5F,$3E9DC23E, |
$20602020,$A03D1DA0,$68B86868,$D50F67D5,$1A2E1A1A,$72CAD072,$AEEFAEAE,$2CB7192C, |
$B4C1B4B4,$5E7DC95E,$54FC5454,$19CE9A19,$93A89393,$E57FECE5,$22662222,$AA2F0DAA, |
$64AC6464,$E96307E9,$F10EF1F1,$122ADB12,$73957373,$A2CCBFA2,$12361212,$5A82905A, |
$40C04040,$5D7A3A5D,$08180808,$28484028,$C358C3C3,$E89556E8,$EC29ECEC,$7BDF337B, |
$DB70DBDB,$904D9690,$A1FEA1A1,$1FC0611F,$8D8A8D8D,$83911C83,$3D473D3D,$C9C8F5C9, |
$97A49797,$F15BCCF1,$00000000,$00000000,$CF4CCFCF,$D4F936D4,$2B7D2B2B,$876E4587, |
$769A7676,$B3E197B3,$829B8282,$B0E664B0,$D667D6D6,$A928FEA9,$1B2D1B1B,$77C3D877, |
$B5C2B5B5,$5B74C15B,$AFECAFAF,$29BE1129,$6ABE6A6A,$DF1D77DF,$50F05050,$0DEABA0D, |
$45CF4545,$4C57124C,$F308F3F3,$1838CB18,$30503030,$F0AD9DF0,$EF2CEFEF,$74C42B74, |
$3F413F3F,$C3DAE5C3,$55FF5555,$1CC7921C,$A2FBA2A2,$10DB7910,$EA23EAEA,$65E90365, |
$65AF6565,$EC6A0FEC,$BAD3BABA,$6803B968,$2F712F2F,$934A6593,$C05DC0C0,$E78E4EE7, |
$DE7FDEDE,$8160BE81,$1C241C1C,$6CFCE06C,$FD1AFDFD,$2E46BB2E,$4DD74D4D,$641F5264, |
$92AB9292,$E076E4E0,$759F7575,$BCFA8FBC,$060A0606,$1E36301E,$8A838A8A,$98AE2498, |
$B2CBB2B2,$404BF940,$E637E6E6,$59856359,$0E120E0E,$367E7036,$1F211F1F,$63E7F863, |
$62A66262,$F75537F7,$D461D4D4,$A33AEEA3,$A8E5A8A8,$32812932,$96A79696,$F452C4F4, |
$F916F9F9,$3A629B3A,$C552C5C5,$F6A366F6,$256F2525,$B11035B1,$59EB5959,$20ABF220, |
$84918484,$AED054AE,$72967272,$A7C5B7A7,$394B3939,$DDECD5DD,$4CD44C4C,$61165A61, |
$5EE25E5E,$3B94CA3B,$78887878,$859FE785,$38483838,$D8E5DDD8,$8C898C8C,$86981486, |
$D16ED1D1,$B217C6B2,$A5F2A5A5,$0BE4410B,$E23BE2E2,$4DA1434D,$61A36161,$F84E2FF8, |
$B3C8B3B3,$4542F145,$21632121,$A53415A5,$9CB99C9C,$D60894D6,$1E221E1E,$66EEF066, |
$43C54343,$52612252,$C754C7C7,$FCB176FC,$FC19FCFC,$2B4FB32B,$040C0404,$14242014, |
$51F35151,$08E3B208,$99B69999,$C725BCC7,$6DB76D6D,$C4224FC4,$0D170D0D,$39656839, |
$FA13FAFA,$35798335,$DF7CDFDF,$8469B684,$7E827E7E,$9BA9D79B,$246C2424,$B4193DB4, |
$3B4D3B3B,$D7FEC5D7,$ABE0ABAB,$3D9A313D,$CE4FCECE,$D1F03ED1,$11331111,$55998855, |
$8F8C8F8F,$89830C89,$4ED24E4E,$6B044A6B,$B7C4B7B7,$5166D151,$EB20EBEB,$60E00B60, |
$3C443C3C,$CCC1FDCC,$819E8181,$BFFD7CBF,$94A19494,$FE40D4FE,$F704F7F7,$0C1CEB0C, |
$B9D6B9B9,$6718A167,$13351313,$5F8B985F,$2C742C2C,$9C517D9C,$D368D3D3,$B805D6B8, |
$E734E7E7,$5C8C6B5C,$6EB26E6E,$CB3957CB,$C451C4C4,$F3AA6EF3,$03050303,$0F1B180F, |
$56FA5656,$13DC8A13,$44CC4444,$495E1A49,$7F817F7F,$9EA0DF9E,$A9E6A9A9,$37882137, |
$2A7E2A2A,$82674D82,$BBD0BBBB,$6D0AB16D,$C15EC1C1,$E28746E2,$53F55353,$02F1A202, |
$DC79DCDC,$8B72AE8B,$0B1D0B0B,$27535827,$9DBA9D9D,$D3019CD3,$6CB46C6C,$C12B47C1, |
$31533131,$F5A495F5,$749C7474,$B9F387B9,$F607F6F6,$0915E309,$46CA4646,$434C0A43, |
$ACE9ACAC,$26A50926,$89868989,$97B53C97,$143C1414,$44B4A044,$E13EE1E1,$42BA5B42, |
$163A1616,$4EA6B04E,$3A4E3A3A,$D2F7CDD2,$69BB6969,$D0066FD0,$091B0909,$2D41482D, |
$70907070,$ADD7A7AD,$B6C7B6B6,$546FD954,$D06DD0D0,$B71ECEB7,$ED2AEDED,$7ED63B7E, |
$CC49CCCC,$DBE22EDB,$42C64242,$57682A57,$98B59898,$C22CB4C2,$A4F1A4A4,$0EED490E, |
$28782828,$88755D88,$5CE45C5C,$3186DA31,$F815F8F8,$3F6B933F,$86978686,$A4C244A4), |
($28181878,$D8C07818,$652323AF,$2605AF23,$57C6C6F9,$B87EF9C6,$25E8E86F,$FB136FE8, |
$948787A1,$CB4CA187,$D5B8B862,$11A962B8,$03010105,$09080501,$D14F4F6E,$0D426E4F, |
$5A3636EE,$9BADEE36,$F7A6A604,$FF5904A6,$6BD2D2BD,$0CDEBDD2,$02F5F506,$0EFB06F5, |
$8B797980,$96EF8079,$B16F6FCE,$305FCE6F,$AE9191EF,$6DFCEF91,$F6525207,$F8AA0752, |
$A06060FD,$4727FD60,$D9BCBC76,$358976BC,$B09B9BCD,$37ACCD9B,$8F8E8E8C,$8A048C8E, |
$F8A3A315,$D27115A3,$140C0C3C,$6C603C0C,$8D7B7B8A,$84FF8A7B,$5F3535E1,$80B5E135, |
$271D1D69,$F5E8691D,$3DE0E047,$B35347E0,$64D7D7AC,$21F6ACD7,$5BC2C2ED,$9C5EEDC2, |
$722E2E96,$436D962E,$DD4B4B7A,$29627A4B,$1FFEFE21,$5DA321FE,$F9575716,$D5821657, |
$3F151541,$BDA84115,$997777B6,$E89FB677,$593737EB,$92A5EB37,$32E5E556,$9E7B56E5, |
$BC9F9FD9,$138CD99F,$0DF0F017,$23D317F0,$DE4A4A7F,$206A7F4A,$73DADA95,$449E95DA, |
$E8585825,$A2FA2558,$46C9C9CA,$CF06CAC9,$7B29298D,$7C558D29,$1E0A0A22,$5A50220A, |
$CEB1B14F,$50E14FB1,$FDA0A01A,$C9691AA0,$BD6B6BDA,$147FDA6B,$928585AB,$D95CAB85, |
$DABDBD73,$3C8173BD,$E75D5D34,$8FD2345D,$30101050,$90805010,$01F4F403,$07F303F4, |
$40CBCBC0,$DD16C0CB,$423E3EC6,$D3EDC63E,$0F050511,$2D281105,$A96767E6,$781FE667, |
$31E4E453,$977353E4,$692727BB,$0225BB27,$C3414158,$73325841,$808B8B9D,$A72C9D8B, |
$F4A7A701,$F65101A7,$877D7D94,$B2CF947D,$A29595FB,$49DCFB95,$75D8D89F,$568E9FD8, |
$10FBFB30,$708B30FB,$2FEEEE71,$CD2371EE,$847C7C91,$BBC7917C,$AA6666E3,$7117E366, |
$7ADDDD8E,$7BA68EDD,$3917174B,$AFB84B17,$C9474746,$45024647,$BF9E9EDC,$1A84DC9E, |
$43CACAC5,$D41EC5CA,$772D2D99,$5875992D,$DCBFBF79,$2E9179BF,$0907071B,$3F381B07, |
$EAADAD23,$AC0123AD,$EE5A5A2F,$B0EA2F5A,$988383B5,$EF6CB583,$553333FF,$B685FF33, |
$A56363F2,$5C3FF263,$0602020A,$12100A02,$E3AAAA38,$933938AA,$937171A8,$DEAFA871, |
$45C8C8CF,$C60ECFC8,$2B19197D,$D1C87D19,$DB494970,$3B727049,$76D9D99A,$5F869AD9, |
$0BF2F21D,$31C31DF2,$38E3E348,$A84B48E3,$ED5B5B2A,$B9E22A5B,$85888892,$BC349288, |
$B39A9AC8,$3EA4C89A,$6A2626BE,$0B2DBE26,$563232FA,$BF8DFA32,$CDB0B04A,$59E94AB0, |
$26E9E96A,$F21B6AE9,$110F0F33,$7778330F,$62D5D5A6,$33E6A6D5,$9D8080BA,$F474BA80, |
$DFBEBE7C,$27997CBE,$4ACDCDDE,$EB26DECD,$5C3434E4,$89BDE434,$D8484875,$327A7548, |
$1CFFFF24,$54AB24FF,$8E7A7A8F,$8DF78F7A,$AD9090EA,$64F4EA90,$E15F5F3E,$9DC23E5F, |
$602020A0,$3D1DA020,$B86868D5,$0F67D568,$2E1A1A72,$CAD0721A,$EFAEAE2C,$B7192CAE, |
$C1B4B45E,$7DC95EB4,$FC545419,$CE9A1954,$A89393E5,$7FECE593,$662222AA,$2F0DAA22, |
$AC6464E9,$6307E964,$0EF1F112,$2ADB12F1,$957373A2,$CCBFA273,$3612125A,$82905A12, |
$C040405D,$7A3A5D40,$18080828,$48402808,$58C3C3E8,$9556E8C3,$29ECEC7B,$DF337BEC, |
$70DBDB90,$4D9690DB,$FEA1A11F,$C0611FA1,$8A8D8D83,$911C838D,$473D3DC9,$C8F5C93D, |
$A49797F1,$5BCCF197,$00000000,$00000000,$4CCFCFD4,$F936D4CF,$7D2B2B87,$6E45872B, |
$9A7676B3,$E197B376,$9B8282B0,$E664B082,$67D6D6A9,$28FEA9D6,$2D1B1B77,$C3D8771B, |
$C2B5B55B,$74C15BB5,$ECAFAF29,$BE1129AF,$BE6A6ADF,$1D77DF6A,$F050500D,$EABA0D50, |
$CF45454C,$57124C45,$08F3F318,$38CB18F3,$503030F0,$AD9DF030,$2CEFEF74,$C42B74EF, |
$413F3FC3,$DAE5C33F,$FF55551C,$C7921C55,$FBA2A210,$DB7910A2,$23EAEA65,$E90365EA, |
$AF6565EC,$6A0FEC65,$D3BABA68,$03B968BA,$712F2F93,$4A65932F,$5DC0C0E7,$8E4EE7C0, |
$7FDEDE81,$60BE81DE,$241C1C6C,$FCE06C1C,$1AFDFD2E,$46BB2EFD,$D74D4D64,$1F52644D, |
$AB9292E0,$76E4E092,$9F7575BC,$FA8FBC75,$0A06061E,$36301E06,$838A8A98,$AE24988A, |
$CBB2B240,$4BF940B2,$37E6E659,$856359E6,$120E0E36,$7E70360E,$211F1F63,$E7F8631F, |
$A66262F7,$5537F762,$61D4D4A3,$3AEEA3D4,$E5A8A832,$812932A8,$A79696F4,$52C4F496, |
$16F9F93A,$629B3AF9,$52C5C5F6,$A366F6C5,$6F2525B1,$1035B125,$EB595920,$ABF22059, |
$918484AE,$D054AE84,$967272A7,$C5B7A772,$4B3939DD,$ECD5DD39,$D44C4C61,$165A614C, |
$E25E5E3B,$94CA3B5E,$88787885,$9FE78578,$483838D8,$E5DDD838,$898C8C86,$9814868C, |
$6ED1D1B2,$17C6B2D1,$F2A5A50B,$E4410BA5,$3BE2E24D,$A1434DE2,$A36161F8,$4E2FF861, |
$C8B3B345,$42F145B3,$632121A5,$3415A521,$B99C9CD6,$0894D69C,$221E1E66,$EEF0661E, |
$C5434352,$61225243,$54C7C7FC,$B176FCC7,$19FCFC2B,$4FB32BFC,$0C040414,$24201404, |
$F3515108,$E3B20851,$B69999C7,$25BCC799,$B76D6DC4,$224FC46D,$170D0D39,$6568390D, |
$13FAFA35,$798335FA,$7CDFDF84,$69B684DF,$827E7E9B,$A9D79B7E,$6C2424B4,$193DB424, |
$4D3B3BD7,$FEC5D73B,$E0ABAB3D,$9A313DAB,$4FCECED1,$F03ED1CE,$33111155,$99885511, |
$8C8F8F89,$830C898F,$D24E4E6B,$044A6B4E,$C4B7B751,$66D151B7,$20EBEB60,$E00B60EB, |
$443C3CCC,$C1FDCC3C,$9E8181BF,$FD7CBF81,$A19494FE,$40D4FE94,$04F7F70C,$1CEB0CF7, |
$D6B9B967,$18A167B9,$3513135F,$8B985F13,$742C2C9C,$517D9C2C,$68D3D3B8,$05D6B8D3, |
$34E7E75C,$8C6B5CE7,$B26E6ECB,$3957CB6E,$51C4C4F3,$AA6EF3C4,$0503030F,$1B180F03, |
$FA565613,$DC8A1356,$CC444449,$5E1A4944,$817F7F9E,$A0DF9E7F,$E6A9A937,$882137A9, |
$7E2A2A82,$674D822A,$D0BBBB6D,$0AB16DBB,$5EC1C1E2,$8746E2C1,$F5535302,$F1A20253, |
$79DCDC8B,$72AE8BDC,$1D0B0B27,$5358270B,$BA9D9DD3,$019CD39D,$B46C6CC1,$2B47C16C, |
$533131F5,$A495F531,$9C7474B9,$F387B974,$07F6F609,$15E309F6,$CA464643,$4C0A4346, |
$E9ACAC26,$A50926AC,$86898997,$B53C9789,$3C141444,$B4A04414,$3EE1E142,$BA5B42E1, |
$3A16164E,$A6B04E16,$4E3A3AD2,$F7CDD23A,$BB6969D0,$066FD069,$1B09092D,$41482D09, |
$907070AD,$D7A7AD70,$C7B6B654,$6FD954B6,$6DD0D0B7,$1ECEB7D0,$2AEDED7E,$D63B7EED, |
$49CCCCDB,$E22EDBCC,$C6424257,$682A5742,$B59898C2,$2CB4C298,$F1A4A40E,$ED490EA4, |
$78282888,$755D8828,$E45C5C31,$86DA315C,$15F8F83F,$6B933FF8,$978686A4,$C244A486), |
($181878D8,$C0781828,$2323AF26,$05AF2365,$C6C6F9B8,$7EF9C657,$E8E86FFB,$136FE825, |
$8787A1CB,$4CA18794,$B8B86211,$A962B8D5,$01010509,$08050103,$4F4F6E0D,$426E4FD1, |
$3636EE9B,$ADEE365A,$A6A604FF,$5904A6F7,$D2D2BD0C,$DEBDD26B,$F5F5060E,$FB06F502, |
$79798096,$EF80798B,$6F6FCE30,$5FCE6FB1,$9191EF6D,$FCEF91AE,$525207F8,$AA0752F6, |
$6060FD47,$27FD60A0,$BCBC7635,$8976BCD9,$9B9BCD37,$ACCD9BB0,$8E8E8C8A,$048C8E8F, |
$A3A315D2,$7115A3F8,$0C0C3C6C,$603C0C14,$7B7B8A84,$FF8A7B8D,$3535E180,$B5E1355F, |
$1D1D69F5,$E8691D27,$E0E047B3,$5347E03D,$D7D7AC21,$F6ACD764,$C2C2ED9C,$5EEDC25B, |
$2E2E9643,$6D962E72,$4B4B7A29,$627A4BDD,$FEFE215D,$A321FE1F,$575716D5,$821657F9, |
$151541BD,$A841153F,$7777B6E8,$9FB67799,$3737EB92,$A5EB3759,$E5E5569E,$7B56E532, |
$9F9FD913,$8CD99FBC,$F0F01723,$D317F00D,$4A4A7F20,$6A7F4ADE,$DADA9544,$9E95DA73, |
$585825A2,$FA2558E8,$C9C9CACF,$06CAC946,$29298D7C,$558D297B,$0A0A225A,$50220A1E, |
$B1B14F50,$E14FB1CE,$A0A01AC9,$691AA0FD,$6B6BDA14,$7FDA6BBD,$8585ABD9,$5CAB8592, |
$BDBD733C,$8173BDDA,$5D5D348F,$D2345DE7,$10105090,$80501030,$F4F40307,$F303F401, |
$CBCBC0DD,$16C0CB40,$3E3EC6D3,$EDC63E42,$0505112D,$2811050F,$6767E678,$1FE667A9, |
$E4E45397,$7353E431,$2727BB02,$25BB2769,$41415873,$325841C3,$8B8B9DA7,$2C9D8B80, |
$A7A701F6,$5101A7F4,$7D7D94B2,$CF947D87,$9595FB49,$DCFB95A2,$D8D89F56,$8E9FD875, |
$FBFB3070,$8B30FB10,$EEEE71CD,$2371EE2F,$7C7C91BB,$C7917C84,$6666E371,$17E366AA, |
$DDDD8E7B,$A68EDD7A,$17174BAF,$B84B1739,$47474645,$024647C9,$9E9EDC1A,$84DC9EBF, |
$CACAC5D4,$1EC5CA43,$2D2D9958,$75992D77,$BFBF792E,$9179BFDC,$07071B3F,$381B0709, |
$ADAD23AC,$0123ADEA,$5A5A2FB0,$EA2F5AEE,$8383B5EF,$6CB58398,$3333FFB6,$85FF3355, |
$6363F25C,$3FF263A5,$02020A12,$100A0206,$AAAA3893,$3938AAE3,$7171A8DE,$AFA87193, |
$C8C8CFC6,$0ECFC845,$19197DD1,$C87D192B,$4949703B,$727049DB,$D9D99A5F,$869AD976, |
$F2F21D31,$C31DF20B,$E3E348A8,$4B48E338,$5B5B2AB9,$E22A5BED,$888892BC,$34928885, |
$9A9AC83E,$A4C89AB3,$2626BE0B,$2DBE266A,$3232FABF,$8DFA3256,$B0B04A59,$E94AB0CD, |
$E9E96AF2,$1B6AE926,$0F0F3377,$78330F11,$D5D5A633,$E6A6D562,$8080BAF4,$74BA809D, |
$BEBE7C27,$997CBEDF,$CDCDDEEB,$26DECD4A,$3434E489,$BDE4345C,$48487532,$7A7548D8, |
$FFFF2454,$AB24FF1C,$7A7A8F8D,$F78F7A8E,$9090EA64,$F4EA90AD,$5F5F3E9D,$C23E5FE1, |
$2020A03D,$1DA02060,$6868D50F,$67D568B8,$1A1A72CA,$D0721A2E,$AEAE2CB7,$192CAEEF, |
$B4B45E7D,$C95EB4C1,$545419CE,$9A1954FC,$9393E57F,$ECE593A8,$2222AA2F,$0DAA2266, |
$6464E963,$07E964AC,$F1F1122A,$DB12F10E,$7373A2CC,$BFA27395,$12125A82,$905A1236, |
$40405D7A,$3A5D40C0,$08082848,$40280818,$C3C3E895,$56E8C358,$ECEC7BDF,$337BEC29, |
$DBDB904D,$9690DB70,$A1A11FC0,$611FA1FE,$8D8D8391,$1C838D8A,$3D3DC9C8,$F5C93D47, |
$9797F15B,$CCF197A4,$00000000,$00000000,$CFCFD4F9,$36D4CF4C,$2B2B876E,$45872B7D, |
$7676B3E1,$97B3769A,$8282B0E6,$64B0829B,$D6D6A928,$FEA9D667,$1B1B77C3,$D8771B2D, |
$B5B55B74,$C15BB5C2,$AFAF29BE,$1129AFEC,$6A6ADF1D,$77DF6ABE,$50500DEA,$BA0D50F0, |
$45454C57,$124C45CF,$F3F31838,$CB18F308,$3030F0AD,$9DF03050,$EFEF74C4,$2B74EF2C, |
$3F3FC3DA,$E5C33F41,$55551CC7,$921C55FF,$A2A210DB,$7910A2FB,$EAEA65E9,$0365EA23, |
$6565EC6A,$0FEC65AF,$BABA6803,$B968BAD3,$2F2F934A,$65932F71,$C0C0E78E,$4EE7C05D, |
$DEDE8160,$BE81DE7F,$1C1C6CFC,$E06C1C24,$FDFD2E46,$BB2EFD1A,$4D4D641F,$52644DD7, |
$9292E076,$E4E092AB,$7575BCFA,$8FBC759F,$06061E36,$301E060A,$8A8A98AE,$24988A83, |
$B2B2404B,$F940B2CB,$E6E65985,$6359E637,$0E0E367E,$70360E12,$1F1F63E7,$F8631F21, |
$6262F755,$37F762A6,$D4D4A33A,$EEA3D461,$A8A83281,$2932A8E5,$9696F452,$C4F496A7, |
$F9F93A62,$9B3AF916,$C5C5F6A3,$66F6C552,$2525B110,$35B1256F,$595920AB,$F22059EB, |
$8484AED0,$54AE8491,$7272A7C5,$B7A77296,$3939DDEC,$D5DD394B,$4C4C6116,$5A614CD4, |
$5E5E3B94,$CA3B5EE2,$7878859F,$E7857888,$3838D8E5,$DDD83848,$8C8C8698,$14868C89, |
$D1D1B217,$C6B2D16E,$A5A50BE4,$410BA5F2,$E2E24DA1,$434DE23B,$6161F84E,$2FF861A3, |
$B3B34542,$F145B3C8,$2121A534,$15A52163,$9C9CD608,$94D69CB9,$1E1E66EE,$F0661E22, |
$43435261,$225243C5,$C7C7FCB1,$76FCC754,$FCFC2B4F,$B32BFC19,$04041424,$2014040C, |
$515108E3,$B20851F3,$9999C725,$BCC799B6,$6D6DC422,$4FC46DB7,$0D0D3965,$68390D17, |
$FAFA3579,$8335FA13,$DFDF8469,$B684DF7C,$7E7E9BA9,$D79B7E82,$2424B419,$3DB4246C, |
$3B3BD7FE,$C5D73B4D,$ABAB3D9A,$313DABE0,$CECED1F0,$3ED1CE4F,$11115599,$88551133, |
$8F8F8983,$0C898F8C,$4E4E6B04,$4A6B4ED2,$B7B75166,$D151B7C4,$EBEB60E0,$0B60EB20, |
$3C3CCCC1,$FDCC3C44,$8181BFFD,$7CBF819E,$9494FE40,$D4FE94A1,$F7F70C1C,$EB0CF704, |
$B9B96718,$A167B9D6,$13135F8B,$985F1335,$2C2C9C51,$7D9C2C74,$D3D3B805,$D6B8D368, |
$E7E75C8C,$6B5CE734,$6E6ECB39,$57CB6EB2,$C4C4F3AA,$6EF3C451,$03030F1B,$180F0305, |
$565613DC,$8A1356FA,$4444495E,$1A4944CC,$7F7F9EA0,$DF9E7F81,$A9A93788,$2137A9E6, |
$2A2A8267,$4D822A7E,$BBBB6D0A,$B16DBBD0,$C1C1E287,$46E2C15E,$535302F1,$A20253F5, |
$DCDC8B72,$AE8BDC79,$0B0B2753,$58270B1D,$9D9DD301,$9CD39DBA,$6C6CC12B,$47C16CB4, |
$3131F5A4,$95F53153,$7474B9F3,$87B9749C,$F6F60915,$E309F607,$4646434C,$0A4346CA, |
$ACAC26A5,$0926ACE9,$898997B5,$3C978986,$141444B4,$A044143C,$E1E142BA,$5B42E13E, |
$16164EA6,$B04E163A,$3A3AD2F7,$CDD23A4E,$6969D006,$6FD069BB,$09092D41,$482D091B, |
$7070ADD7,$A7AD7090,$B6B6546F,$D954B6C7,$D0D0B71E,$CEB7D06D,$EDED7ED6,$3B7EED2A, |
$CCCCDBE2,$2EDBCC49,$42425768,$2A5742C6,$9898C22C,$B4C298B5,$A4A40EED,$490EA4F1, |
$28288875,$5D882878,$5C5C3186,$DA315CE4,$F8F83F6B,$933FF815,$8686A4C2,$44A48697), |
($1878D8C0,$78182818,$23AF2605,$AF236523,$C6F9B87E,$F9C657C6,$E86FFB13,$6FE825E8, |
$87A1CB4C,$A1879487,$B86211A9,$62B8D5B8,$01050908,$05010301,$4F6E0D42,$6E4FD14F, |
$36EE9BAD,$EE365A36,$A604FF59,$04A6F7A6,$D2BD0CDE,$BDD26BD2,$F5060EFB,$06F502F5, |
$798096EF,$80798B79,$6FCE305F,$CE6FB16F,$91EF6DFC,$EF91AE91,$5207F8AA,$0752F652, |
$60FD4727,$FD60A060,$BC763589,$76BCD9BC,$9BCD37AC,$CD9BB09B,$8E8C8A04,$8C8E8F8E, |
$A315D271,$15A3F8A3,$0C3C6C60,$3C0C140C,$7B8A84FF,$8A7B8D7B,$35E180B5,$E1355F35, |
$1D69F5E8,$691D271D,$E047B353,$47E03DE0,$D7AC21F6,$ACD764D7,$C2ED9C5E,$EDC25BC2, |
$2E96436D,$962E722E,$4B7A2962,$7A4BDD4B,$FE215DA3,$21FE1FFE,$5716D582,$1657F957, |
$1541BDA8,$41153F15,$77B6E89F,$B6779977,$37EB92A5,$EB375937,$E5569E7B,$56E532E5, |
$9FD9138C,$D99FBC9F,$F01723D3,$17F00DF0,$4A7F206A,$7F4ADE4A,$DA95449E,$95DA73DA, |
$5825A2FA,$2558E858,$C9CACF06,$CAC946C9,$298D7C55,$8D297B29,$0A225A50,$220A1E0A, |
$B14F50E1,$4FB1CEB1,$A01AC969,$1AA0FDA0,$6BDA147F,$DA6BBD6B,$85ABD95C,$AB859285, |
$BD733C81,$73BDDABD,$5D348FD2,$345DE75D,$10509080,$50103010,$F40307F3,$03F401F4, |
$CBC0DD16,$C0CB40CB,$3EC6D3ED,$C63E423E,$05112D28,$11050F05,$67E6781F,$E667A967, |
$E4539773,$53E431E4,$27BB0225,$BB276927,$41587332,$5841C341,$8B9DA72C,$9D8B808B, |
$A701F651,$01A7F4A7,$7D94B2CF,$947D877D,$95FB49DC,$FB95A295,$D89F568E,$9FD875D8, |
$FB30708B,$30FB10FB,$EE71CD23,$71EE2FEE,$7C91BBC7,$917C847C,$66E37117,$E366AA66, |
$DD8E7BA6,$8EDD7ADD,$174BAFB8,$4B173917,$47464502,$4647C947,$9EDC1A84,$DC9EBF9E, |
$CAC5D41E,$C5CA43CA,$2D995875,$992D772D,$BF792E91,$79BFDCBF,$071B3F38,$1B070907, |
$AD23AC01,$23ADEAAD,$5A2FB0EA,$2F5AEE5A,$83B5EF6C,$B5839883,$33FFB685,$FF335533, |
$63F25C3F,$F263A563,$020A1210,$0A020602,$AA389339,$38AAE3AA,$71A8DEAF,$A8719371, |
$C8CFC60E,$CFC845C8,$197DD1C8,$7D192B19,$49703B72,$7049DB49,$D99A5F86,$9AD976D9, |
$F21D31C3,$1DF20BF2,$E348A84B,$48E338E3,$5B2AB9E2,$2A5BED5B,$8892BC34,$92888588, |
$9AC83EA4,$C89AB39A,$26BE0B2D,$BE266A26,$32FABF8D,$FA325632,$B04A59E9,$4AB0CDB0, |
$E96AF21B,$6AE926E9,$0F337778,$330F110F,$D5A633E6,$A6D562D5,$80BAF474,$BA809D80, |
$BE7C2799,$7CBEDFBE,$CDDEEB26,$DECD4ACD,$34E489BD,$E4345C34,$4875327A,$7548D848, |
$FF2454AB,$24FF1CFF,$7A8F8DF7,$8F7A8E7A,$90EA64F4,$EA90AD90,$5F3E9DC2,$3E5FE15F, |
$20A03D1D,$A0206020,$68D50F67,$D568B868,$1A72CAD0,$721A2E1A,$AE2CB719,$2CAEEFAE, |
$B45E7DC9,$5EB4C1B4,$5419CE9A,$1954FC54,$93E57FEC,$E593A893,$22AA2F0D,$AA226622, |
$64E96307,$E964AC64,$F1122ADB,$12F10EF1,$73A2CCBF,$A2739573,$125A8290,$5A123612, |
$405D7A3A,$5D40C040,$08284840,$28081808,$C3E89556,$E8C358C3,$EC7BDF33,$7BEC29EC, |
$DB904D96,$90DB70DB,$A11FC061,$1FA1FEA1,$8D83911C,$838D8A8D,$3DC9C8F5,$C93D473D, |
$97F15BCC,$F197A497,$00000000,$00000000,$CFD4F936,$D4CF4CCF,$2B876E45,$872B7D2B, |
$76B3E197,$B3769A76,$82B0E664,$B0829B82,$D6A928FE,$A9D667D6,$1B77C3D8,$771B2D1B, |
$B55B74C1,$5BB5C2B5,$AF29BE11,$29AFECAF,$6ADF1D77,$DF6ABE6A,$500DEABA,$0D50F050, |
$454C5712,$4C45CF45,$F31838CB,$18F308F3,$30F0AD9D,$F0305030,$EF74C42B,$74EF2CEF, |
$3FC3DAE5,$C33F413F,$551CC792,$1C55FF55,$A210DB79,$10A2FBA2,$EA65E903,$65EA23EA, |
$65EC6A0F,$EC65AF65,$BA6803B9,$68BAD3BA,$2F934A65,$932F712F,$C0E78E4E,$E7C05DC0, |
$DE8160BE,$81DE7FDE,$1C6CFCE0,$6C1C241C,$FD2E46BB,$2EFD1AFD,$4D641F52,$644DD74D, |
$92E076E4,$E092AB92,$75BCFA8F,$BC759F75,$061E3630,$1E060A06,$8A98AE24,$988A838A, |
$B2404BF9,$40B2CBB2,$E6598563,$59E637E6,$0E367E70,$360E120E,$1F63E7F8,$631F211F, |
$62F75537,$F762A662,$D4A33AEE,$A3D461D4,$A8328129,$32A8E5A8,$96F452C4,$F496A796, |
$F93A629B,$3AF916F9,$C5F6A366,$F6C552C5,$25B11035,$B1256F25,$5920ABF2,$2059EB59, |
$84AED054,$AE849184,$72A7C5B7,$A7729672,$39DDECD5,$DD394B39,$4C61165A,$614CD44C, |
$5E3B94CA,$3B5EE25E,$78859FE7,$85788878,$38D8E5DD,$D8384838,$8C869814,$868C898C, |
$D1B217C6,$B2D16ED1,$A50BE441,$0BA5F2A5,$E24DA143,$4DE23BE2,$61F84E2F,$F861A361, |
$B34542F1,$45B3C8B3,$21A53415,$A5216321,$9CD60894,$D69CB99C,$1E66EEF0,$661E221E, |
$43526122,$5243C543,$C7FCB176,$FCC754C7,$FC2B4FB3,$2BFC19FC,$04142420,$14040C04, |
$5108E3B2,$0851F351,$99C725BC,$C799B699,$6DC4224F,$C46DB76D,$0D396568,$390D170D, |
$FA357983,$35FA13FA,$DF8469B6,$84DF7CDF,$7E9BA9D7,$9B7E827E,$24B4193D,$B4246C24, |
$3BD7FEC5,$D73B4D3B,$AB3D9A31,$3DABE0AB,$CED1F03E,$D1CE4FCE,$11559988,$55113311, |
$8F89830C,$898F8C8F,$4E6B044A,$6B4ED24E,$B75166D1,$51B7C4B7,$EB60E00B,$60EB20EB, |
$3CCCC1FD,$CC3C443C,$81BFFD7C,$BF819E81,$94FE40D4,$FE94A194,$F70C1CEB,$0CF704F7, |
$B96718A1,$67B9D6B9,$135F8B98,$5F133513,$2C9C517D,$9C2C742C,$D3B805D6,$B8D368D3, |
$E75C8C6B,$5CE734E7,$6ECB3957,$CB6EB26E,$C4F3AA6E,$F3C451C4,$030F1B18,$0F030503, |
$5613DC8A,$1356FA56,$44495E1A,$4944CC44,$7F9EA0DF,$9E7F817F,$A9378821,$37A9E6A9, |
$2A82674D,$822A7E2A,$BB6D0AB1,$6DBBD0BB,$C1E28746,$E2C15EC1,$5302F1A2,$0253F553, |
$DC8B72AE,$8BDC79DC,$0B275358,$270B1D0B,$9DD3019C,$D39DBA9D,$6CC12B47,$C16CB46C, |
$31F5A495,$F5315331,$74B9F387,$B9749C74,$F60915E3,$09F607F6,$46434C0A,$4346CA46, |
$AC26A509,$26ACE9AC,$8997B53C,$97898689,$1444B4A0,$44143C14,$E142BA5B,$42E13EE1, |
$164EA6B0,$4E163A16,$3AD2F7CD,$D23A4E3A,$69D0066F,$D069BB69,$092D4148,$2D091B09, |
$70ADD7A7,$AD709070,$B6546FD9,$54B6C7B6,$D0B71ECE,$B7D06DD0,$ED7ED63B,$7EED2AED, |
$CCDBE22E,$DBCC49CC,$4257682A,$5742C642,$98C22CB4,$C298B598,$A40EED49,$0EA4F1A4, |
$2888755D,$88287828,$5C3186DA,$315CE45C,$F83F6B93,$3FF815F8,$86A4C244,$A4869786), |
($78D8C078,$18281818,$AF2605AF,$23652323,$F9B87EF9,$C657C6C6,$6FFB136F,$E825E8E8, |
$A1CB4CA1,$87948787,$6211A962,$B8D5B8B8,$05090805,$01030101,$6E0D426E,$4FD14F4F, |
$EE9BADEE,$365A3636,$04FF5904,$A6F7A6A6,$BD0CDEBD,$D26BD2D2,$060EFB06,$F502F5F5, |
$8096EF80,$798B7979,$CE305FCE,$6FB16F6F,$EF6DFCEF,$91AE9191,$07F8AA07,$52F65252, |
$FD4727FD,$60A06060,$76358976,$BCD9BCBC,$CD37ACCD,$9BB09B9B,$8C8A048C,$8E8F8E8E, |
$15D27115,$A3F8A3A3,$3C6C603C,$0C140C0C,$8A84FF8A,$7B8D7B7B,$E180B5E1,$355F3535, |
$69F5E869,$1D271D1D,$47B35347,$E03DE0E0,$AC21F6AC,$D764D7D7,$ED9C5EED,$C25BC2C2, |
$96436D96,$2E722E2E,$7A29627A,$4BDD4B4B,$215DA321,$FE1FFEFE,$16D58216,$57F95757, |
$41BDA841,$153F1515,$B6E89FB6,$77997777,$EB92A5EB,$37593737,$569E7B56,$E532E5E5, |
$D9138CD9,$9FBC9F9F,$1723D317,$F00DF0F0,$7F206A7F,$4ADE4A4A,$95449E95,$DA73DADA, |
$25A2FA25,$58E85858,$CACF06CA,$C946C9C9,$8D7C558D,$297B2929,$225A5022,$0A1E0A0A, |
$4F50E14F,$B1CEB1B1,$1AC9691A,$A0FDA0A0,$DA147FDA,$6BBD6B6B,$ABD95CAB,$85928585, |
$733C8173,$BDDABDBD,$348FD234,$5DE75D5D,$50908050,$10301010,$0307F303,$F401F4F4, |
$C0DD16C0,$CB40CBCB,$C6D3EDC6,$3E423E3E,$112D2811,$050F0505,$E6781FE6,$67A96767, |
$53977353,$E431E4E4,$BB0225BB,$27692727,$58733258,$41C34141,$9DA72C9D,$8B808B8B, |
$01F65101,$A7F4A7A7,$94B2CF94,$7D877D7D,$FB49DCFB,$95A29595,$9F568E9F,$D875D8D8, |
$30708B30,$FB10FBFB,$71CD2371,$EE2FEEEE,$91BBC791,$7C847C7C,$E37117E3,$66AA6666, |
$8E7BA68E,$DD7ADDDD,$4BAFB84B,$17391717,$46450246,$47C94747,$DC1A84DC,$9EBF9E9E, |
$C5D41EC5,$CA43CACA,$99587599,$2D772D2D,$792E9179,$BFDCBFBF,$1B3F381B,$07090707, |
$23AC0123,$ADEAADAD,$2FB0EA2F,$5AEE5A5A,$B5EF6CB5,$83988383,$FFB685FF,$33553333, |
$F25C3FF2,$63A56363,$0A12100A,$02060202,$38933938,$AAE3AAAA,$A8DEAFA8,$71937171, |
$CFC60ECF,$C845C8C8,$7DD1C87D,$192B1919,$703B7270,$49DB4949,$9A5F869A,$D976D9D9, |
$1D31C31D,$F20BF2F2,$48A84B48,$E338E3E3,$2AB9E22A,$5BED5B5B,$92BC3492,$88858888, |
$C83EA4C8,$9AB39A9A,$BE0B2DBE,$266A2626,$FABF8DFA,$32563232,$4A59E94A,$B0CDB0B0, |
$6AF21B6A,$E926E9E9,$33777833,$0F110F0F,$A633E6A6,$D562D5D5,$BAF474BA,$809D8080, |
$7C27997C,$BEDFBEBE,$DEEB26DE,$CD4ACDCD,$E489BDE4,$345C3434,$75327A75,$48D84848, |
$2454AB24,$FF1CFFFF,$8F8DF78F,$7A8E7A7A,$EA64F4EA,$90AD9090,$3E9DC23E,$5FE15F5F, |
$A03D1DA0,$20602020,$D50F67D5,$68B86868,$72CAD072,$1A2E1A1A,$2CB7192C,$AEEFAEAE, |
$5E7DC95E,$B4C1B4B4,$19CE9A19,$54FC5454,$E57FECE5,$93A89393,$AA2F0DAA,$22662222, |
$E96307E9,$64AC6464,$122ADB12,$F10EF1F1,$A2CCBFA2,$73957373,$5A82905A,$12361212, |
$5D7A3A5D,$40C04040,$28484028,$08180808,$E89556E8,$C358C3C3,$7BDF337B,$EC29ECEC, |
$904D9690,$DB70DBDB,$1FC0611F,$A1FEA1A1,$83911C83,$8D8A8D8D,$C9C8F5C9,$3D473D3D, |
$F15BCCF1,$97A49797,$00000000,$00000000,$D4F936D4,$CF4CCFCF,$876E4587,$2B7D2B2B, |
$B3E197B3,$769A7676,$B0E664B0,$829B8282,$A928FEA9,$D667D6D6,$77C3D877,$1B2D1B1B, |
$5B74C15B,$B5C2B5B5,$29BE1129,$AFECAFAF,$DF1D77DF,$6ABE6A6A,$0DEABA0D,$50F05050, |
$4C57124C,$45CF4545,$1838CB18,$F308F3F3,$F0AD9DF0,$30503030,$74C42B74,$EF2CEFEF, |
$C3DAE5C3,$3F413F3F,$1CC7921C,$55FF5555,$10DB7910,$A2FBA2A2,$65E90365,$EA23EAEA, |
$EC6A0FEC,$65AF6565,$6803B968,$BAD3BABA,$934A6593,$2F712F2F,$E78E4EE7,$C05DC0C0, |
$8160BE81,$DE7FDEDE,$6CFCE06C,$1C241C1C,$2E46BB2E,$FD1AFDFD,$641F5264,$4DD74D4D, |
$E076E4E0,$92AB9292,$BCFA8FBC,$759F7575,$1E36301E,$060A0606,$98AE2498,$8A838A8A, |
$404BF940,$B2CBB2B2,$59856359,$E637E6E6,$367E7036,$0E120E0E,$63E7F863,$1F211F1F, |
$F75537F7,$62A66262,$A33AEEA3,$D461D4D4,$32812932,$A8E5A8A8,$F452C4F4,$96A79696, |
$3A629B3A,$F916F9F9,$F6A366F6,$C552C5C5,$B11035B1,$256F2525,$20ABF220,$59EB5959, |
$AED054AE,$84918484,$A7C5B7A7,$72967272,$DDECD5DD,$394B3939,$61165A61,$4CD44C4C, |
$3B94CA3B,$5EE25E5E,$859FE785,$78887878,$D8E5DDD8,$38483838,$86981486,$8C898C8C, |
$B217C6B2,$D16ED1D1,$0BE4410B,$A5F2A5A5,$4DA1434D,$E23BE2E2,$F84E2FF8,$61A36161, |
$4542F145,$B3C8B3B3,$A53415A5,$21632121,$D60894D6,$9CB99C9C,$66EEF066,$1E221E1E, |
$52612252,$43C54343,$FCB176FC,$C754C7C7,$2B4FB32B,$FC19FCFC,$14242014,$040C0404, |
$08E3B208,$51F35151,$C725BCC7,$99B69999,$C4224FC4,$6DB76D6D,$39656839,$0D170D0D, |
$35798335,$FA13FAFA,$8469B684,$DF7CDFDF,$9BA9D79B,$7E827E7E,$B4193DB4,$246C2424, |
$D7FEC5D7,$3B4D3B3B,$3D9A313D,$ABE0ABAB,$D1F03ED1,$CE4FCECE,$55998855,$11331111, |
$89830C89,$8F8C8F8F,$6B044A6B,$4ED24E4E,$5166D151,$B7C4B7B7,$60E00B60,$EB20EBEB, |
$CCC1FDCC,$3C443C3C,$BFFD7CBF,$819E8181,$FE40D4FE,$94A19494,$0C1CEB0C,$F704F7F7, |
$6718A167,$B9D6B9B9,$5F8B985F,$13351313,$9C517D9C,$2C742C2C,$B805D6B8,$D368D3D3, |
$5C8C6B5C,$E734E7E7,$CB3957CB,$6EB26E6E,$F3AA6EF3,$C451C4C4,$0F1B180F,$03050303, |
$13DC8A13,$56FA5656,$495E1A49,$44CC4444,$9EA0DF9E,$7F817F7F,$37882137,$A9E6A9A9, |
$82674D82,$2A7E2A2A,$6D0AB16D,$BBD0BBBB,$E28746E2,$C15EC1C1,$02F1A202,$53F55353, |
$8B72AE8B,$DC79DCDC,$27535827,$0B1D0B0B,$D3019CD3,$9DBA9D9D,$C12B47C1,$6CB46C6C, |
$F5A495F5,$31533131,$B9F387B9,$749C7474,$0915E309,$F607F6F6,$434C0A43,$46CA4646, |
$26A50926,$ACE9ACAC,$97B53C97,$89868989,$44B4A044,$143C1414,$42BA5B42,$E13EE1E1, |
$4EA6B04E,$163A1616,$D2F7CDD2,$3A4E3A3A,$D0066FD0,$69BB6969,$2D41482D,$091B0909, |
$ADD7A7AD,$70907070,$546FD954,$B6C7B6B6,$B71ECEB7,$D06DD0D0,$7ED63B7E,$ED2AEDED, |
$DBE22EDB,$CC49CCCC,$57682A57,$42C64242,$C22CB4C2,$98B59898,$0EED490E,$A4F1A4A4, |
$88755D88,$28782828,$3186DA31,$5CE45C5C,$3F6B933F,$F815F8F8,$A4C244A4,$86978686), |
($D8C07818,$28181878,$2605AF23,$652323AF,$B87EF9C6,$57C6C6F9,$FB136FE8,$25E8E86F, |
$CB4CA187,$948787A1,$11A962B8,$D5B8B862,$09080501,$03010105,$0D426E4F,$D14F4F6E, |
$9BADEE36,$5A3636EE,$FF5904A6,$F7A6A604,$0CDEBDD2,$6BD2D2BD,$0EFB06F5,$02F5F506, |
$96EF8079,$8B797980,$305FCE6F,$B16F6FCE,$6DFCEF91,$AE9191EF,$F8AA0752,$F6525207, |
$4727FD60,$A06060FD,$358976BC,$D9BCBC76,$37ACCD9B,$B09B9BCD,$8A048C8E,$8F8E8E8C, |
$D27115A3,$F8A3A315,$6C603C0C,$140C0C3C,$84FF8A7B,$8D7B7B8A,$80B5E135,$5F3535E1, |
$F5E8691D,$271D1D69,$B35347E0,$3DE0E047,$21F6ACD7,$64D7D7AC,$9C5EEDC2,$5BC2C2ED, |
$436D962E,$722E2E96,$29627A4B,$DD4B4B7A,$5DA321FE,$1FFEFE21,$D5821657,$F9575716, |
$BDA84115,$3F151541,$E89FB677,$997777B6,$92A5EB37,$593737EB,$9E7B56E5,$32E5E556, |
$138CD99F,$BC9F9FD9,$23D317F0,$0DF0F017,$206A7F4A,$DE4A4A7F,$449E95DA,$73DADA95, |
$A2FA2558,$E8585825,$CF06CAC9,$46C9C9CA,$7C558D29,$7B29298D,$5A50220A,$1E0A0A22, |
$50E14FB1,$CEB1B14F,$C9691AA0,$FDA0A01A,$147FDA6B,$BD6B6BDA,$D95CAB85,$928585AB, |
$3C8173BD,$DABDBD73,$8FD2345D,$E75D5D34,$90805010,$30101050,$07F303F4,$01F4F403, |
$DD16C0CB,$40CBCBC0,$D3EDC63E,$423E3EC6,$2D281105,$0F050511,$781FE667,$A96767E6, |
$977353E4,$31E4E453,$0225BB27,$692727BB,$73325841,$C3414158,$A72C9D8B,$808B8B9D, |
$F65101A7,$F4A7A701,$B2CF947D,$877D7D94,$49DCFB95,$A29595FB,$568E9FD8,$75D8D89F, |
$708B30FB,$10FBFB30,$CD2371EE,$2FEEEE71,$BBC7917C,$847C7C91,$7117E366,$AA6666E3, |
$7BA68EDD,$7ADDDD8E,$AFB84B17,$3917174B,$45024647,$C9474746,$1A84DC9E,$BF9E9EDC, |
$D41EC5CA,$43CACAC5,$5875992D,$772D2D99,$2E9179BF,$DCBFBF79,$3F381B07,$0907071B, |
$AC0123AD,$EAADAD23,$B0EA2F5A,$EE5A5A2F,$EF6CB583,$988383B5,$B685FF33,$553333FF, |
$5C3FF263,$A56363F2,$12100A02,$0602020A,$933938AA,$E3AAAA38,$DEAFA871,$937171A8, |
$C60ECFC8,$45C8C8CF,$D1C87D19,$2B19197D,$3B727049,$DB494970,$5F869AD9,$76D9D99A, |
$31C31DF2,$0BF2F21D,$A84B48E3,$38E3E348,$B9E22A5B,$ED5B5B2A,$BC349288,$85888892, |
$3EA4C89A,$B39A9AC8,$0B2DBE26,$6A2626BE,$BF8DFA32,$563232FA,$59E94AB0,$CDB0B04A, |
$F21B6AE9,$26E9E96A,$7778330F,$110F0F33,$33E6A6D5,$62D5D5A6,$F474BA80,$9D8080BA, |
$27997CBE,$DFBEBE7C,$EB26DECD,$4ACDCDDE,$89BDE434,$5C3434E4,$327A7548,$D8484875, |
$54AB24FF,$1CFFFF24,$8DF78F7A,$8E7A7A8F,$64F4EA90,$AD9090EA,$9DC23E5F,$E15F5F3E, |
$3D1DA020,$602020A0,$0F67D568,$B86868D5,$CAD0721A,$2E1A1A72,$B7192CAE,$EFAEAE2C, |
$7DC95EB4,$C1B4B45E,$CE9A1954,$FC545419,$7FECE593,$A89393E5,$2F0DAA22,$662222AA, |
$6307E964,$AC6464E9,$2ADB12F1,$0EF1F112,$CCBFA273,$957373A2,$82905A12,$3612125A, |
$7A3A5D40,$C040405D,$48402808,$18080828,$9556E8C3,$58C3C3E8,$DF337BEC,$29ECEC7B, |
$4D9690DB,$70DBDB90,$C0611FA1,$FEA1A11F,$911C838D,$8A8D8D83,$C8F5C93D,$473D3DC9, |
$5BCCF197,$A49797F1,$00000000,$00000000,$F936D4CF,$4CCFCFD4,$6E45872B,$7D2B2B87, |
$E197B376,$9A7676B3,$E664B082,$9B8282B0,$28FEA9D6,$67D6D6A9,$C3D8771B,$2D1B1B77, |
$74C15BB5,$C2B5B55B,$BE1129AF,$ECAFAF29,$1D77DF6A,$BE6A6ADF,$EABA0D50,$F050500D, |
$57124C45,$CF45454C,$38CB18F3,$08F3F318,$AD9DF030,$503030F0,$C42B74EF,$2CEFEF74, |
$DAE5C33F,$413F3FC3,$C7921C55,$FF55551C,$DB7910A2,$FBA2A210,$E90365EA,$23EAEA65, |
$6A0FEC65,$AF6565EC,$03B968BA,$D3BABA68,$4A65932F,$712F2F93,$8E4EE7C0,$5DC0C0E7, |
$60BE81DE,$7FDEDE81,$FCE06C1C,$241C1C6C,$46BB2EFD,$1AFDFD2E,$1F52644D,$D74D4D64, |
$76E4E092,$AB9292E0,$FA8FBC75,$9F7575BC,$36301E06,$0A06061E,$AE24988A,$838A8A98, |
$4BF940B2,$CBB2B240,$856359E6,$37E6E659,$7E70360E,$120E0E36,$E7F8631F,$211F1F63, |
$5537F762,$A66262F7,$3AEEA3D4,$61D4D4A3,$812932A8,$E5A8A832,$52C4F496,$A79696F4, |
$629B3AF9,$16F9F93A,$A366F6C5,$52C5C5F6,$1035B125,$6F2525B1,$ABF22059,$EB595920, |
$D054AE84,$918484AE,$C5B7A772,$967272A7,$ECD5DD39,$4B3939DD,$165A614C,$D44C4C61, |
$94CA3B5E,$E25E5E3B,$9FE78578,$88787885,$E5DDD838,$483838D8,$9814868C,$898C8C86, |
$17C6B2D1,$6ED1D1B2,$E4410BA5,$F2A5A50B,$A1434DE2,$3BE2E24D,$4E2FF861,$A36161F8, |
$42F145B3,$C8B3B345,$3415A521,$632121A5,$0894D69C,$B99C9CD6,$EEF0661E,$221E1E66, |
$61225243,$C5434352,$B176FCC7,$54C7C7FC,$4FB32BFC,$19FCFC2B,$24201404,$0C040414, |
$E3B20851,$F3515108,$25BCC799,$B69999C7,$224FC46D,$B76D6DC4,$6568390D,$170D0D39, |
$798335FA,$13FAFA35,$69B684DF,$7CDFDF84,$A9D79B7E,$827E7E9B,$193DB424,$6C2424B4, |
$FEC5D73B,$4D3B3BD7,$9A313DAB,$E0ABAB3D,$F03ED1CE,$4FCECED1,$99885511,$33111155, |
$830C898F,$8C8F8F89,$044A6B4E,$D24E4E6B,$66D151B7,$C4B7B751,$E00B60EB,$20EBEB60, |
$C1FDCC3C,$443C3CCC,$FD7CBF81,$9E8181BF,$40D4FE94,$A19494FE,$1CEB0CF7,$04F7F70C, |
$18A167B9,$D6B9B967,$8B985F13,$3513135F,$517D9C2C,$742C2C9C,$05D6B8D3,$68D3D3B8, |
$8C6B5CE7,$34E7E75C,$3957CB6E,$B26E6ECB,$AA6EF3C4,$51C4C4F3,$1B180F03,$0503030F, |
$DC8A1356,$FA565613,$5E1A4944,$CC444449,$A0DF9E7F,$817F7F9E,$882137A9,$E6A9A937, |
$674D822A,$7E2A2A82,$0AB16DBB,$D0BBBB6D,$8746E2C1,$5EC1C1E2,$F1A20253,$F5535302, |
$72AE8BDC,$79DCDC8B,$5358270B,$1D0B0B27,$019CD39D,$BA9D9DD3,$2B47C16C,$B46C6CC1, |
$A495F531,$533131F5,$F387B974,$9C7474B9,$15E309F6,$07F6F609,$4C0A4346,$CA464643, |
$A50926AC,$E9ACAC26,$B53C9789,$86898997,$B4A04414,$3C141444,$BA5B42E1,$3EE1E142, |
$A6B04E16,$3A16164E,$F7CDD23A,$4E3A3AD2,$066FD069,$BB6969D0,$41482D09,$1B09092D, |
$D7A7AD70,$907070AD,$6FD954B6,$C7B6B654,$1ECEB7D0,$6DD0D0B7,$D63B7EED,$2AEDED7E, |
$E22EDBCC,$49CCCCDB,$682A5742,$C6424257,$2CB4C298,$B59898C2,$ED490EA4,$F1A4A40E, |
$755D8828,$78282888,$86DA315C,$E45C5C31,$6B933FF8,$15F8F83F,$C244A486,$978686A4), |
($C0781828,$181878D8,$05AF2365,$2323AF26,$7EF9C657,$C6C6F9B8,$136FE825,$E8E86FFB, |
$4CA18794,$8787A1CB,$A962B8D5,$B8B86211,$08050103,$01010509,$426E4FD1,$4F4F6E0D, |
$ADEE365A,$3636EE9B,$5904A6F7,$A6A604FF,$DEBDD26B,$D2D2BD0C,$FB06F502,$F5F5060E, |
$EF80798B,$79798096,$5FCE6FB1,$6F6FCE30,$FCEF91AE,$9191EF6D,$AA0752F6,$525207F8, |
$27FD60A0,$6060FD47,$8976BCD9,$BCBC7635,$ACCD9BB0,$9B9BCD37,$048C8E8F,$8E8E8C8A, |
$7115A3F8,$A3A315D2,$603C0C14,$0C0C3C6C,$FF8A7B8D,$7B7B8A84,$B5E1355F,$3535E180, |
$E8691D27,$1D1D69F5,$5347E03D,$E0E047B3,$F6ACD764,$D7D7AC21,$5EEDC25B,$C2C2ED9C, |
$6D962E72,$2E2E9643,$627A4BDD,$4B4B7A29,$A321FE1F,$FEFE215D,$821657F9,$575716D5, |
$A841153F,$151541BD,$9FB67799,$7777B6E8,$A5EB3759,$3737EB92,$7B56E532,$E5E5569E, |
$8CD99FBC,$9F9FD913,$D317F00D,$F0F01723,$6A7F4ADE,$4A4A7F20,$9E95DA73,$DADA9544, |
$FA2558E8,$585825A2,$06CAC946,$C9C9CACF,$558D297B,$29298D7C,$50220A1E,$0A0A225A, |
$E14FB1CE,$B1B14F50,$691AA0FD,$A0A01AC9,$7FDA6BBD,$6B6BDA14,$5CAB8592,$8585ABD9, |
$8173BDDA,$BDBD733C,$D2345DE7,$5D5D348F,$80501030,$10105090,$F303F401,$F4F40307, |
$16C0CB40,$CBCBC0DD,$EDC63E42,$3E3EC6D3,$2811050F,$0505112D,$1FE667A9,$6767E678, |
$7353E431,$E4E45397,$25BB2769,$2727BB02,$325841C3,$41415873,$2C9D8B80,$8B8B9DA7, |
$5101A7F4,$A7A701F6,$CF947D87,$7D7D94B2,$DCFB95A2,$9595FB49,$8E9FD875,$D8D89F56, |
$8B30FB10,$FBFB3070,$2371EE2F,$EEEE71CD,$C7917C84,$7C7C91BB,$17E366AA,$6666E371, |
$A68EDD7A,$DDDD8E7B,$B84B1739,$17174BAF,$024647C9,$47474645,$84DC9EBF,$9E9EDC1A, |
$1EC5CA43,$CACAC5D4,$75992D77,$2D2D9958,$9179BFDC,$BFBF792E,$381B0709,$07071B3F, |
$0123ADEA,$ADAD23AC,$EA2F5AEE,$5A5A2FB0,$6CB58398,$8383B5EF,$85FF3355,$3333FFB6, |
$3FF263A5,$6363F25C,$100A0206,$02020A12,$3938AAE3,$AAAA3893,$AFA87193,$7171A8DE, |
$0ECFC845,$C8C8CFC6,$C87D192B,$19197DD1,$727049DB,$4949703B,$869AD976,$D9D99A5F, |
$C31DF20B,$F2F21D31,$4B48E338,$E3E348A8,$E22A5BED,$5B5B2AB9,$34928885,$888892BC, |
$A4C89AB3,$9A9AC83E,$2DBE266A,$2626BE0B,$8DFA3256,$3232FABF,$E94AB0CD,$B0B04A59, |
$1B6AE926,$E9E96AF2,$78330F11,$0F0F3377,$E6A6D562,$D5D5A633,$74BA809D,$8080BAF4, |
$997CBEDF,$BEBE7C27,$26DECD4A,$CDCDDEEB,$BDE4345C,$3434E489,$7A7548D8,$48487532, |
$AB24FF1C,$FFFF2454,$F78F7A8E,$7A7A8F8D,$F4EA90AD,$9090EA64,$C23E5FE1,$5F5F3E9D, |
$1DA02060,$2020A03D,$67D568B8,$6868D50F,$D0721A2E,$1A1A72CA,$192CAEEF,$AEAE2CB7, |
$C95EB4C1,$B4B45E7D,$9A1954FC,$545419CE,$ECE593A8,$9393E57F,$0DAA2266,$2222AA2F, |
$07E964AC,$6464E963,$DB12F10E,$F1F1122A,$BFA27395,$7373A2CC,$905A1236,$12125A82, |
$3A5D40C0,$40405D7A,$40280818,$08082848,$56E8C358,$C3C3E895,$337BEC29,$ECEC7BDF, |
$9690DB70,$DBDB904D,$611FA1FE,$A1A11FC0,$1C838D8A,$8D8D8391,$F5C93D47,$3D3DC9C8, |
$CCF197A4,$9797F15B,$00000000,$00000000,$36D4CF4C,$CFCFD4F9,$45872B7D,$2B2B876E, |
$97B3769A,$7676B3E1,$64B0829B,$8282B0E6,$FEA9D667,$D6D6A928,$D8771B2D,$1B1B77C3, |
$C15BB5C2,$B5B55B74,$1129AFEC,$AFAF29BE,$77DF6ABE,$6A6ADF1D,$BA0D50F0,$50500DEA, |
$124C45CF,$45454C57,$CB18F308,$F3F31838,$9DF03050,$3030F0AD,$2B74EF2C,$EFEF74C4, |
$E5C33F41,$3F3FC3DA,$921C55FF,$55551CC7,$7910A2FB,$A2A210DB,$0365EA23,$EAEA65E9, |
$0FEC65AF,$6565EC6A,$B968BAD3,$BABA6803,$65932F71,$2F2F934A,$4EE7C05D,$C0C0E78E, |
$BE81DE7F,$DEDE8160,$E06C1C24,$1C1C6CFC,$BB2EFD1A,$FDFD2E46,$52644DD7,$4D4D641F, |
$E4E092AB,$9292E076,$8FBC759F,$7575BCFA,$301E060A,$06061E36,$24988A83,$8A8A98AE, |
$F940B2CB,$B2B2404B,$6359E637,$E6E65985,$70360E12,$0E0E367E,$F8631F21,$1F1F63E7, |
$37F762A6,$6262F755,$EEA3D461,$D4D4A33A,$2932A8E5,$A8A83281,$C4F496A7,$9696F452, |
$9B3AF916,$F9F93A62,$66F6C552,$C5C5F6A3,$35B1256F,$2525B110,$F22059EB,$595920AB, |
$54AE8491,$8484AED0,$B7A77296,$7272A7C5,$D5DD394B,$3939DDEC,$5A614CD4,$4C4C6116, |
$CA3B5EE2,$5E5E3B94,$E7857888,$7878859F,$DDD83848,$3838D8E5,$14868C89,$8C8C8698, |
$C6B2D16E,$D1D1B217,$410BA5F2,$A5A50BE4,$434DE23B,$E2E24DA1,$2FF861A3,$6161F84E, |
$F145B3C8,$B3B34542,$15A52163,$2121A534,$94D69CB9,$9C9CD608,$F0661E22,$1E1E66EE, |
$225243C5,$43435261,$76FCC754,$C7C7FCB1,$B32BFC19,$FCFC2B4F,$2014040C,$04041424, |
$B20851F3,$515108E3,$BCC799B6,$9999C725,$4FC46DB7,$6D6DC422,$68390D17,$0D0D3965, |
$8335FA13,$FAFA3579,$B684DF7C,$DFDF8469,$D79B7E82,$7E7E9BA9,$3DB4246C,$2424B419, |
$C5D73B4D,$3B3BD7FE,$313DABE0,$ABAB3D9A,$3ED1CE4F,$CECED1F0,$88551133,$11115599, |
$0C898F8C,$8F8F8983,$4A6B4ED2,$4E4E6B04,$D151B7C4,$B7B75166,$0B60EB20,$EBEB60E0, |
$FDCC3C44,$3C3CCCC1,$7CBF819E,$8181BFFD,$D4FE94A1,$9494FE40,$EB0CF704,$F7F70C1C, |
$A167B9D6,$B9B96718,$985F1335,$13135F8B,$7D9C2C74,$2C2C9C51,$D6B8D368,$D3D3B805, |
$6B5CE734,$E7E75C8C,$57CB6EB2,$6E6ECB39,$6EF3C451,$C4C4F3AA,$180F0305,$03030F1B, |
$8A1356FA,$565613DC,$1A4944CC,$4444495E,$DF9E7F81,$7F7F9EA0,$2137A9E6,$A9A93788, |
$4D822A7E,$2A2A8267,$B16DBBD0,$BBBB6D0A,$46E2C15E,$C1C1E287,$A20253F5,$535302F1, |
$AE8BDC79,$DCDC8B72,$58270B1D,$0B0B2753,$9CD39DBA,$9D9DD301,$47C16CB4,$6C6CC12B, |
$95F53153,$3131F5A4,$87B9749C,$7474B9F3,$E309F607,$F6F60915,$0A4346CA,$4646434C, |
$0926ACE9,$ACAC26A5,$3C978986,$898997B5,$A044143C,$141444B4,$5B42E13E,$E1E142BA, |
$B04E163A,$16164EA6,$CDD23A4E,$3A3AD2F7,$6FD069BB,$6969D006,$482D091B,$09092D41, |
$A7AD7090,$7070ADD7,$D954B6C7,$B6B6546F,$CEB7D06D,$D0D0B71E,$3B7EED2A,$EDED7ED6, |
$2EDBCC49,$CCCCDBE2,$2A5742C6,$42425768,$B4C298B5,$9898C22C,$490EA4F1,$A4A40EED, |
$5D882878,$28288875,$DA315CE4,$5C5C3186,$933FF815,$F8F83F6B,$44A48697,$8686A4C2), |
($78182818,$1878D8C0,$AF236523,$23AF2605,$F9C657C6,$C6F9B87E,$6FE825E8,$E86FFB13, |
$A1879487,$87A1CB4C,$62B8D5B8,$B86211A9,$05010301,$01050908,$6E4FD14F,$4F6E0D42, |
$EE365A36,$36EE9BAD,$04A6F7A6,$A604FF59,$BDD26BD2,$D2BD0CDE,$06F502F5,$F5060EFB, |
$80798B79,$798096EF,$CE6FB16F,$6FCE305F,$EF91AE91,$91EF6DFC,$0752F652,$5207F8AA, |
$FD60A060,$60FD4727,$76BCD9BC,$BC763589,$CD9BB09B,$9BCD37AC,$8C8E8F8E,$8E8C8A04, |
$15A3F8A3,$A315D271,$3C0C140C,$0C3C6C60,$8A7B8D7B,$7B8A84FF,$E1355F35,$35E180B5, |
$691D271D,$1D69F5E8,$47E03DE0,$E047B353,$ACD764D7,$D7AC21F6,$EDC25BC2,$C2ED9C5E, |
$962E722E,$2E96436D,$7A4BDD4B,$4B7A2962,$21FE1FFE,$FE215DA3,$1657F957,$5716D582, |
$41153F15,$1541BDA8,$B6779977,$77B6E89F,$EB375937,$37EB92A5,$56E532E5,$E5569E7B, |
$D99FBC9F,$9FD9138C,$17F00DF0,$F01723D3,$7F4ADE4A,$4A7F206A,$95DA73DA,$DA95449E, |
$2558E858,$5825A2FA,$CAC946C9,$C9CACF06,$8D297B29,$298D7C55,$220A1E0A,$0A225A50, |
$4FB1CEB1,$B14F50E1,$1AA0FDA0,$A01AC969,$DA6BBD6B,$6BDA147F,$AB859285,$85ABD95C, |
$73BDDABD,$BD733C81,$345DE75D,$5D348FD2,$50103010,$10509080,$03F401F4,$F40307F3, |
$C0CB40CB,$CBC0DD16,$C63E423E,$3EC6D3ED,$11050F05,$05112D28,$E667A967,$67E6781F, |
$53E431E4,$E4539773,$BB276927,$27BB0225,$5841C341,$41587332,$9D8B808B,$8B9DA72C, |
$01A7F4A7,$A701F651,$947D877D,$7D94B2CF,$FB95A295,$95FB49DC,$9FD875D8,$D89F568E, |
$30FB10FB,$FB30708B,$71EE2FEE,$EE71CD23,$917C847C,$7C91BBC7,$E366AA66,$66E37117, |
$8EDD7ADD,$DD8E7BA6,$4B173917,$174BAFB8,$4647C947,$47464502,$DC9EBF9E,$9EDC1A84, |
$C5CA43CA,$CAC5D41E,$992D772D,$2D995875,$79BFDCBF,$BF792E91,$1B070907,$071B3F38, |
$23ADEAAD,$AD23AC01,$2F5AEE5A,$5A2FB0EA,$B5839883,$83B5EF6C,$FF335533,$33FFB685, |
$F263A563,$63F25C3F,$0A020602,$020A1210,$38AAE3AA,$AA389339,$A8719371,$71A8DEAF, |
$CFC845C8,$C8CFC60E,$7D192B19,$197DD1C8,$7049DB49,$49703B72,$9AD976D9,$D99A5F86, |
$1DF20BF2,$F21D31C3,$48E338E3,$E348A84B,$2A5BED5B,$5B2AB9E2,$92888588,$8892BC34, |
$C89AB39A,$9AC83EA4,$BE266A26,$26BE0B2D,$FA325632,$32FABF8D,$4AB0CDB0,$B04A59E9, |
$6AE926E9,$E96AF21B,$330F110F,$0F337778,$A6D562D5,$D5A633E6,$BA809D80,$80BAF474, |
$7CBEDFBE,$BE7C2799,$DECD4ACD,$CDDEEB26,$E4345C34,$34E489BD,$7548D848,$4875327A, |
$24FF1CFF,$FF2454AB,$8F7A8E7A,$7A8F8DF7,$EA90AD90,$90EA64F4,$3E5FE15F,$5F3E9DC2, |
$A0206020,$20A03D1D,$D568B868,$68D50F67,$721A2E1A,$1A72CAD0,$2CAEEFAE,$AE2CB719, |
$5EB4C1B4,$B45E7DC9,$1954FC54,$5419CE9A,$E593A893,$93E57FEC,$AA226622,$22AA2F0D, |
$E964AC64,$64E96307,$12F10EF1,$F1122ADB,$A2739573,$73A2CCBF,$5A123612,$125A8290, |
$5D40C040,$405D7A3A,$28081808,$08284840,$E8C358C3,$C3E89556,$7BEC29EC,$EC7BDF33, |
$90DB70DB,$DB904D96,$1FA1FEA1,$A11FC061,$838D8A8D,$8D83911C,$C93D473D,$3DC9C8F5, |
$F197A497,$97F15BCC,$00000000,$00000000,$D4CF4CCF,$CFD4F936,$872B7D2B,$2B876E45, |
$B3769A76,$76B3E197,$B0829B82,$82B0E664,$A9D667D6,$D6A928FE,$771B2D1B,$1B77C3D8, |
$5BB5C2B5,$B55B74C1,$29AFECAF,$AF29BE11,$DF6ABE6A,$6ADF1D77,$0D50F050,$500DEABA, |
$4C45CF45,$454C5712,$18F308F3,$F31838CB,$F0305030,$30F0AD9D,$74EF2CEF,$EF74C42B, |
$C33F413F,$3FC3DAE5,$1C55FF55,$551CC792,$10A2FBA2,$A210DB79,$65EA23EA,$EA65E903, |
$EC65AF65,$65EC6A0F,$68BAD3BA,$BA6803B9,$932F712F,$2F934A65,$E7C05DC0,$C0E78E4E, |
$81DE7FDE,$DE8160BE,$6C1C241C,$1C6CFCE0,$2EFD1AFD,$FD2E46BB,$644DD74D,$4D641F52, |
$E092AB92,$92E076E4,$BC759F75,$75BCFA8F,$1E060A06,$061E3630,$988A838A,$8A98AE24, |
$40B2CBB2,$B2404BF9,$59E637E6,$E6598563,$360E120E,$0E367E70,$631F211F,$1F63E7F8, |
$F762A662,$62F75537,$A3D461D4,$D4A33AEE,$32A8E5A8,$A8328129,$F496A796,$96F452C4, |
$3AF916F9,$F93A629B,$F6C552C5,$C5F6A366,$B1256F25,$25B11035,$2059EB59,$5920ABF2, |
$AE849184,$84AED054,$A7729672,$72A7C5B7,$DD394B39,$39DDECD5,$614CD44C,$4C61165A, |
$3B5EE25E,$5E3B94CA,$85788878,$78859FE7,$D8384838,$38D8E5DD,$868C898C,$8C869814, |
$B2D16ED1,$D1B217C6,$0BA5F2A5,$A50BE441,$4DE23BE2,$E24DA143,$F861A361,$61F84E2F, |
$45B3C8B3,$B34542F1,$A5216321,$21A53415,$D69CB99C,$9CD60894,$661E221E,$1E66EEF0, |
$5243C543,$43526122,$FCC754C7,$C7FCB176,$2BFC19FC,$FC2B4FB3,$14040C04,$04142420, |
$0851F351,$5108E3B2,$C799B699,$99C725BC,$C46DB76D,$6DC4224F,$390D170D,$0D396568, |
$35FA13FA,$FA357983,$84DF7CDF,$DF8469B6,$9B7E827E,$7E9BA9D7,$B4246C24,$24B4193D, |
$D73B4D3B,$3BD7FEC5,$3DABE0AB,$AB3D9A31,$D1CE4FCE,$CED1F03E,$55113311,$11559988, |
$898F8C8F,$8F89830C,$6B4ED24E,$4E6B044A,$51B7C4B7,$B75166D1,$60EB20EB,$EB60E00B, |
$CC3C443C,$3CCCC1FD,$BF819E81,$81BFFD7C,$FE94A194,$94FE40D4,$0CF704F7,$F70C1CEB, |
$67B9D6B9,$B96718A1,$5F133513,$135F8B98,$9C2C742C,$2C9C517D,$B8D368D3,$D3B805D6, |
$5CE734E7,$E75C8C6B,$CB6EB26E,$6ECB3957,$F3C451C4,$C4F3AA6E,$0F030503,$030F1B18, |
$1356FA56,$5613DC8A,$4944CC44,$44495E1A,$9E7F817F,$7F9EA0DF,$37A9E6A9,$A9378821, |
$822A7E2A,$2A82674D,$6DBBD0BB,$BB6D0AB1,$E2C15EC1,$C1E28746,$0253F553,$5302F1A2, |
$8BDC79DC,$DC8B72AE,$270B1D0B,$0B275358,$D39DBA9D,$9DD3019C,$C16CB46C,$6CC12B47, |
$F5315331,$31F5A495,$B9749C74,$74B9F387,$09F607F6,$F60915E3,$4346CA46,$46434C0A, |
$26ACE9AC,$AC26A509,$97898689,$8997B53C,$44143C14,$1444B4A0,$42E13EE1,$E142BA5B, |
$4E163A16,$164EA6B0,$D23A4E3A,$3AD2F7CD,$D069BB69,$69D0066F,$2D091B09,$092D4148, |
$AD709070,$70ADD7A7,$54B6C7B6,$B6546FD9,$B7D06DD0,$D0B71ECE,$7EED2AED,$ED7ED63B, |
$DBCC49CC,$CCDBE22E,$5742C642,$4257682A,$C298B598,$98C22CB4,$0EA4F1A4,$A40EED49, |
$88287828,$2888755D,$315CE45C,$5C3186DA,$3FF815F8,$F83F6B93,$A4869786,$86A4C244) |
); |
/// <summary> |
/// Whirlpool 1 |
/// S-BOX V3.0 (2003.03.12), nothing changed, same as Whirlpool_RC_T |
/// </summary> |
Whirlpool_RC_1: array[0..Whirlpool_Rounds * 2 - 1] of UInt32 = ( |
$E8C62318,$4F01B887,$F5D2A636,$52916F79,$8E9BBC60,$357B0CA3,$C2D7E01D,$57FE4B2E, |
$E5377715,$DA4AF09F,$0A29C958,$856BA0B1,$F4105DBD,$67053ECB,$8B4127E4,$D8957DA7, |
$667CEEFB,$9E4717DD,$07BF2DCA,$33835AAD |
); |
Whirlpool_C_1: array[0..7, 0..511] of UInt32 = ( |
($18601818,$d83078c0,$238c2323,$2646af05,$c63fc6c6,$b891f97e,$e887e8e8,$fbcd6f13, |
$87268787,$cb13a14c,$b8dab8b8,$116d62a9,$01040101,$09020508,$4f214f4f,$0d9e6e42, |
$36d83636,$9b6ceead,$a6a2a6a6,$ff510459,$d26fd2d2,$0cb9bdde,$f5f3f5f5,$0ef706fb, |
$79f97979,$96f280ef,$6fa16f6f,$30dece5f,$917e9191,$6d3feffc,$52555252,$f8a407aa, |
$609d6060,$47c0fd27,$bccabcbc,$35657689,$9b569b9b,$372bcdac,$8e028e8e,$8a018c04, |
$a3b6a3a3,$d25b1571,$0c300c0c,$6c183c60,$7bf17b7b,$84f68aff,$35d43535,$806ae1b5, |
$1d741d1d,$f53a69e8,$e0a7e0e0,$b3dd4753,$d77bd7d7,$21b3acf6,$c22fc2c2,$9c99ed5e, |
$2eb82e2e,$435c966d,$4b314b4b,$29967a62,$fedffefe,$5de121a3,$57415757,$d5ae1682, |
$15541515,$bd2a41a8,$77c17777,$e8eeb69f,$37dc3737,$926eeba5,$e5b3e5e5,$9ed7567b, |
$9f469f9f,$1323d98c,$f0e7f0f0,$23fd17d3,$4a354a4a,$20947f6a,$da4fdada,$44a9959e, |
$587d5858,$a2b025fa,$c903c9c9,$cf8fca06,$29a42929,$7c528d55,$0a280a0a,$5a142250, |
$b1feb1b1,$507f4fe1,$a0baa0a0,$c95d1a69,$6bb16b6b,$14d6da7f,$852e8585,$d917ab5c, |
$bdcebdbd,$3c677381,$5d695d5d,$8fba34d2,$10401010,$90205080,$f4f7f4f4,$07f503f3, |
$cb0bcbcb,$dd8bc016,$3ef83e3e,$d37cc6ed,$05140505,$2d0a1128,$67816767,$78cee61f, |
$e4b7e4e4,$97d55373,$279c2727,$024ebb25,$41194141,$73825832,$8b168b8b,$a70b9d2c, |
$a7a6a7a7,$f6530151,$7de97d7d,$b2fa94cf,$956e9595,$4937fbdc,$d847d8d8,$56ad9f8e, |
$fbcbfbfb,$70eb308b,$ee9feeee,$cdc17123,$7ced7c7c,$bbf891c7,$66856666,$71cce317, |
$dd53dddd,$7ba78ea6,$175c1717,$af2e4bb8,$47014747,$458e4602,$9e429e9e,$1a21dc84, |
$ca0fcaca,$d489c51e,$2db42d2d,$585a9975,$bfc6bfbf,$2e637991,$071c0707,$3f0e1b38, |
$ad8eadad,$ac472301,$5a755a5a,$b0b42fea,$83368383,$ef1bb56c,$33cc3333,$b666ff85, |
$63916363,$5cc6f23f,$02080202,$12040a10,$aa92aaaa,$93493839,$71d97171,$dee2a8af, |
$c807c8c8,$c68dcf0e,$19641919,$d1327dc8,$49394949,$3b927072,$d943d9d9,$5faf9a86, |
$f2eff2f2,$31f91dc3,$e3abe3e3,$a8db484b,$5b715b5b,$b9b62ae2,$881a8888,$bc0d9234, |
$9a529a9a,$3e29c8a4,$26982626,$0b4cbe2d,$32c83232,$bf64fa8d,$b0fab0b0,$597d4ae9, |
$e983e9e9,$f2cf6a1b,$0f3c0f0f,$771e3378,$d573d5d5,$33b7a6e6,$803a8080,$f41dba74, |
$bec2bebe,$27617c99,$cd13cdcd,$eb87de26,$34d03434,$8968e4bd,$483d4848,$3290757a, |
$ffdbffff,$54e324ab,$7af57a7a,$8df48ff7,$907a9090,$643deaf4,$5f615f5f,$9dbe3ec2, |
$20802020,$3d40a01d,$68bd6868,$0fd0d567,$1a681a1a,$ca3472d0,$ae82aeae,$b7412c19, |
$b4eab4b4,$7d755ec9,$544d5454,$cea8199a,$93769393,$7f3be5ec,$22882222,$2f44aa0d, |
$648d6464,$63c8e907,$f1e3f1f1,$2aff12db,$73d17373,$cce6a2bf,$12481212,$82245a90, |
$401d4040,$7a805d3a,$08200808,$48102840,$c32bc3c3,$959be856,$ec97ecec,$dfc57b33, |
$db4bdbdb,$4dab9096,$a1bea1a1,$c05f1f61,$8d0e8d8d,$9107831c,$3df43d3d,$c87ac9f5, |
$97669797,$5b33f1cc,$00000000,$00000000,$cf1bcfcf,$f983d436,$2bac2b2b,$6e568745, |
$76c57676,$e1ecb397,$82328282,$e619b064,$d67fd6d6,$28b1a9fe,$1b6c1b1b,$c33677d8, |
$b5eeb5b5,$74775bc1,$af86afaf,$be432911,$6ab56a6a,$1dd4df77,$505d5050,$eaa00dba, |
$45094545,$578a4c12,$f3ebf3f3,$38fb18cb,$30c03030,$ad60f09d,$ef9befef,$c4c3742b, |
$3ffc3f3f,$da7ec3e5,$55495555,$c7aa1c92,$a2b2a2a2,$db591079,$ea8feaea,$e9c96503, |
$65896565,$6acaec0f,$bad2baba,$036968b9,$2fbc2f2f,$4a5e9365,$c027c0c0,$8e9de74e, |
$de5fdede,$60a181be,$1c701c1c,$fc386ce0,$fdd3fdfd,$46e72ebb,$4d294d4d,$1f9a6452, |
$92729292,$7639e0e4,$75c97575,$faeabc8f,$06180606,$360c1e30,$8a128a8a,$ae099824, |
$b2f2b2b2,$4b7940f9,$e6bfe6e6,$85d15963,$0e380e0e,$7e1c3670,$1f7c1f1f,$e73e63f8, |
$62956262,$55c4f737,$d477d4d4,$3ab5a3ee,$a89aa8a8,$814d3229,$96629696,$5231f4c4, |
$f9c3f9f9,$62ef3a9b,$c533c5c5,$a397f666,$25942525,$104ab135,$59795959,$abb220f2, |
$842a8484,$d015ae54,$72d57272,$c5e4a7b7,$39e43939,$ec72ddd5,$4c2d4c4c,$1698615a, |
$5e655e5e,$94bc3bca,$78fd7878,$9ff085e7,$38e03838,$e570d8dd,$8c0a8c8c,$98058614, |
$d163d1d1,$17bfb2c6,$a5aea5a5,$e4570b41,$e2afe2e2,$a1d94d43,$61996161,$4ec2f82f, |
$b3f6b3b3,$427b45f1,$21842121,$3442a515,$9c4a9c9c,$0825d694,$1e781e1e,$ee3c66f0, |
$43114343,$61865222,$c73bc7c7,$b193fc76,$fcd7fcfc,$4fe52bb3,$04100404,$24081420, |
$51595151,$e3a208b2,$995e9999,$252fc7bc,$6da96d6d,$22dac44f,$0d340d0d,$651a3968, |
$facffafa,$79e93583,$df5bdfdf,$69a384b6,$7ee57e7e,$a9fc9bd7,$24902424,$1948b43d, |
$3bec3b3b,$fe76d7c5,$ab96abab,$9a4b3d31,$ce1fcece,$f081d13e,$11441111,$99225588, |
$8f068f8f,$8303890c,$4e254e4e,$049c6b4a,$b7e6b7b7,$667351d1,$eb8bebeb,$e0cb600b, |
$3cf03c3c,$c178ccfd,$813e8181,$fd1fbf7c,$946a9494,$4035fed4,$f7fbf7f7,$1cf30ceb, |
$b9deb9b9,$186f67a1,$134c1313,$8b265f98,$2cb02c2c,$51589c7d,$d36bd3d3,$05bbb8d6, |
$e7bbe7e7,$8cd35c6b,$6ea56e6e,$39dccb57,$c437c4c4,$aa95f36e,$030c0303,$1b060f18, |
$56455656,$dcac138a,$440d4444,$5e88491a,$7fe17f7f,$a0fe9edf,$a99ea9a9,$884f3721, |
$2aa82a2a,$6754824d,$bbd6bbbb,$0a6b6db1,$c123c1c1,$879fe246,$53515353,$f1a602a2, |
$dc57dcdc,$72a58bae,$0b2c0b0b,$53162758,$9d4e9d9d,$0127d39c,$6cad6c6c,$2bd8c147, |
$31c43131,$a462f595,$74cd7474,$f3e8b987,$f6fff6f6,$15f109e3,$46054646,$4c8c430a, |
$ac8aacac,$a5452609,$891e8989,$b50f973c,$14501414,$b42844a0,$e1a3e1e1,$badf425b, |
$16581616,$a62c4eb0,$3ae83a3a,$f774d2cd,$69b96969,$06d2d06f,$09240909,$41122d48, |
$70dd7070,$d7e0ada7,$b6e2b6b6,$6f7154d9,$d067d0d0,$1ebdb7ce,$ed93eded,$d6c77e3b, |
$cc17cccc,$e285db2e,$42154242,$6884572a,$985a9898,$2c2dc2b4,$a4aaa4a4,$ed550e49, |
$28a02828,$7550885d,$5c6d5c5c,$86b831da,$f8c7f8f8,$6bed3f93,$86228686,$c211a444 |
),( |
$601818d8,$3078c018,$8c232326,$46af0523,$3fc6c6b8,$91f97ec6,$87e8e8fb,$cd6f13e8, |
$268787cb,$13a14c87,$dab8b811,$6d62a9b8,$04010109,$02050801,$214f4f0d,$9e6e424f, |
$d836369b,$6ceead36,$a2a6a6ff,$510459a6,$6fd2d20c,$b9bdded2,$f3f5f50e,$f706fbf5, |
$f9797996,$f280ef79,$a16f6f30,$dece5f6f,$7e91916d,$3feffc91,$555252f8,$a407aa52, |
$9d606047,$c0fd2760,$cabcbc35,$657689bc,$569b9b37,$2bcdac9b,$028e8e8a,$018c048e, |
$b6a3a3d2,$5b1571a3,$300c0c6c,$183c600c,$f17b7b84,$f68aff7b,$d4353580,$6ae1b535, |
$741d1df5,$3a69e81d,$a7e0e0b3,$dd4753e0,$7bd7d721,$b3acf6d7,$2fc2c29c,$99ed5ec2, |
$b82e2e43,$5c966d2e,$314b4b29,$967a624b,$dffefe5d,$e121a3fe,$415757d5,$ae168257, |
$541515bd,$2a41a815,$c17777e8,$eeb69f77,$dc373792,$6eeba537,$b3e5e59e,$d7567be5, |
$469f9f13,$23d98c9f,$e7f0f023,$fd17d3f0,$354a4a20,$947f6a4a,$4fdada44,$a9959eda, |
$7d5858a2,$b025fa58,$03c9c9cf,$8fca06c9,$a429297c,$528d5529,$280a0a5a,$1422500a, |
$feb1b150,$7f4fe1b1,$baa0a0c9,$5d1a69a0,$b16b6b14,$d6da7f6b,$2e8585d9,$17ab5c85, |
$cebdbd3c,$677381bd,$695d5d8f,$ba34d25d,$40101090,$20508010,$f7f4f407,$f503f3f4, |
$0bcbcbdd,$8bc016cb,$f83e3ed3,$7cc6ed3e,$1405052d,$0a112805,$81676778,$cee61f67, |
$b7e4e497,$d55373e4,$9c272702,$4ebb2527,$19414173,$82583241,$168b8ba7,$0b9d2c8b, |
$a6a7a7f6,$530151a7,$e97d7db2,$fa94cf7d,$6e959549,$37fbdc95,$47d8d856,$ad9f8ed8, |
$cbfbfb70,$eb308bfb,$9feeeecd,$c17123ee,$ed7c7cbb,$f891c77c,$85666671,$cce31766, |
$53dddd7b,$a78ea6dd,$5c1717af,$2e4bb817,$01474745,$8e460247,$429e9e1a,$21dc849e, |
$0fcacad4,$89c51eca,$b42d2d58,$5a99752d,$c6bfbf2e,$637991bf,$1c07073f,$0e1b3807, |
$8eadadac,$472301ad,$755a5ab0,$b42fea5a,$368383ef,$1bb56c83,$cc3333b6,$66ff8533, |
$9163635c,$c6f23f63,$08020212,$040a1002,$92aaaa93,$493839aa,$d97171de,$e2a8af71, |
$07c8c8c6,$8dcf0ec8,$641919d1,$327dc819,$3949493b,$92707249,$43d9d95f,$af9a86d9, |
$eff2f231,$f91dc3f2,$abe3e3a8,$db484be3,$715b5bb9,$b62ae25b,$1a8888bc,$0d923488, |
$529a9a3e,$29c8a49a,$9826260b,$4cbe2d26,$c83232bf,$64fa8d32,$fab0b059,$7d4ae9b0, |
$83e9e9f2,$cf6a1be9,$3c0f0f77,$1e33780f,$73d5d533,$b7a6e6d5,$3a8080f4,$1dba7480, |
$c2bebe27,$617c99be,$13cdcdeb,$87de26cd,$d0343489,$68e4bd34,$3d484832,$90757a48, |
$dbffff54,$e324abff,$f57a7a8d,$f48ff77a,$7a909064,$3deaf490,$615f5f9d,$be3ec25f, |
$8020203d,$40a01d20,$bd68680f,$d0d56768,$681a1aca,$3472d01a,$82aeaeb7,$412c19ae, |
$eab4b47d,$755ec9b4,$4d5454ce,$a8199a54,$7693937f,$3be5ec93,$8822222f,$44aa0d22, |
$8d646463,$c8e90764,$e3f1f12a,$ff12dbf1,$d17373cc,$e6a2bf73,$48121282,$245a9012, |
$1d40407a,$805d3a40,$20080848,$10284008,$2bc3c395,$9be856c3,$97ececdf,$c57b33ec, |
$4bdbdb4d,$ab9096db,$bea1a1c0,$5f1f61a1,$0e8d8d91,$07831c8d,$f43d3dc8,$7ac9f53d, |
$6697975b,$33f1cc97,$00000000,$00000000,$1bcfcff9,$83d436cf,$ac2b2b6e,$5687452b, |
$c57676e1,$ecb39776,$328282e6,$19b06482,$7fd6d628,$b1a9fed6,$6c1b1bc3,$3677d81b, |
$eeb5b574,$775bc1b5,$86afafbe,$432911af,$b56a6a1d,$d4df776a,$5d5050ea,$a00dba50, |
$09454557,$8a4c1245,$ebf3f338,$fb18cbf3,$c03030ad,$60f09d30,$9befefc4,$c3742bef, |
$fc3f3fda,$7ec3e53f,$495555c7,$aa1c9255,$b2a2a2db,$591079a2,$8feaeae9,$c96503ea, |
$8965656a,$caec0f65,$d2baba03,$6968b9ba,$bc2f2f4a,$5e93652f,$27c0c08e,$9de74ec0, |
$5fdede60,$a181bede,$701c1cfc,$386ce01c,$d3fdfd46,$e72ebbfd,$294d4d1f,$9a64524d, |
$72929276,$39e0e492,$c97575fa,$eabc8f75,$18060636,$0c1e3006,$128a8aae,$0998248a, |
$f2b2b24b,$7940f9b2,$bfe6e685,$d15963e6,$380e0e7e,$1c36700e,$7c1f1fe7,$3e63f81f, |
$95626255,$c4f73762,$77d4d43a,$b5a3eed4,$9aa8a881,$4d3229a8,$62969652,$31f4c496, |
$c3f9f962,$ef3a9bf9,$33c5c5a3,$97f666c5,$94252510,$4ab13525,$795959ab,$b220f259, |
$2a8484d0,$15ae5484,$d57272c5,$e4a7b772,$e43939ec,$72ddd539,$2d4c4c16,$98615a4c, |
$655e5e94,$bc3bca5e,$fd78789f,$f085e778,$e03838e5,$70d8dd38,$0a8c8c98,$0586148c, |
$63d1d117,$bfb2c6d1,$aea5a5e4,$570b41a5,$afe2e2a1,$d94d43e2,$9961614e,$c2f82f61, |
$f6b3b342,$7b45f1b3,$84212134,$42a51521,$4a9c9c08,$25d6949c,$781e1eee,$3c66f01e, |
$11434361,$86522243,$3bc7c7b1,$93fc76c7,$d7fcfc4f,$e52bb3fc,$10040424,$08142004, |
$595151e3,$a208b251,$5e999925,$2fc7bc99,$a96d6d22,$dac44f6d,$340d0d65,$1a39680d, |
$cffafa79,$e93583fa,$5bdfdf69,$a384b6df,$e57e7ea9,$fc9bd77e,$90242419,$48b43d24, |
$ec3b3bfe,$76d7c53b,$96abab9a,$4b3d31ab,$1fcecef0,$81d13ece,$44111199,$22558811, |
$068f8f83,$03890c8f,$254e4e04,$9c6b4a4e,$e6b7b766,$7351d1b7,$8bebebe0,$cb600beb, |
$f03c3cc1,$78ccfd3c,$3e8181fd,$1fbf7c81,$6a949440,$35fed494,$fbf7f71c,$f30cebf7, |
$deb9b918,$6f67a1b9,$4c13138b,$265f9813,$b02c2c51,$589c7d2c,$6bd3d305,$bbb8d6d3, |
$bbe7e78c,$d35c6be7,$a56e6e39,$dccb576e,$37c4c4aa,$95f36ec4,$0c03031b,$060f1803, |
$455656dc,$ac138a56,$0d44445e,$88491a44,$e17f7fa0,$fe9edf7f,$9ea9a988,$4f3721a9, |
$a82a2a67,$54824d2a,$d6bbbb0a,$6b6db1bb,$23c1c187,$9fe246c1,$515353f1,$a602a253, |
$57dcdc72,$a58baedc,$2c0b0b53,$1627580b,$4e9d9d01,$27d39c9d,$ad6c6c2b,$d8c1476c, |
$c43131a4,$62f59531,$cd7474f3,$e8b98774,$fff6f615,$f109e3f6,$0546464c,$8c430a46, |
$8aacaca5,$452609ac,$1e8989b5,$0f973c89,$501414b4,$2844a014,$a3e1e1ba,$df425be1, |
$581616a6,$2c4eb016,$e83a3af7,$74d2cd3a,$b9696906,$d2d06f69,$24090941,$122d4809, |
$dd7070d7,$e0ada770,$e2b6b66f,$7154d9b6,$67d0d01e,$bdb7ced0,$93ededd6,$c77e3bed, |
$17cccce2,$85db2ecc,$15424268,$84572a42,$5a98982c,$2dc2b498,$aaa4a4ed,$550e49a4, |
$a0282875,$50885d28,$6d5c5c86,$b831da5c,$c7f8f86b,$ed3f93f8,$228686c2,$11a44486 |
),( |
$1818d830,$78c01860,$23232646,$af05238c,$c6c6b891,$f97ec63f,$e8e8fbcd,$6f13e887, |
$8787cb13,$a14c8726,$b8b8116d,$62a9b8da,$01010902,$05080104,$4f4f0d9e,$6e424f21, |
$36369b6c,$eead36d8,$a6a6ff51,$0459a6a2,$d2d20cb9,$bdded26f,$f5f50ef7,$06fbf5f3, |
$797996f2,$80ef79f9,$6f6f30de,$ce5f6fa1,$91916d3f,$effc917e,$5252f8a4,$07aa5255, |
$606047c0,$fd27609d,$bcbc3565,$7689bcca,$9b9b372b,$cdac9b56,$8e8e8a01,$8c048e02, |
$a3a3d25b,$1571a3b6,$0c0c6c18,$3c600c30,$7b7b84f6,$8aff7bf1,$3535806a,$e1b535d4, |
$1d1df53a,$69e81d74,$e0e0b3dd,$4753e0a7,$d7d721b3,$acf6d77b,$c2c29c99,$ed5ec22f, |
$2e2e435c,$966d2eb8,$4b4b2996,$7a624b31,$fefe5de1,$21a3fedf,$5757d5ae,$16825741, |
$1515bd2a,$41a81554,$7777e8ee,$b69f77c1,$3737926e,$eba537dc,$e5e59ed7,$567be5b3, |
$9f9f1323,$d98c9f46,$f0f023fd,$17d3f0e7,$4a4a2094,$7f6a4a35,$dada44a9,$959eda4f, |
$5858a2b0,$25fa587d,$c9c9cf8f,$ca06c903,$29297c52,$8d5529a4,$0a0a5a14,$22500a28, |
$b1b1507f,$4fe1b1fe,$a0a0c95d,$1a69a0ba,$6b6b14d6,$da7f6bb1,$8585d917,$ab5c852e, |
$bdbd3c67,$7381bdce,$5d5d8fba,$34d25d69,$10109020,$50801040,$f4f407f5,$03f3f4f7, |
$cbcbdd8b,$c016cb0b,$3e3ed37c,$c6ed3ef8,$05052d0a,$11280514,$676778ce,$e61f6781, |
$e4e497d5,$5373e4b7,$2727024e,$bb25279c,$41417382,$58324119,$8b8ba70b,$9d2c8b16, |
$a7a7f653,$0151a7a6,$7d7db2fa,$94cf7de9,$95954937,$fbdc956e,$d8d856ad,$9f8ed847, |
$fbfb70eb,$308bfbcb,$eeeecdc1,$7123ee9f,$7c7cbbf8,$91c77ced,$666671cc,$e3176685, |
$dddd7ba7,$8ea6dd53,$1717af2e,$4bb8175c,$4747458e,$46024701,$9e9e1a21,$dc849e42, |
$cacad489,$c51eca0f,$2d2d585a,$99752db4,$bfbf2e63,$7991bfc6,$07073f0e,$1b38071c, |
$adadac47,$2301ad8e,$5a5ab0b4,$2fea5a75,$8383ef1b,$b56c8336,$3333b666,$ff8533cc, |
$63635cc6,$f23f6391,$02021204,$0a100208,$aaaa9349,$3839aa92,$7171dee2,$a8af71d9, |
$c8c8c68d,$cf0ec807,$1919d132,$7dc81964,$49493b92,$70724939,$d9d95faf,$9a86d943, |
$f2f231f9,$1dc3f2ef,$e3e3a8db,$484be3ab,$5b5bb9b6,$2ae25b71,$8888bc0d,$9234881a, |
$9a9a3e29,$c8a49a52,$26260b4c,$be2d2698,$3232bf64,$fa8d32c8,$b0b0597d,$4ae9b0fa, |
$e9e9f2cf,$6a1be983,$0f0f771e,$33780f3c,$d5d533b7,$a6e6d573,$8080f41d,$ba74803a, |
$bebe2761,$7c99bec2,$cdcdeb87,$de26cd13,$34348968,$e4bd34d0,$48483290,$757a483d, |
$ffff54e3,$24abffdb,$7a7a8df4,$8ff77af5,$9090643d,$eaf4907a,$5f5f9dbe,$3ec25f61, |
$20203d40,$a01d2080,$68680fd0,$d56768bd,$1a1aca34,$72d01a68,$aeaeb741,$2c19ae82, |
$b4b47d75,$5ec9b4ea,$5454cea8,$199a544d,$93937f3b,$e5ec9376,$22222f44,$aa0d2288, |
$646463c8,$e907648d,$f1f12aff,$12dbf1e3,$7373cce6,$a2bf73d1,$12128224,$5a901248, |
$40407a80,$5d3a401d,$08084810,$28400820,$c3c3959b,$e856c32b,$ececdfc5,$7b33ec97, |
$dbdb4dab,$9096db4b,$a1a1c05f,$1f61a1be,$8d8d9107,$831c8d0e,$3d3dc87a,$c9f53df4, |
$97975b33,$f1cc9766,$00000000,$00000000,$cfcff983,$d436cf1b,$2b2b6e56,$87452bac, |
$7676e1ec,$b39776c5,$8282e619,$b0648232,$d6d628b1,$a9fed67f,$1b1bc336,$77d81b6c, |
$b5b57477,$5bc1b5ee,$afafbe43,$2911af86,$6a6a1dd4,$df776ab5,$5050eaa0,$0dba505d, |
$4545578a,$4c124509,$f3f338fb,$18cbf3eb,$3030ad60,$f09d30c0,$efefc4c3,$742bef9b, |
$3f3fda7e,$c3e53ffc,$5555c7aa,$1c925549,$a2a2db59,$1079a2b2,$eaeae9c9,$6503ea8f, |
$65656aca,$ec0f6589,$baba0369,$68b9bad2,$2f2f4a5e,$93652fbc,$c0c08e9d,$e74ec027, |
$dede60a1,$81bede5f,$1c1cfc38,$6ce01c70,$fdfd46e7,$2ebbfdd3,$4d4d1f9a,$64524d29, |
$92927639,$e0e49272,$7575faea,$bc8f75c9,$0606360c,$1e300618,$8a8aae09,$98248a12, |
$b2b24b79,$40f9b2f2,$e6e685d1,$5963e6bf,$0e0e7e1c,$36700e38,$1f1fe73e,$63f81f7c, |
$626255c4,$f7376295,$d4d43ab5,$a3eed477,$a8a8814d,$3229a89a,$96965231,$f4c49662, |
$f9f962ef,$3a9bf9c3,$c5c5a397,$f666c533,$2525104a,$b1352594,$5959abb2,$20f25979, |
$8484d015,$ae54842a,$7272c5e4,$a7b772d5,$3939ec72,$ddd539e4,$4c4c1698,$615a4c2d, |
$5e5e94bc,$3bca5e65,$78789ff0,$85e778fd,$3838e570,$d8dd38e0,$8c8c9805,$86148c0a, |
$d1d117bf,$b2c6d163,$a5a5e457,$0b41a5ae,$e2e2a1d9,$4d43e2af,$61614ec2,$f82f6199, |
$b3b3427b,$45f1b3f6,$21213442,$a5152184,$9c9c0825,$d6949c4a,$1e1eee3c,$66f01e78, |
$43436186,$52224311,$c7c7b193,$fc76c73b,$fcfc4fe5,$2bb3fcd7,$04042408,$14200410, |
$5151e3a2,$08b25159,$9999252f,$c7bc995e,$6d6d22da,$c44f6da9,$0d0d651a,$39680d34, |
$fafa79e9,$3583facf,$dfdf69a3,$84b6df5b,$7e7ea9fc,$9bd77ee5,$24241948,$b43d2490, |
$3b3bfe76,$d7c53bec,$abab9a4b,$3d31ab96,$cecef081,$d13ece1f,$11119922,$55881144, |
$8f8f8303,$890c8f06,$4e4e049c,$6b4a4e25,$b7b76673,$51d1b7e6,$ebebe0cb,$600beb8b, |
$3c3cc178,$ccfd3cf0,$8181fd1f,$bf7c813e,$94944035,$fed4946a,$f7f71cf3,$0cebf7fb, |
$b9b9186f,$67a1b9de,$13138b26,$5f98134c,$2c2c5158,$9c7d2cb0,$d3d305bb,$b8d6d36b, |
$e7e78cd3,$5c6be7bb,$6e6e39dc,$cb576ea5,$c4c4aa95,$f36ec437,$03031b06,$0f18030c, |
$5656dcac,$138a5645,$44445e88,$491a440d,$7f7fa0fe,$9edf7fe1,$a9a9884f,$3721a99e, |
$2a2a6754,$824d2aa8,$bbbb0a6b,$6db1bbd6,$c1c1879f,$e246c123,$5353f1a6,$02a25351, |
$dcdc72a5,$8baedc57,$0b0b5316,$27580b2c,$9d9d0127,$d39c9d4e,$6c6c2bd8,$c1476cad, |
$3131a462,$f59531c4,$7474f3e8,$b98774cd,$f6f615f1,$09e3f6ff,$46464c8c,$430a4605, |
$acaca545,$2609ac8a,$8989b50f,$973c891e,$1414b428,$44a01450,$e1e1badf,$425be1a3, |
$1616a62c,$4eb01658,$3a3af774,$d2cd3ae8,$696906d2,$d06f69b9,$09094112,$2d480924, |
$7070d7e0,$ada770dd,$b6b66f71,$54d9b6e2,$d0d01ebd,$b7ced067,$ededd6c7,$7e3bed93, |
$cccce285,$db2ecc17,$42426884,$572a4215,$98982c2d,$c2b4985a,$a4a4ed55,$0e49a4aa, |
$28287550,$885d28a0,$5c5c86b8,$31da5c6d,$f8f86bed,$3f93f8c7,$8686c211,$a4448622 |
),( |
$18d83078,$c0186018,$232646af,$05238c23,$c6b891f9,$7ec63fc6,$e8fbcd6f,$13e887e8, |
$87cb13a1,$4c872687,$b8116d62,$a9b8dab8,$01090205,$08010401,$4f0d9e6e,$424f214f, |
$369b6cee,$ad36d836,$a6ff5104,$59a6a2a6,$d20cb9bd,$ded26fd2,$f50ef706,$fbf5f3f5, |
$7996f280,$ef79f979,$6f30dece,$5f6fa16f,$916d3fef,$fc917e91,$52f8a407,$aa525552, |
$6047c0fd,$27609d60,$bc356576,$89bccabc,$9b372bcd,$ac9b569b,$8e8a018c,$048e028e, |
$a3d25b15,$71a3b6a3,$0c6c183c,$600c300c,$7b84f68a,$ff7bf17b,$35806ae1,$b535d435, |
$1df53a69,$e81d741d,$e0b3dd47,$53e0a7e0,$d721b3ac,$f6d77bd7,$c29c99ed,$5ec22fc2, |
$2e435c96,$6d2eb82e,$4b29967a,$624b314b,$fe5de121,$a3fedffe,$57d5ae16,$82574157, |
$15bd2a41,$a8155415,$77e8eeb6,$9f77c177,$37926eeb,$a537dc37,$e59ed756,$7be5b3e5, |
$9f1323d9,$8c9f469f,$f023fd17,$d3f0e7f0,$4a20947f,$6a4a354a,$da44a995,$9eda4fda, |
$58a2b025,$fa587d58,$c9cf8fca,$06c903c9,$297c528d,$5529a429,$0a5a1422,$500a280a, |
$b1507f4f,$e1b1feb1,$a0c95d1a,$69a0baa0,$6b14d6da,$7f6bb16b,$85d917ab,$5c852e85, |
$bd3c6773,$81bdcebd,$5d8fba34,$d25d695d,$10902050,$80104010,$f407f503,$f3f4f7f4, |
$cbdd8bc0,$16cb0bcb,$3ed37cc6,$ed3ef83e,$052d0a11,$28051405,$6778cee6,$1f678167, |
$e497d553,$73e4b7e4,$27024ebb,$25279c27,$41738258,$32411941,$8ba70b9d,$2c8b168b, |
$a7f65301,$51a7a6a7,$7db2fa94,$cf7de97d,$954937fb,$dc956e95,$d856ad9f,$8ed847d8, |
$fb70eb30,$8bfbcbfb,$eecdc171,$23ee9fee,$7cbbf891,$c77ced7c,$6671cce3,$17668566, |
$dd7ba78e,$a6dd53dd,$17af2e4b,$b8175c17,$47458e46,$02470147,$9e1a21dc,$849e429e, |
$cad489c5,$1eca0fca,$2d585a99,$752db42d,$bf2e6379,$91bfc6bf,$073f0e1b,$38071c07, |
$adac4723,$01ad8ead,$5ab0b42f,$ea5a755a,$83ef1bb5,$6c833683,$33b666ff,$8533cc33, |
$635cc6f2,$3f639163,$0212040a,$10020802,$aa934938,$39aa92aa,$71dee2a8,$af71d971, |
$c8c68dcf,$0ec807c8,$19d1327d,$c8196419,$493b9270,$72493949,$d95faf9a,$86d943d9, |
$f231f91d,$c3f2eff2,$e3a8db48,$4be3abe3,$5bb9b62a,$e25b715b,$88bc0d92,$34881a88, |
$9a3e29c8,$a49a529a,$260b4cbe,$2d269826,$32bf64fa,$8d32c832,$b0597d4a,$e9b0fab0, |
$e9f2cf6a,$1be983e9,$0f771e33,$780f3c0f,$d533b7a6,$e6d573d5,$80f41dba,$74803a80, |
$be27617c,$99bec2be,$cdeb87de,$26cd13cd,$348968e4,$bd34d034,$48329075,$7a483d48, |
$ff54e324,$abffdbff,$7a8df48f,$f77af57a,$90643dea,$f4907a90,$5f9dbe3e,$c25f615f, |
$203d40a0,$1d208020,$680fd0d5,$6768bd68,$1aca3472,$d01a681a,$aeb7412c,$19ae82ae, |
$b47d755e,$c9b4eab4,$54cea819,$9a544d54,$937f3be5,$ec937693,$222f44aa,$0d228822, |
$6463c8e9,$07648d64,$f12aff12,$dbf1e3f1,$73cce6a2,$bf73d173,$1282245a,$90124812, |
$407a805d,$3a401d40,$08481028,$40082008,$c3959be8,$56c32bc3,$ecdfc57b,$33ec97ec, |
$db4dab90,$96db4bdb,$a1c05f1f,$61a1bea1,$8d910783,$1c8d0e8d,$3dc87ac9,$f53df43d, |
$975b33f1,$cc976697,$00000000,$00000000,$cff983d4,$36cf1bcf,$2b6e5687,$452bac2b, |
$76e1ecb3,$9776c576,$82e619b0,$64823282,$d628b1a9,$fed67fd6,$1bc33677,$d81b6c1b, |
$b574775b,$c1b5eeb5,$afbe4329,$11af86af,$6a1dd4df,$776ab56a,$50eaa00d,$ba505d50, |
$45578a4c,$12450945,$f338fb18,$cbf3ebf3,$30ad60f0,$9d30c030,$efc4c374,$2bef9bef, |
$3fda7ec3,$e53ffc3f,$55c7aa1c,$92554955,$a2db5910,$79a2b2a2,$eae9c965,$03ea8fea, |
$656acaec,$0f658965,$ba036968,$b9bad2ba,$2f4a5e93,$652fbc2f,$c08e9de7,$4ec027c0, |
$de60a181,$bede5fde,$1cfc386c,$e01c701c,$fd46e72e,$bbfdd3fd,$4d1f9a64,$524d294d, |
$927639e0,$e4927292,$75faeabc,$8f75c975,$06360c1e,$30061806,$8aae0998,$248a128a, |
$b24b7940,$f9b2f2b2,$e685d159,$63e6bfe6,$0e7e1c36,$700e380e,$1fe73e63,$f81f7c1f, |
$6255c4f7,$37629562,$d43ab5a3,$eed477d4,$a8814d32,$29a89aa8,$965231f4,$c4966296, |
$f962ef3a,$9bf9c3f9,$c5a397f6,$66c533c5,$25104ab1,$35259425,$59abb220,$f2597959, |
$84d015ae,$54842a84,$72c5e4a7,$b772d572,$39ec72dd,$d539e439,$4c169861,$5a4c2d4c, |
$5e94bc3b,$ca5e655e,$789ff085,$e778fd78,$38e570d8,$dd38e038,$8c980586,$148c0a8c, |
$d117bfb2,$c6d163d1,$a5e4570b,$41a5aea5,$e2a1d94d,$43e2afe2,$614ec2f8,$2f619961, |
$b3427b45,$f1b3f6b3,$213442a5,$15218421,$9c0825d6,$949c4a9c,$1eee3c66,$f01e781e, |
$43618652,$22431143,$c7b193fc,$76c73bc7,$fc4fe52b,$b3fcd7fc,$04240814,$20041004, |
$51e3a208,$b2515951,$99252fc7,$bc995e99,$6d22dac4,$4f6da96d,$0d651a39,$680d340d, |
$fa79e935,$83facffa,$df69a384,$b6df5bdf,$7ea9fc9b,$d77ee57e,$241948b4,$3d249024, |
$3bfe76d7,$c53bec3b,$ab9a4b3d,$31ab96ab,$cef081d1,$3ece1fce,$11992255,$88114411, |
$8f830389,$0c8f068f,$4e049c6b,$4a4e254e,$b7667351,$d1b7e6b7,$ebe0cb60,$0beb8beb, |
$3cc178cc,$fd3cf03c,$81fd1fbf,$7c813e81,$944035fe,$d4946a94,$f71cf30c,$ebf7fbf7, |
$b9186f67,$a1b9deb9,$138b265f,$98134c13,$2c51589c,$7d2cb02c,$d305bbb8,$d6d36bd3, |
$e78cd35c,$6be7bbe7,$6e39dccb,$576ea56e,$c4aa95f3,$6ec437c4,$031b060f,$18030c03, |
$56dcac13,$8a564556,$445e8849,$1a440d44,$7fa0fe9e,$df7fe17f,$a9884f37,$21a99ea9, |
$2a675482,$4d2aa82a,$bb0a6b6d,$b1bbd6bb,$c1879fe2,$46c123c1,$53f1a602,$a2535153, |
$dc72a58b,$aedc57dc,$0b531627,$580b2c0b,$9d0127d3,$9c9d4e9d,$6c2bd8c1,$476cad6c, |
$31a462f5,$9531c431,$74f3e8b9,$8774cd74,$f615f109,$e3f6fff6,$464c8c43,$0a460546, |
$aca54526,$09ac8aac,$89b50f97,$3c891e89,$14b42844,$a0145014,$e1badf42,$5be1a3e1, |
$16a62c4e,$b0165816,$3af774d2,$cd3ae83a,$6906d2d0,$6f69b969,$0941122d,$48092409, |
$70d7e0ad,$a770dd70,$b66f7154,$d9b6e2b6,$d01ebdb7,$ced067d0,$edd6c77e,$3bed93ed, |
$cce285db,$2ecc17cc,$42688457,$2a421542,$982c2dc2,$b4985a98,$a4ed550e,$49a4aaa4, |
$28755088,$5d28a028,$5c86b831,$da5c6d5c,$f86bed3f,$93f8c7f8,$86c211a4,$44862286 |
),( |
$d83078c0,$18601818,$2646af05,$238c2323,$b891f97e,$c63fc6c6,$fbcd6f13,$e887e8e8, |
$cb13a14c,$87268787,$116d62a9,$b8dab8b8,$09020508,$01040101,$0d9e6e42,$4f214f4f, |
$9b6ceead,$36d83636,$ff510459,$a6a2a6a6,$0cb9bdde,$d26fd2d2,$0ef706fb,$f5f3f5f5, |
$96f280ef,$79f97979,$30dece5f,$6fa16f6f,$6d3feffc,$917e9191,$f8a407aa,$52555252, |
$47c0fd27,$609d6060,$35657689,$bccabcbc,$372bcdac,$9b569b9b,$8a018c04,$8e028e8e, |
$d25b1571,$a3b6a3a3,$6c183c60,$0c300c0c,$84f68aff,$7bf17b7b,$806ae1b5,$35d43535, |
$f53a69e8,$1d741d1d,$b3dd4753,$e0a7e0e0,$21b3acf6,$d77bd7d7,$9c99ed5e,$c22fc2c2, |
$435c966d,$2eb82e2e,$29967a62,$4b314b4b,$5de121a3,$fedffefe,$d5ae1682,$57415757, |
$bd2a41a8,$15541515,$e8eeb69f,$77c17777,$926eeba5,$37dc3737,$9ed7567b,$e5b3e5e5, |
$1323d98c,$9f469f9f,$23fd17d3,$f0e7f0f0,$20947f6a,$4a354a4a,$44a9959e,$da4fdada, |
$a2b025fa,$587d5858,$cf8fca06,$c903c9c9,$7c528d55,$29a42929,$5a142250,$0a280a0a, |
$507f4fe1,$b1feb1b1,$c95d1a69,$a0baa0a0,$14d6da7f,$6bb16b6b,$d917ab5c,$852e8585, |
$3c677381,$bdcebdbd,$8fba34d2,$5d695d5d,$90205080,$10401010,$07f503f3,$f4f7f4f4, |
$dd8bc016,$cb0bcbcb,$d37cc6ed,$3ef83e3e,$2d0a1128,$05140505,$78cee61f,$67816767, |
$97d55373,$e4b7e4e4,$024ebb25,$279c2727,$73825832,$41194141,$a70b9d2c,$8b168b8b, |
$f6530151,$a7a6a7a7,$b2fa94cf,$7de97d7d,$4937fbdc,$956e9595,$56ad9f8e,$d847d8d8, |
$70eb308b,$fbcbfbfb,$cdc17123,$ee9feeee,$bbf891c7,$7ced7c7c,$71cce317,$66856666, |
$7ba78ea6,$dd53dddd,$af2e4bb8,$175c1717,$458e4602,$47014747,$1a21dc84,$9e429e9e, |
$d489c51e,$ca0fcaca,$585a9975,$2db42d2d,$2e637991,$bfc6bfbf,$3f0e1b38,$071c0707, |
$ac472301,$ad8eadad,$b0b42fea,$5a755a5a,$ef1bb56c,$83368383,$b666ff85,$33cc3333, |
$5cc6f23f,$63916363,$12040a10,$02080202,$93493839,$aa92aaaa,$dee2a8af,$71d97171, |
$c68dcf0e,$c807c8c8,$d1327dc8,$19641919,$3b927072,$49394949,$5faf9a86,$d943d9d9, |
$31f91dc3,$f2eff2f2,$a8db484b,$e3abe3e3,$b9b62ae2,$5b715b5b,$bc0d9234,$881a8888, |
$3e29c8a4,$9a529a9a,$0b4cbe2d,$26982626,$bf64fa8d,$32c83232,$597d4ae9,$b0fab0b0, |
$f2cf6a1b,$e983e9e9,$771e3378,$0f3c0f0f,$33b7a6e6,$d573d5d5,$f41dba74,$803a8080, |
$27617c99,$bec2bebe,$eb87de26,$cd13cdcd,$8968e4bd,$34d03434,$3290757a,$483d4848, |
$54e324ab,$ffdbffff,$8df48ff7,$7af57a7a,$643deaf4,$907a9090,$9dbe3ec2,$5f615f5f, |
$3d40a01d,$20802020,$0fd0d567,$68bd6868,$ca3472d0,$1a681a1a,$b7412c19,$ae82aeae, |
$7d755ec9,$b4eab4b4,$cea8199a,$544d5454,$7f3be5ec,$93769393,$2f44aa0d,$22882222, |
$63c8e907,$648d6464,$2aff12db,$f1e3f1f1,$cce6a2bf,$73d17373,$82245a90,$12481212, |
$7a805d3a,$401d4040,$48102840,$08200808,$959be856,$c32bc3c3,$dfc57b33,$ec97ecec, |
$4dab9096,$db4bdbdb,$c05f1f61,$a1bea1a1,$9107831c,$8d0e8d8d,$c87ac9f5,$3df43d3d, |
$5b33f1cc,$97669797,$00000000,$00000000,$f983d436,$cf1bcfcf,$6e568745,$2bac2b2b, |
$e1ecb397,$76c57676,$e619b064,$82328282,$28b1a9fe,$d67fd6d6,$c33677d8,$1b6c1b1b, |
$74775bc1,$b5eeb5b5,$be432911,$af86afaf,$1dd4df77,$6ab56a6a,$eaa00dba,$505d5050, |
$578a4c12,$45094545,$38fb18cb,$f3ebf3f3,$ad60f09d,$30c03030,$c4c3742b,$ef9befef, |
$da7ec3e5,$3ffc3f3f,$c7aa1c92,$55495555,$db591079,$a2b2a2a2,$e9c96503,$ea8feaea, |
$6acaec0f,$65896565,$036968b9,$bad2baba,$4a5e9365,$2fbc2f2f,$8e9de74e,$c027c0c0, |
$60a181be,$de5fdede,$fc386ce0,$1c701c1c,$46e72ebb,$fdd3fdfd,$1f9a6452,$4d294d4d, |
$7639e0e4,$92729292,$faeabc8f,$75c97575,$360c1e30,$06180606,$ae099824,$8a128a8a, |
$4b7940f9,$b2f2b2b2,$85d15963,$e6bfe6e6,$7e1c3670,$0e380e0e,$e73e63f8,$1f7c1f1f, |
$55c4f737,$62956262,$3ab5a3ee,$d477d4d4,$814d3229,$a89aa8a8,$5231f4c4,$96629696, |
$62ef3a9b,$f9c3f9f9,$a397f666,$c533c5c5,$104ab135,$25942525,$abb220f2,$59795959, |
$d015ae54,$842a8484,$c5e4a7b7,$72d57272,$ec72ddd5,$39e43939,$1698615a,$4c2d4c4c, |
$94bc3bca,$5e655e5e,$9ff085e7,$78fd7878,$e570d8dd,$38e03838,$98058614,$8c0a8c8c, |
$17bfb2c6,$d163d1d1,$e4570b41,$a5aea5a5,$a1d94d43,$e2afe2e2,$4ec2f82f,$61996161, |
$427b45f1,$b3f6b3b3,$3442a515,$21842121,$0825d694,$9c4a9c9c,$ee3c66f0,$1e781e1e, |
$61865222,$43114343,$b193fc76,$c73bc7c7,$4fe52bb3,$fcd7fcfc,$24081420,$04100404, |
$e3a208b2,$51595151,$252fc7bc,$995e9999,$22dac44f,$6da96d6d,$651a3968,$0d340d0d, |
$79e93583,$facffafa,$69a384b6,$df5bdfdf,$a9fc9bd7,$7ee57e7e,$1948b43d,$24902424, |
$fe76d7c5,$3bec3b3b,$9a4b3d31,$ab96abab,$f081d13e,$ce1fcece,$99225588,$11441111, |
$8303890c,$8f068f8f,$049c6b4a,$4e254e4e,$667351d1,$b7e6b7b7,$e0cb600b,$eb8bebeb, |
$c178ccfd,$3cf03c3c,$fd1fbf7c,$813e8181,$4035fed4,$946a9494,$1cf30ceb,$f7fbf7f7, |
$186f67a1,$b9deb9b9,$8b265f98,$134c1313,$51589c7d,$2cb02c2c,$05bbb8d6,$d36bd3d3, |
$8cd35c6b,$e7bbe7e7,$39dccb57,$6ea56e6e,$aa95f36e,$c437c4c4,$1b060f18,$030c0303, |
$dcac138a,$56455656,$5e88491a,$440d4444,$a0fe9edf,$7fe17f7f,$884f3721,$a99ea9a9, |
$6754824d,$2aa82a2a,$0a6b6db1,$bbd6bbbb,$879fe246,$c123c1c1,$f1a602a2,$53515353, |
$72a58bae,$dc57dcdc,$53162758,$0b2c0b0b,$0127d39c,$9d4e9d9d,$2bd8c147,$6cad6c6c, |
$a462f595,$31c43131,$f3e8b987,$74cd7474,$15f109e3,$f6fff6f6,$4c8c430a,$46054646, |
$a5452609,$ac8aacac,$b50f973c,$891e8989,$b42844a0,$14501414,$badf425b,$e1a3e1e1, |
$a62c4eb0,$16581616,$f774d2cd,$3ae83a3a,$06d2d06f,$69b96969,$41122d48,$09240909, |
$d7e0ada7,$70dd7070,$6f7154d9,$b6e2b6b6,$1ebdb7ce,$d067d0d0,$d6c77e3b,$ed93eded, |
$e285db2e,$cc17cccc,$6884572a,$42154242,$2c2dc2b4,$985a9898,$ed550e49,$a4aaa4a4, |
$7550885d,$28a02828,$86b831da,$5c6d5c5c,$6bed3f93,$f8c7f8f8,$c211a444,$86228686 |
),( |
$3078c018,$601818d8,$46af0523,$8c232326,$91f97ec6,$3fc6c6b8,$cd6f13e8,$87e8e8fb, |
$13a14c87,$268787cb,$6d62a9b8,$dab8b811,$02050801,$04010109,$9e6e424f,$214f4f0d, |
$6ceead36,$d836369b,$510459a6,$a2a6a6ff,$b9bdded2,$6fd2d20c,$f706fbf5,$f3f5f50e, |
$f280ef79,$f9797996,$dece5f6f,$a16f6f30,$3feffc91,$7e91916d,$a407aa52,$555252f8, |
$c0fd2760,$9d606047,$657689bc,$cabcbc35,$2bcdac9b,$569b9b37,$018c048e,$028e8e8a, |
$5b1571a3,$b6a3a3d2,$183c600c,$300c0c6c,$f68aff7b,$f17b7b84,$6ae1b535,$d4353580, |
$3a69e81d,$741d1df5,$dd4753e0,$a7e0e0b3,$b3acf6d7,$7bd7d721,$99ed5ec2,$2fc2c29c, |
$5c966d2e,$b82e2e43,$967a624b,$314b4b29,$e121a3fe,$dffefe5d,$ae168257,$415757d5, |
$2a41a815,$541515bd,$eeb69f77,$c17777e8,$6eeba537,$dc373792,$d7567be5,$b3e5e59e, |
$23d98c9f,$469f9f13,$fd17d3f0,$e7f0f023,$947f6a4a,$354a4a20,$a9959eda,$4fdada44, |
$b025fa58,$7d5858a2,$8fca06c9,$03c9c9cf,$528d5529,$a429297c,$1422500a,$280a0a5a, |
$7f4fe1b1,$feb1b150,$5d1a69a0,$baa0a0c9,$d6da7f6b,$b16b6b14,$17ab5c85,$2e8585d9, |
$677381bd,$cebdbd3c,$ba34d25d,$695d5d8f,$20508010,$40101090,$f503f3f4,$f7f4f407, |
$8bc016cb,$0bcbcbdd,$7cc6ed3e,$f83e3ed3,$0a112805,$1405052d,$cee61f67,$81676778, |
$d55373e4,$b7e4e497,$4ebb2527,$9c272702,$82583241,$19414173,$0b9d2c8b,$168b8ba7, |
$530151a7,$a6a7a7f6,$fa94cf7d,$e97d7db2,$37fbdc95,$6e959549,$ad9f8ed8,$47d8d856, |
$eb308bfb,$cbfbfb70,$c17123ee,$9feeeecd,$f891c77c,$ed7c7cbb,$cce31766,$85666671, |
$a78ea6dd,$53dddd7b,$2e4bb817,$5c1717af,$8e460247,$01474745,$21dc849e,$429e9e1a, |
$89c51eca,$0fcacad4,$5a99752d,$b42d2d58,$637991bf,$c6bfbf2e,$0e1b3807,$1c07073f, |
$472301ad,$8eadadac,$b42fea5a,$755a5ab0,$1bb56c83,$368383ef,$66ff8533,$cc3333b6, |
$c6f23f63,$9163635c,$040a1002,$08020212,$493839aa,$92aaaa93,$e2a8af71,$d97171de, |
$8dcf0ec8,$07c8c8c6,$327dc819,$641919d1,$92707249,$3949493b,$af9a86d9,$43d9d95f, |
$f91dc3f2,$eff2f231,$db484be3,$abe3e3a8,$b62ae25b,$715b5bb9,$0d923488,$1a8888bc, |
$29c8a49a,$529a9a3e,$4cbe2d26,$9826260b,$64fa8d32,$c83232bf,$7d4ae9b0,$fab0b059, |
$cf6a1be9,$83e9e9f2,$1e33780f,$3c0f0f77,$b7a6e6d5,$73d5d533,$1dba7480,$3a8080f4, |
$617c99be,$c2bebe27,$87de26cd,$13cdcdeb,$68e4bd34,$d0343489,$90757a48,$3d484832, |
$e324abff,$dbffff54,$f48ff77a,$f57a7a8d,$3deaf490,$7a909064,$be3ec25f,$615f5f9d, |
$40a01d20,$8020203d,$d0d56768,$bd68680f,$3472d01a,$681a1aca,$412c19ae,$82aeaeb7, |
$755ec9b4,$eab4b47d,$a8199a54,$4d5454ce,$3be5ec93,$7693937f,$44aa0d22,$8822222f, |
$c8e90764,$8d646463,$ff12dbf1,$e3f1f12a,$e6a2bf73,$d17373cc,$245a9012,$48121282, |
$805d3a40,$1d40407a,$10284008,$20080848,$9be856c3,$2bc3c395,$c57b33ec,$97ececdf, |
$ab9096db,$4bdbdb4d,$5f1f61a1,$bea1a1c0,$07831c8d,$0e8d8d91,$7ac9f53d,$f43d3dc8, |
$33f1cc97,$6697975b,$00000000,$00000000,$83d436cf,$1bcfcff9,$5687452b,$ac2b2b6e, |
$ecb39776,$c57676e1,$19b06482,$328282e6,$b1a9fed6,$7fd6d628,$3677d81b,$6c1b1bc3, |
$775bc1b5,$eeb5b574,$432911af,$86afafbe,$d4df776a,$b56a6a1d,$a00dba50,$5d5050ea, |
$8a4c1245,$09454557,$fb18cbf3,$ebf3f338,$60f09d30,$c03030ad,$c3742bef,$9befefc4, |
$7ec3e53f,$fc3f3fda,$aa1c9255,$495555c7,$591079a2,$b2a2a2db,$c96503ea,$8feaeae9, |
$caec0f65,$8965656a,$6968b9ba,$d2baba03,$5e93652f,$bc2f2f4a,$9de74ec0,$27c0c08e, |
$a181bede,$5fdede60,$386ce01c,$701c1cfc,$e72ebbfd,$d3fdfd46,$9a64524d,$294d4d1f, |
$39e0e492,$72929276,$eabc8f75,$c97575fa,$0c1e3006,$18060636,$0998248a,$128a8aae, |
$7940f9b2,$f2b2b24b,$d15963e6,$bfe6e685,$1c36700e,$380e0e7e,$3e63f81f,$7c1f1fe7, |
$c4f73762,$95626255,$b5a3eed4,$77d4d43a,$4d3229a8,$9aa8a881,$31f4c496,$62969652, |
$ef3a9bf9,$c3f9f962,$97f666c5,$33c5c5a3,$4ab13525,$94252510,$b220f259,$795959ab, |
$15ae5484,$2a8484d0,$e4a7b772,$d57272c5,$72ddd539,$e43939ec,$98615a4c,$2d4c4c16, |
$bc3bca5e,$655e5e94,$f085e778,$fd78789f,$70d8dd38,$e03838e5,$0586148c,$0a8c8c98, |
$bfb2c6d1,$63d1d117,$570b41a5,$aea5a5e4,$d94d43e2,$afe2e2a1,$c2f82f61,$9961614e, |
$7b45f1b3,$f6b3b342,$42a51521,$84212134,$25d6949c,$4a9c9c08,$3c66f01e,$781e1eee, |
$86522243,$11434361,$93fc76c7,$3bc7c7b1,$e52bb3fc,$d7fcfc4f,$08142004,$10040424, |
$a208b251,$595151e3,$2fc7bc99,$5e999925,$dac44f6d,$a96d6d22,$1a39680d,$340d0d65, |
$e93583fa,$cffafa79,$a384b6df,$5bdfdf69,$fc9bd77e,$e57e7ea9,$48b43d24,$90242419, |
$76d7c53b,$ec3b3bfe,$4b3d31ab,$96abab9a,$81d13ece,$1fcecef0,$22558811,$44111199, |
$03890c8f,$068f8f83,$9c6b4a4e,$254e4e04,$7351d1b7,$e6b7b766,$cb600beb,$8bebebe0, |
$78ccfd3c,$f03c3cc1,$1fbf7c81,$3e8181fd,$35fed494,$6a949440,$f30cebf7,$fbf7f71c, |
$6f67a1b9,$deb9b918,$265f9813,$4c13138b,$589c7d2c,$b02c2c51,$bbb8d6d3,$6bd3d305, |
$d35c6be7,$bbe7e78c,$dccb576e,$a56e6e39,$95f36ec4,$37c4c4aa,$060f1803,$0c03031b, |
$ac138a56,$455656dc,$88491a44,$0d44445e,$fe9edf7f,$e17f7fa0,$4f3721a9,$9ea9a988, |
$54824d2a,$a82a2a67,$6b6db1bb,$d6bbbb0a,$9fe246c1,$23c1c187,$a602a253,$515353f1, |
$a58baedc,$57dcdc72,$1627580b,$2c0b0b53,$27d39c9d,$4e9d9d01,$d8c1476c,$ad6c6c2b, |
$62f59531,$c43131a4,$e8b98774,$cd7474f3,$f109e3f6,$fff6f615,$8c430a46,$0546464c, |
$452609ac,$8aacaca5,$0f973c89,$1e8989b5,$2844a014,$501414b4,$df425be1,$a3e1e1ba, |
$2c4eb016,$581616a6,$74d2cd3a,$e83a3af7,$d2d06f69,$b9696906,$122d4809,$24090941, |
$e0ada770,$dd7070d7,$7154d9b6,$e2b6b66f,$bdb7ced0,$67d0d01e,$c77e3bed,$93ededd6, |
$85db2ecc,$17cccce2,$84572a42,$15424268,$2dc2b498,$5a98982c,$550e49a4,$aaa4a4ed, |
$50885d28,$a0282875,$b831da5c,$6d5c5c86,$ed3f93f8,$c7f8f86b,$11a44486,$228686c2 |
),( |
$78c01860,$1818d830,$af05238c,$23232646,$f97ec63f,$c6c6b891,$6f13e887,$e8e8fbcd, |
$a14c8726,$8787cb13,$62a9b8da,$b8b8116d,$05080104,$01010902,$6e424f21,$4f4f0d9e, |
$eead36d8,$36369b6c,$0459a6a2,$a6a6ff51,$bdded26f,$d2d20cb9,$06fbf5f3,$f5f50ef7, |
$80ef79f9,$797996f2,$ce5f6fa1,$6f6f30de,$effc917e,$91916d3f,$07aa5255,$5252f8a4, |
$fd27609d,$606047c0,$7689bcca,$bcbc3565,$cdac9b56,$9b9b372b,$8c048e02,$8e8e8a01, |
$1571a3b6,$a3a3d25b,$3c600c30,$0c0c6c18,$8aff7bf1,$7b7b84f6,$e1b535d4,$3535806a, |
$69e81d74,$1d1df53a,$4753e0a7,$e0e0b3dd,$acf6d77b,$d7d721b3,$ed5ec22f,$c2c29c99, |
$966d2eb8,$2e2e435c,$7a624b31,$4b4b2996,$21a3fedf,$fefe5de1,$16825741,$5757d5ae, |
$41a81554,$1515bd2a,$b69f77c1,$7777e8ee,$eba537dc,$3737926e,$567be5b3,$e5e59ed7, |
$d98c9f46,$9f9f1323,$17d3f0e7,$f0f023fd,$7f6a4a35,$4a4a2094,$959eda4f,$dada44a9, |
$25fa587d,$5858a2b0,$ca06c903,$c9c9cf8f,$8d5529a4,$29297c52,$22500a28,$0a0a5a14, |
$4fe1b1fe,$b1b1507f,$1a69a0ba,$a0a0c95d,$da7f6bb1,$6b6b14d6,$ab5c852e,$8585d917, |
$7381bdce,$bdbd3c67,$34d25d69,$5d5d8fba,$50801040,$10109020,$03f3f4f7,$f4f407f5, |
$c016cb0b,$cbcbdd8b,$c6ed3ef8,$3e3ed37c,$11280514,$05052d0a,$e61f6781,$676778ce, |
$5373e4b7,$e4e497d5,$bb25279c,$2727024e,$58324119,$41417382,$9d2c8b16,$8b8ba70b, |
$0151a7a6,$a7a7f653,$94cf7de9,$7d7db2fa,$fbdc956e,$95954937,$9f8ed847,$d8d856ad, |
$308bfbcb,$fbfb70eb,$7123ee9f,$eeeecdc1,$91c77ced,$7c7cbbf8,$e3176685,$666671cc, |
$8ea6dd53,$dddd7ba7,$4bb8175c,$1717af2e,$46024701,$4747458e,$dc849e42,$9e9e1a21, |
$c51eca0f,$cacad489,$99752db4,$2d2d585a,$7991bfc6,$bfbf2e63,$1b38071c,$07073f0e, |
$2301ad8e,$adadac47,$2fea5a75,$5a5ab0b4,$b56c8336,$8383ef1b,$ff8533cc,$3333b666, |
$f23f6391,$63635cc6,$0a100208,$02021204,$3839aa92,$aaaa9349,$a8af71d9,$7171dee2, |
$cf0ec807,$c8c8c68d,$7dc81964,$1919d132,$70724939,$49493b92,$9a86d943,$d9d95faf, |
$1dc3f2ef,$f2f231f9,$484be3ab,$e3e3a8db,$2ae25b71,$5b5bb9b6,$9234881a,$8888bc0d, |
$c8a49a52,$9a9a3e29,$be2d2698,$26260b4c,$fa8d32c8,$3232bf64,$4ae9b0fa,$b0b0597d, |
$6a1be983,$e9e9f2cf,$33780f3c,$0f0f771e,$a6e6d573,$d5d533b7,$ba74803a,$8080f41d, |
$7c99bec2,$bebe2761,$de26cd13,$cdcdeb87,$e4bd34d0,$34348968,$757a483d,$48483290, |
$24abffdb,$ffff54e3,$8ff77af5,$7a7a8df4,$eaf4907a,$9090643d,$3ec25f61,$5f5f9dbe, |
$a01d2080,$20203d40,$d56768bd,$68680fd0,$72d01a68,$1a1aca34,$2c19ae82,$aeaeb741, |
$5ec9b4ea,$b4b47d75,$199a544d,$5454cea8,$e5ec9376,$93937f3b,$aa0d2288,$22222f44, |
$e907648d,$646463c8,$12dbf1e3,$f1f12aff,$a2bf73d1,$7373cce6,$5a901248,$12128224, |
$5d3a401d,$40407a80,$28400820,$08084810,$e856c32b,$c3c3959b,$7b33ec97,$ececdfc5, |
$9096db4b,$dbdb4dab,$1f61a1be,$a1a1c05f,$831c8d0e,$8d8d9107,$c9f53df4,$3d3dc87a, |
$f1cc9766,$97975b33,$00000000,$00000000,$d436cf1b,$cfcff983,$87452bac,$2b2b6e56, |
$b39776c5,$7676e1ec,$b0648232,$8282e619,$a9fed67f,$d6d628b1,$77d81b6c,$1b1bc336, |
$5bc1b5ee,$b5b57477,$2911af86,$afafbe43,$df776ab5,$6a6a1dd4,$0dba505d,$5050eaa0, |
$4c124509,$4545578a,$18cbf3eb,$f3f338fb,$f09d30c0,$3030ad60,$742bef9b,$efefc4c3, |
$c3e53ffc,$3f3fda7e,$1c925549,$5555c7aa,$1079a2b2,$a2a2db59,$6503ea8f,$eaeae9c9, |
$ec0f6589,$65656aca,$68b9bad2,$baba0369,$93652fbc,$2f2f4a5e,$e74ec027,$c0c08e9d, |
$81bede5f,$dede60a1,$6ce01c70,$1c1cfc38,$2ebbfdd3,$fdfd46e7,$64524d29,$4d4d1f9a, |
$e0e49272,$92927639,$bc8f75c9,$7575faea,$1e300618,$0606360c,$98248a12,$8a8aae09, |
$40f9b2f2,$b2b24b79,$5963e6bf,$e6e685d1,$36700e38,$0e0e7e1c,$63f81f7c,$1f1fe73e, |
$f7376295,$626255c4,$a3eed477,$d4d43ab5,$3229a89a,$a8a8814d,$f4c49662,$96965231, |
$3a9bf9c3,$f9f962ef,$f666c533,$c5c5a397,$b1352594,$2525104a,$20f25979,$5959abb2, |
$ae54842a,$8484d015,$a7b772d5,$7272c5e4,$ddd539e4,$3939ec72,$615a4c2d,$4c4c1698, |
$3bca5e65,$5e5e94bc,$85e778fd,$78789ff0,$d8dd38e0,$3838e570,$86148c0a,$8c8c9805, |
$b2c6d163,$d1d117bf,$0b41a5ae,$a5a5e457,$4d43e2af,$e2e2a1d9,$f82f6199,$61614ec2, |
$45f1b3f6,$b3b3427b,$a5152184,$21213442,$d6949c4a,$9c9c0825,$66f01e78,$1e1eee3c, |
$52224311,$43436186,$fc76c73b,$c7c7b193,$2bb3fcd7,$fcfc4fe5,$14200410,$04042408, |
$08b25159,$5151e3a2,$c7bc995e,$9999252f,$c44f6da9,$6d6d22da,$39680d34,$0d0d651a, |
$3583facf,$fafa79e9,$84b6df5b,$dfdf69a3,$9bd77ee5,$7e7ea9fc,$b43d2490,$24241948, |
$d7c53bec,$3b3bfe76,$3d31ab96,$abab9a4b,$d13ece1f,$cecef081,$55881144,$11119922, |
$890c8f06,$8f8f8303,$6b4a4e25,$4e4e049c,$51d1b7e6,$b7b76673,$600beb8b,$ebebe0cb, |
$ccfd3cf0,$3c3cc178,$bf7c813e,$8181fd1f,$fed4946a,$94944035,$0cebf7fb,$f7f71cf3, |
$67a1b9de,$b9b9186f,$5f98134c,$13138b26,$9c7d2cb0,$2c2c5158,$b8d6d36b,$d3d305bb, |
$5c6be7bb,$e7e78cd3,$cb576ea5,$6e6e39dc,$f36ec437,$c4c4aa95,$0f18030c,$03031b06, |
$138a5645,$5656dcac,$491a440d,$44445e88,$9edf7fe1,$7f7fa0fe,$3721a99e,$a9a9884f, |
$824d2aa8,$2a2a6754,$6db1bbd6,$bbbb0a6b,$e246c123,$c1c1879f,$02a25351,$5353f1a6, |
$8baedc57,$dcdc72a5,$27580b2c,$0b0b5316,$d39c9d4e,$9d9d0127,$c1476cad,$6c6c2bd8, |
$f59531c4,$3131a462,$b98774cd,$7474f3e8,$09e3f6ff,$f6f615f1,$430a4605,$46464c8c, |
$2609ac8a,$acaca545,$973c891e,$8989b50f,$44a01450,$1414b428,$425be1a3,$e1e1badf, |
$4eb01658,$1616a62c,$d2cd3ae8,$3a3af774,$d06f69b9,$696906d2,$2d480924,$09094112, |
$ada770dd,$7070d7e0,$54d9b6e2,$b6b66f71,$b7ced067,$d0d01ebd,$7e3bed93,$ededd6c7, |
$db2ecc17,$cccce285,$572a4215,$42426884,$c2b4985a,$98982c2d,$0e49a4aa,$a4a4ed55, |
$885d28a0,$28287550,$31da5c6d,$5c5c86b8,$3f93f8c7,$f8f86bed,$a4448622,$8686c211 |
),( |
$c0186018,$18d83078,$05238c23,$232646af,$7ec63fc6,$c6b891f9,$13e887e8,$e8fbcd6f, |
$4c872687,$87cb13a1,$a9b8dab8,$b8116d62,$08010401,$01090205,$424f214f,$4f0d9e6e, |
$ad36d836,$369b6cee,$59a6a2a6,$a6ff5104,$ded26fd2,$d20cb9bd,$fbf5f3f5,$f50ef706, |
$ef79f979,$7996f280,$5f6fa16f,$6f30dece,$fc917e91,$916d3fef,$aa525552,$52f8a407, |
$27609d60,$6047c0fd,$89bccabc,$bc356576,$ac9b569b,$9b372bcd,$048e028e,$8e8a018c, |
$71a3b6a3,$a3d25b15,$600c300c,$0c6c183c,$ff7bf17b,$7b84f68a,$b535d435,$35806ae1, |
$e81d741d,$1df53a69,$53e0a7e0,$e0b3dd47,$f6d77bd7,$d721b3ac,$5ec22fc2,$c29c99ed, |
$6d2eb82e,$2e435c96,$624b314b,$4b29967a,$a3fedffe,$fe5de121,$82574157,$57d5ae16, |
$a8155415,$15bd2a41,$9f77c177,$77e8eeb6,$a537dc37,$37926eeb,$7be5b3e5,$e59ed756, |
$8c9f469f,$9f1323d9,$d3f0e7f0,$f023fd17,$6a4a354a,$4a20947f,$9eda4fda,$da44a995, |
$fa587d58,$58a2b025,$06c903c9,$c9cf8fca,$5529a429,$297c528d,$500a280a,$0a5a1422, |
$e1b1feb1,$b1507f4f,$69a0baa0,$a0c95d1a,$7f6bb16b,$6b14d6da,$5c852e85,$85d917ab, |
$81bdcebd,$bd3c6773,$d25d695d,$5d8fba34,$80104010,$10902050,$f3f4f7f4,$f407f503, |
$16cb0bcb,$cbdd8bc0,$ed3ef83e,$3ed37cc6,$28051405,$052d0a11,$1f678167,$6778cee6, |
$73e4b7e4,$e497d553,$25279c27,$27024ebb,$32411941,$41738258,$2c8b168b,$8ba70b9d, |
$51a7a6a7,$a7f65301,$cf7de97d,$7db2fa94,$dc956e95,$954937fb,$8ed847d8,$d856ad9f, |
$8bfbcbfb,$fb70eb30,$23ee9fee,$eecdc171,$c77ced7c,$7cbbf891,$17668566,$6671cce3, |
$a6dd53dd,$dd7ba78e,$b8175c17,$17af2e4b,$02470147,$47458e46,$849e429e,$9e1a21dc, |
$1eca0fca,$cad489c5,$752db42d,$2d585a99,$91bfc6bf,$bf2e6379,$38071c07,$073f0e1b, |
$01ad8ead,$adac4723,$ea5a755a,$5ab0b42f,$6c833683,$83ef1bb5,$8533cc33,$33b666ff, |
$3f639163,$635cc6f2,$10020802,$0212040a,$39aa92aa,$aa934938,$af71d971,$71dee2a8, |
$0ec807c8,$c8c68dcf,$c8196419,$19d1327d,$72493949,$493b9270,$86d943d9,$d95faf9a, |
$c3f2eff2,$f231f91d,$4be3abe3,$e3a8db48,$e25b715b,$5bb9b62a,$34881a88,$88bc0d92, |
$a49a529a,$9a3e29c8,$2d269826,$260b4cbe,$8d32c832,$32bf64fa,$e9b0fab0,$b0597d4a, |
$1be983e9,$e9f2cf6a,$780f3c0f,$0f771e33,$e6d573d5,$d533b7a6,$74803a80,$80f41dba, |
$99bec2be,$be27617c,$26cd13cd,$cdeb87de,$bd34d034,$348968e4,$7a483d48,$48329075, |
$abffdbff,$ff54e324,$f77af57a,$7a8df48f,$f4907a90,$90643dea,$c25f615f,$5f9dbe3e, |
$1d208020,$203d40a0,$6768bd68,$680fd0d5,$d01a681a,$1aca3472,$19ae82ae,$aeb7412c, |
$c9b4eab4,$b47d755e,$9a544d54,$54cea819,$ec937693,$937f3be5,$0d228822,$222f44aa, |
$07648d64,$6463c8e9,$dbf1e3f1,$f12aff12,$bf73d173,$73cce6a2,$90124812,$1282245a, |
$3a401d40,$407a805d,$40082008,$08481028,$56c32bc3,$c3959be8,$33ec97ec,$ecdfc57b, |
$96db4bdb,$db4dab90,$61a1bea1,$a1c05f1f,$1c8d0e8d,$8d910783,$f53df43d,$3dc87ac9, |
$cc976697,$975b33f1,$00000000,$00000000,$36cf1bcf,$cff983d4,$452bac2b,$2b6e5687, |
$9776c576,$76e1ecb3,$64823282,$82e619b0,$fed67fd6,$d628b1a9,$d81b6c1b,$1bc33677, |
$c1b5eeb5,$b574775b,$11af86af,$afbe4329,$776ab56a,$6a1dd4df,$ba505d50,$50eaa00d, |
$12450945,$45578a4c,$cbf3ebf3,$f338fb18,$9d30c030,$30ad60f0,$2bef9bef,$efc4c374, |
$e53ffc3f,$3fda7ec3,$92554955,$55c7aa1c,$79a2b2a2,$a2db5910,$03ea8fea,$eae9c965, |
$0f658965,$656acaec,$b9bad2ba,$ba036968,$652fbc2f,$2f4a5e93,$4ec027c0,$c08e9de7, |
$bede5fde,$de60a181,$e01c701c,$1cfc386c,$bbfdd3fd,$fd46e72e,$524d294d,$4d1f9a64, |
$e4927292,$927639e0,$8f75c975,$75faeabc,$30061806,$06360c1e,$248a128a,$8aae0998, |
$f9b2f2b2,$b24b7940,$63e6bfe6,$e685d159,$700e380e,$0e7e1c36,$f81f7c1f,$1fe73e63, |
$37629562,$6255c4f7,$eed477d4,$d43ab5a3,$29a89aa8,$a8814d32,$c4966296,$965231f4, |
$9bf9c3f9,$f962ef3a,$66c533c5,$c5a397f6,$35259425,$25104ab1,$f2597959,$59abb220, |
$54842a84,$84d015ae,$b772d572,$72c5e4a7,$d539e439,$39ec72dd,$5a4c2d4c,$4c169861, |
$ca5e655e,$5e94bc3b,$e778fd78,$789ff085,$dd38e038,$38e570d8,$148c0a8c,$8c980586, |
$c6d163d1,$d117bfb2,$41a5aea5,$a5e4570b,$43e2afe2,$e2a1d94d,$2f619961,$614ec2f8, |
$f1b3f6b3,$b3427b45,$15218421,$213442a5,$949c4a9c,$9c0825d6,$f01e781e,$1eee3c66, |
$22431143,$43618652,$76c73bc7,$c7b193fc,$b3fcd7fc,$fc4fe52b,$20041004,$04240814, |
$b2515951,$51e3a208,$bc995e99,$99252fc7,$4f6da96d,$6d22dac4,$680d340d,$0d651a39, |
$83facffa,$fa79e935,$b6df5bdf,$df69a384,$d77ee57e,$7ea9fc9b,$3d249024,$241948b4, |
$c53bec3b,$3bfe76d7,$31ab96ab,$ab9a4b3d,$3ece1fce,$cef081d1,$88114411,$11992255, |
$0c8f068f,$8f830389,$4a4e254e,$4e049c6b,$d1b7e6b7,$b7667351,$0beb8beb,$ebe0cb60, |
$fd3cf03c,$3cc178cc,$7c813e81,$81fd1fbf,$d4946a94,$944035fe,$ebf7fbf7,$f71cf30c, |
$a1b9deb9,$b9186f67,$98134c13,$138b265f,$7d2cb02c,$2c51589c,$d6d36bd3,$d305bbb8, |
$6be7bbe7,$e78cd35c,$576ea56e,$6e39dccb,$6ec437c4,$c4aa95f3,$18030c03,$031b060f, |
$8a564556,$56dcac13,$1a440d44,$445e8849,$df7fe17f,$7fa0fe9e,$21a99ea9,$a9884f37, |
$4d2aa82a,$2a675482,$b1bbd6bb,$bb0a6b6d,$46c123c1,$c1879fe2,$a2535153,$53f1a602, |
$aedc57dc,$dc72a58b,$580b2c0b,$0b531627,$9c9d4e9d,$9d0127d3,$476cad6c,$6c2bd8c1, |
$9531c431,$31a462f5,$8774cd74,$74f3e8b9,$e3f6fff6,$f615f109,$0a460546,$464c8c43, |
$09ac8aac,$aca54526,$3c891e89,$89b50f97,$a0145014,$14b42844,$5be1a3e1,$e1badf42, |
$b0165816,$16a62c4e,$cd3ae83a,$3af774d2,$6f69b969,$6906d2d0,$48092409,$0941122d, |
$a770dd70,$70d7e0ad,$d9b6e2b6,$b66f7154,$ced067d0,$d01ebdb7,$3bed93ed,$edd6c77e, |
$2ecc17cc,$cce285db,$2a421542,$42688457,$b4985a98,$982c2dc2,$49a4aaa4,$a4ed550e, |
$5d28a028,$28755088,$da5c6d5c,$5c86b831,$93f8c7f8,$f86bed3f,$44862286,$86c211a4 |
)); |
// by tol (to speed up calculation) |
Square_SEint: array[0..255] of UInt32 = ( |
177, 206, 195, 149, 90, 173, 231, 2, 77, 68, 251, 145, 12, 135, 161, 80, |
203, 103, 84, 221, 70, 143, 225, 78, 240, 253, 252, 235, 249, 196, 26, 110, |
94, 245, 204, 141, 28, 86, 67, 254, 7, 97, 248, 117, 89, 255, 3, 34, |
138, 209, 19, 238, 136, 0, 14, 52, 21, 128, 148, 227, 237, 181, 83, 35, |
75, 71, 23, 167, 144, 53, 171, 216, 184, 223, 79, 87, 154, 146, 219, 27, |
60, 200, 153, 4, 142, 224, 215, 125, 133, 187, 64, 44, 58, 69, 241, 66, |
101, 32, 65, 24, 114, 37, 147, 112, 54, 5, 242, 11, 163, 121, 236, 8, |
39, 49, 50, 182, 124, 176, 10, 115, 91, 123, 183, 129, 210, 13, 106, 38, |
158, 88, 156, 131, 116, 179, 172, 48, 122, 105, 119, 15, 174, 33, 222, 208, |
46, 151, 16, 164, 152, 168, 212, 104, 45, 98, 41, 109, 22, 73, 118, 199, |
232, 193, 150, 55, 229, 202, 244, 233, 99, 18, 194, 166, 20, 188, 211, 40, |
175, 47, 230, 36, 82, 198, 160, 9, 189, 140, 207, 93, 17, 95, 1, 197, |
159, 61, 162, 155, 201, 59, 190, 81, 25, 31, 63, 92, 178, 239, 74, 205, |
191, 186, 111, 100, 217, 243, 62, 180, 170, 220, 213, 6, 192, 126, 246, 102, |
108, 132, 113, 56, 185, 29, 127, 157, 72, 139, 42, 218, 165, 51, 130, 57, |
214, 120, 134, 250, 228, 43, 169, 30, 137, 96, 107, 234, 85, 76, 247, 226 |
); |
// by tol: rotated PHI array (to speed up calculation) |
Square_PHIr: array[0..3, 0..255] of UInt32 = ( |
($00000000,$03010102,$06020204,$05030306,$0C040408,$0F05050A,$0A06060C,$0907070E, |
$18080810,$1B090912,$1E0A0A14,$1D0B0B16,$140C0C18,$170D0D1A,$120E0E1C,$110F0F1E, |
$30101020,$33111122,$36121224,$35131326,$3C141428,$3F15152A,$3A16162C,$3917172E, |
$28181830,$2B191932,$2E1A1A34,$2D1B1B36,$241C1C38,$271D1D3A,$221E1E3C,$211F1F3E, |
$60202040,$63212142,$66222244,$65232346,$6C242448,$6F25254A,$6A26264C,$6927274E, |
$78282850,$7B292952,$7E2A2A54,$7D2B2B56,$742C2C58,$772D2D5A,$722E2E5C,$712F2F5E, |
$50303060,$53313162,$56323264,$55333366,$5C343468,$5F35356A,$5A36366C,$5937376E, |
$48383870,$4B393972,$4E3A3A74,$4D3B3B76,$443C3C78,$473D3D7A,$423E3E7C,$413F3F7E, |
$C0404080,$C3414182,$C6424284,$C5434386,$CC444488,$CF45458A,$CA46468C,$C947478E, |
$D8484890,$DB494992,$DE4A4A94,$DD4B4B96,$D44C4C98,$D74D4D9A,$D24E4E9C,$D14F4F9E, |
$F05050A0,$F35151A2,$F65252A4,$F55353A6,$FC5454A8,$FF5555AA,$FA5656AC,$F95757AE, |
$E85858B0,$EB5959B2,$EE5A5AB4,$ED5B5BB6,$E45C5CB8,$E75D5DBA,$E25E5EBC,$E15F5FBE, |
$A06060C0,$A36161C2,$A66262C4,$A56363C6,$AC6464C8,$AF6565CA,$AA6666CC,$A96767CE, |
$B86868D0,$BB6969D2,$BE6A6AD4,$BD6B6BD6,$B46C6CD8,$B76D6DDA,$B26E6EDC,$B16F6FDE, |
$907070E0,$937171E2,$967272E4,$957373E6,$9C7474E8,$9F7575EA,$9A7676EC,$997777EE, |
$887878F0,$8B7979F2,$8E7A7AF4,$8D7B7BF6,$847C7CF8,$877D7DFA,$827E7EFC,$817F7FFE, |
$758080F5,$768181F7,$738282F1,$708383F3,$798484FD,$7A8585FF,$7F8686F9,$7C8787FB, |
$6D8888E5,$6E8989E7,$6B8A8AE1,$688B8BE3,$618C8CED,$628D8DEF,$678E8EE9,$648F8FEB, |
$459090D5,$469191D7,$439292D1,$409393D3,$499494DD,$4A9595DF,$4F9696D9,$4C9797DB, |
$5D9898C5,$5E9999C7,$5B9A9AC1,$589B9BC3,$519C9CCD,$529D9DCF,$579E9EC9,$549F9FCB, |
$15A0A0B5,$16A1A1B7,$13A2A2B1,$10A3A3B3,$19A4A4BD,$1AA5A5BF,$1FA6A6B9,$1CA7A7BB, |
$0DA8A8A5,$0EA9A9A7,$0BAAAAA1,$08ABABA3,$01ACACAD,$02ADADAF,$07AEAEA9,$04AFAFAB, |
$25B0B095,$26B1B197,$23B2B291,$20B3B393,$29B4B49D,$2AB5B59F,$2FB6B699,$2CB7B79B, |
$3DB8B885,$3EB9B987,$3BBABA81,$38BBBB83,$31BCBC8D,$32BDBD8F,$37BEBE89,$34BFBF8B, |
$B5C0C075,$B6C1C177,$B3C2C271,$B0C3C373,$B9C4C47D,$BAC5C57F,$BFC6C679,$BCC7C77B, |
$ADC8C865,$AEC9C967,$ABCACA61,$A8CBCB63,$A1CCCC6D,$A2CDCD6F,$A7CECE69,$A4CFCF6B, |
$85D0D055,$86D1D157,$83D2D251,$80D3D353,$89D4D45D,$8AD5D55F,$8FD6D659,$8CD7D75B, |
$9DD8D845,$9ED9D947,$9BDADA41,$98DBDB43,$91DCDC4D,$92DDDD4F,$97DEDE49,$94DFDF4B, |
$D5E0E035,$D6E1E137,$D3E2E231,$D0E3E333,$D9E4E43D,$DAE5E53F,$DFE6E639,$DCE7E73B, |
$CDE8E825,$CEE9E927,$CBEAEA21,$C8EBEB23,$C1ECEC2D,$C2EDED2F,$C7EEEE29,$C4EFEF2B, |
$E5F0F015,$E6F1F117,$E3F2F211,$E0F3F313,$E9F4F41D,$EAF5F51F,$EFF6F619,$ECF7F71B, |
$FDF8F805,$FEF9F907,$FBFAFA01,$F8FBFB03,$F1FCFC0D,$F2FDFD0F,$F7FEFE09,$F4FFFF0B), |
($00000000,$01010203,$02020406,$03030605,$0404080C,$05050A0F,$06060C0A,$07070E09, |
$08081018,$0909121B,$0A0A141E,$0B0B161D,$0C0C1814,$0D0D1A17,$0E0E1C12,$0F0F1E11, |
$10102030,$11112233,$12122436,$13132635,$1414283C,$15152A3F,$16162C3A,$17172E39, |
$18183028,$1919322B,$1A1A342E,$1B1B362D,$1C1C3824,$1D1D3A27,$1E1E3C22,$1F1F3E21, |
$20204060,$21214263,$22224466,$23234665,$2424486C,$25254A6F,$26264C6A,$27274E69, |
$28285078,$2929527B,$2A2A547E,$2B2B567D,$2C2C5874,$2D2D5A77,$2E2E5C72,$2F2F5E71, |
$30306050,$31316253,$32326456,$33336655,$3434685C,$35356A5F,$36366C5A,$37376E59, |
$38387048,$3939724B,$3A3A744E,$3B3B764D,$3C3C7844,$3D3D7A47,$3E3E7C42,$3F3F7E41, |
$404080C0,$414182C3,$424284C6,$434386C5,$444488CC,$45458ACF,$46468CCA,$47478EC9, |
$484890D8,$494992DB,$4A4A94DE,$4B4B96DD,$4C4C98D4,$4D4D9AD7,$4E4E9CD2,$4F4F9ED1, |
$5050A0F0,$5151A2F3,$5252A4F6,$5353A6F5,$5454A8FC,$5555AAFF,$5656ACFA,$5757AEF9, |
$5858B0E8,$5959B2EB,$5A5AB4EE,$5B5BB6ED,$5C5CB8E4,$5D5DBAE7,$5E5EBCE2,$5F5FBEE1, |
$6060C0A0,$6161C2A3,$6262C4A6,$6363C6A5,$6464C8AC,$6565CAAF,$6666CCAA,$6767CEA9, |
$6868D0B8,$6969D2BB,$6A6AD4BE,$6B6BD6BD,$6C6CD8B4,$6D6DDAB7,$6E6EDCB2,$6F6FDEB1, |
$7070E090,$7171E293,$7272E496,$7373E695,$7474E89C,$7575EA9F,$7676EC9A,$7777EE99, |
$7878F088,$7979F28B,$7A7AF48E,$7B7BF68D,$7C7CF884,$7D7DFA87,$7E7EFC82,$7F7FFE81, |
$8080F575,$8181F776,$8282F173,$8383F370,$8484FD79,$8585FF7A,$8686F97F,$8787FB7C, |
$8888E56D,$8989E76E,$8A8AE16B,$8B8BE368,$8C8CED61,$8D8DEF62,$8E8EE967,$8F8FEB64, |
$9090D545,$9191D746,$9292D143,$9393D340,$9494DD49,$9595DF4A,$9696D94F,$9797DB4C, |
$9898C55D,$9999C75E,$9A9AC15B,$9B9BC358,$9C9CCD51,$9D9DCF52,$9E9EC957,$9F9FCB54, |
$A0A0B515,$A1A1B716,$A2A2B113,$A3A3B310,$A4A4BD19,$A5A5BF1A,$A6A6B91F,$A7A7BB1C, |
$A8A8A50D,$A9A9A70E,$AAAAA10B,$ABABA308,$ACACAD01,$ADADAF02,$AEAEA907,$AFAFAB04, |
$B0B09525,$B1B19726,$B2B29123,$B3B39320,$B4B49D29,$B5B59F2A,$B6B6992F,$B7B79B2C, |
$B8B8853D,$B9B9873E,$BABA813B,$BBBB8338,$BCBC8D31,$BDBD8F32,$BEBE8937,$BFBF8B34, |
$C0C075B5,$C1C177B6,$C2C271B3,$C3C373B0,$C4C47DB9,$C5C57FBA,$C6C679BF,$C7C77BBC, |
$C8C865AD,$C9C967AE,$CACA61AB,$CBCB63A8,$CCCC6DA1,$CDCD6FA2,$CECE69A7,$CFCF6BA4, |
$D0D05585,$D1D15786,$D2D25183,$D3D35380,$D4D45D89,$D5D55F8A,$D6D6598F,$D7D75B8C, |
$D8D8459D,$D9D9479E,$DADA419B,$DBDB4398,$DCDC4D91,$DDDD4F92,$DEDE4997,$DFDF4B94, |
$E0E035D5,$E1E137D6,$E2E231D3,$E3E333D0,$E4E43DD9,$E5E53FDA,$E6E639DF,$E7E73BDC, |
$E8E825CD,$E9E927CE,$EAEA21CB,$EBEB23C8,$ECEC2DC1,$EDED2FC2,$EEEE29C7,$EFEF2BC4, |
$F0F015E5,$F1F117E6,$F2F211E3,$F3F313E0,$F4F41DE9,$F5F51FEA,$F6F619EF,$F7F71BEC, |
$F8F805FD,$F9F907FE,$FAFA01FB,$FBFB03F8,$FCFC0DF1,$FDFD0FF2,$FEFE09F7,$FFFF0BF4), |
($00000000,$01020301,$02040602,$03060503,$04080C04,$050A0F05,$060C0A06,$070E0907, |
$08101808,$09121B09,$0A141E0A,$0B161D0B,$0C18140C,$0D1A170D,$0E1C120E,$0F1E110F, |
$10203010,$11223311,$12243612,$13263513,$14283C14,$152A3F15,$162C3A16,$172E3917, |
$18302818,$19322B19,$1A342E1A,$1B362D1B,$1C38241C,$1D3A271D,$1E3C221E,$1F3E211F, |
$20406020,$21426321,$22446622,$23466523,$24486C24,$254A6F25,$264C6A26,$274E6927, |
$28507828,$29527B29,$2A547E2A,$2B567D2B,$2C58742C,$2D5A772D,$2E5C722E,$2F5E712F, |
$30605030,$31625331,$32645632,$33665533,$34685C34,$356A5F35,$366C5A36,$376E5937, |
$38704838,$39724B39,$3A744E3A,$3B764D3B,$3C78443C,$3D7A473D,$3E7C423E,$3F7E413F, |
$4080C040,$4182C341,$4284C642,$4386C543,$4488CC44,$458ACF45,$468CCA46,$478EC947, |
$4890D848,$4992DB49,$4A94DE4A,$4B96DD4B,$4C98D44C,$4D9AD74D,$4E9CD24E,$4F9ED14F, |
$50A0F050,$51A2F351,$52A4F652,$53A6F553,$54A8FC54,$55AAFF55,$56ACFA56,$57AEF957, |
$58B0E858,$59B2EB59,$5AB4EE5A,$5BB6ED5B,$5CB8E45C,$5DBAE75D,$5EBCE25E,$5FBEE15F, |
$60C0A060,$61C2A361,$62C4A662,$63C6A563,$64C8AC64,$65CAAF65,$66CCAA66,$67CEA967, |
$68D0B868,$69D2BB69,$6AD4BE6A,$6BD6BD6B,$6CD8B46C,$6DDAB76D,$6EDCB26E,$6FDEB16F, |
$70E09070,$71E29371,$72E49672,$73E69573,$74E89C74,$75EA9F75,$76EC9A76,$77EE9977, |
$78F08878,$79F28B79,$7AF48E7A,$7BF68D7B,$7CF8847C,$7DFA877D,$7EFC827E,$7FFE817F, |
$80F57580,$81F77681,$82F17382,$83F37083,$84FD7984,$85FF7A85,$86F97F86,$87FB7C87, |
$88E56D88,$89E76E89,$8AE16B8A,$8BE3688B,$8CED618C,$8DEF628D,$8EE9678E,$8FEB648F, |
$90D54590,$91D74691,$92D14392,$93D34093,$94DD4994,$95DF4A95,$96D94F96,$97DB4C97, |
$98C55D98,$99C75E99,$9AC15B9A,$9BC3589B,$9CCD519C,$9DCF529D,$9EC9579E,$9FCB549F, |
$A0B515A0,$A1B716A1,$A2B113A2,$A3B310A3,$A4BD19A4,$A5BF1AA5,$A6B91FA6,$A7BB1CA7, |
$A8A50DA8,$A9A70EA9,$AAA10BAA,$ABA308AB,$ACAD01AC,$ADAF02AD,$AEA907AE,$AFAB04AF, |
$B09525B0,$B19726B1,$B29123B2,$B39320B3,$B49D29B4,$B59F2AB5,$B6992FB6,$B79B2CB7, |
$B8853DB8,$B9873EB9,$BA813BBA,$BB8338BB,$BC8D31BC,$BD8F32BD,$BE8937BE,$BF8B34BF, |
$C075B5C0,$C177B6C1,$C271B3C2,$C373B0C3,$C47DB9C4,$C57FBAC5,$C679BFC6,$C77BBCC7, |
$C865ADC8,$C967AEC9,$CA61ABCA,$CB63A8CB,$CC6DA1CC,$CD6FA2CD,$CE69A7CE,$CF6BA4CF, |
$D05585D0,$D15786D1,$D25183D2,$D35380D3,$D45D89D4,$D55F8AD5,$D6598FD6,$D75B8CD7, |
$D8459DD8,$D9479ED9,$DA419BDA,$DB4398DB,$DC4D91DC,$DD4F92DD,$DE4997DE,$DF4B94DF, |
$E035D5E0,$E137D6E1,$E231D3E2,$E333D0E3,$E43DD9E4,$E53FDAE5,$E639DFE6,$E73BDCE7, |
$E825CDE8,$E927CEE9,$EA21CBEA,$EB23C8EB,$EC2DC1EC,$ED2FC2ED,$EE29C7EE,$EF2BC4EF, |
$F015E5F0,$F117E6F1,$F211E3F2,$F313E0F3,$F41DE9F4,$F51FEAF5,$F619EFF6,$F71BECF7, |
$F805FDF8,$F907FEF9,$FA01FBFA,$FB03F8FB,$FC0DF1FC,$FD0FF2FD,$FE09F7FE,$FF0BF4FF), |
($00000000,$02030101,$04060202,$06050303,$080C0404,$0A0F0505,$0C0A0606,$0E090707, |
$10180808,$121B0909,$141E0A0A,$161D0B0B,$18140C0C,$1A170D0D,$1C120E0E,$1E110F0F, |
$20301010,$22331111,$24361212,$26351313,$283C1414,$2A3F1515,$2C3A1616,$2E391717, |
$30281818,$322B1919,$342E1A1A,$362D1B1B,$38241C1C,$3A271D1D,$3C221E1E,$3E211F1F, |
$40602020,$42632121,$44662222,$46652323,$486C2424,$4A6F2525,$4C6A2626,$4E692727, |
$50782828,$527B2929,$547E2A2A,$567D2B2B,$58742C2C,$5A772D2D,$5C722E2E,$5E712F2F, |
$60503030,$62533131,$64563232,$66553333,$685C3434,$6A5F3535,$6C5A3636,$6E593737, |
$70483838,$724B3939,$744E3A3A,$764D3B3B,$78443C3C,$7A473D3D,$7C423E3E,$7E413F3F, |
$80C04040,$82C34141,$84C64242,$86C54343,$88CC4444,$8ACF4545,$8CCA4646,$8EC94747, |
$90D84848,$92DB4949,$94DE4A4A,$96DD4B4B,$98D44C4C,$9AD74D4D,$9CD24E4E,$9ED14F4F, |
$A0F05050,$A2F35151,$A4F65252,$A6F55353,$A8FC5454,$AAFF5555,$ACFA5656,$AEF95757, |
$B0E85858,$B2EB5959,$B4EE5A5A,$B6ED5B5B,$B8E45C5C,$BAE75D5D,$BCE25E5E,$BEE15F5F, |
$C0A06060,$C2A36161,$C4A66262,$C6A56363,$C8AC6464,$CAAF6565,$CCAA6666,$CEA96767, |
$D0B86868,$D2BB6969,$D4BE6A6A,$D6BD6B6B,$D8B46C6C,$DAB76D6D,$DCB26E6E,$DEB16F6F, |
$E0907070,$E2937171,$E4967272,$E6957373,$E89C7474,$EA9F7575,$EC9A7676,$EE997777, |
$F0887878,$F28B7979,$F48E7A7A,$F68D7B7B,$F8847C7C,$FA877D7D,$FC827E7E,$FE817F7F, |
$F5758080,$F7768181,$F1738282,$F3708383,$FD798484,$FF7A8585,$F97F8686,$FB7C8787, |
$E56D8888,$E76E8989,$E16B8A8A,$E3688B8B,$ED618C8C,$EF628D8D,$E9678E8E,$EB648F8F, |
$D5459090,$D7469191,$D1439292,$D3409393,$DD499494,$DF4A9595,$D94F9696,$DB4C9797, |
$C55D9898,$C75E9999,$C15B9A9A,$C3589B9B,$CD519C9C,$CF529D9D,$C9579E9E,$CB549F9F, |
$B515A0A0,$B716A1A1,$B113A2A2,$B310A3A3,$BD19A4A4,$BF1AA5A5,$B91FA6A6,$BB1CA7A7, |
$A50DA8A8,$A70EA9A9,$A10BAAAA,$A308ABAB,$AD01ACAC,$AF02ADAD,$A907AEAE,$AB04AFAF, |
$9525B0B0,$9726B1B1,$9123B2B2,$9320B3B3,$9D29B4B4,$9F2AB5B5,$992FB6B6,$9B2CB7B7, |
$853DB8B8,$873EB9B9,$813BBABA,$8338BBBB,$8D31BCBC,$8F32BDBD,$8937BEBE,$8B34BFBF, |
$75B5C0C0,$77B6C1C1,$71B3C2C2,$73B0C3C3,$7DB9C4C4,$7FBAC5C5,$79BFC6C6,$7BBCC7C7, |
$65ADC8C8,$67AEC9C9,$61ABCACA,$63A8CBCB,$6DA1CCCC,$6FA2CDCD,$69A7CECE,$6BA4CFCF, |
$5585D0D0,$5786D1D1,$5183D2D2,$5380D3D3,$5D89D4D4,$5F8AD5D5,$598FD6D6,$5B8CD7D7, |
$459DD8D8,$479ED9D9,$419BDADA,$4398DBDB,$4D91DCDC,$4F92DDDD,$4997DEDE,$4B94DFDF, |
$35D5E0E0,$37D6E1E1,$31D3E2E2,$33D0E3E3,$3DD9E4E4,$3FDAE5E5,$39DFE6E6,$3BDCE7E7, |
$25CDE8E8,$27CEE9E9,$21CBEAEA,$23C8EBEB,$2DC1ECEC,$2FC2EDED,$29C7EEEE,$2BC4EFEF, |
$15E5F0F0,$17E6F1F1,$11E3F2F2,$13E0F3F3,$1DE9F4F4,$1FEAF5F5,$19EFF6F6,$1BECF7F7, |
$05FDF8F8,$07FEF9F9,$01FBFAFA,$03F8FBFB,$0DF1FCFC,$0FF2FDFD,$09F7FEFE,$0BF4FFFF) |
); |
{$IFDEF RESTORE_RANGECHECKS}{$R+}{$ENDIF} |
{$IFDEF RESTORE_OVERFLOWCHECKS}{$Q+}{$ENDIF} |
/// <summary> |
/// Constant used in the Keccak/SHA3 permutation. The 24 in the array size |
/// definition is most likely the same as the cKeccakNumberOfRounds constants |
/// in THash_SHA3Base |
/// </summary> |
KeccakF1600RoundConstants_int2: array[0..2*24-1] of longint = |
(Int32($00000001), Int32($00000000), |
Int32($00000000), Int32($00000089), |
Int32($00000000), Int32($8000008b), |
Int32($00000000), Int32($80008080), |
Int32($00000001), Int32($0000008b), |
Int32($00000001), Int32($00008000), |
Int32($00000001), Int32($80008088), |
Int32($00000001), Int32($80000082), |
Int32($00000000), Int32($0000000b), |
Int32($00000000), Int32($0000000a), |
Int32($00000001), Int32($00008082), |
Int32($00000000), Int32($00008003), |
Int32($00000001), Int32($0000808b), |
Int32($00000001), Int32($8000000b), |
Int32($00000001), Int32($8000008a), |
Int32($00000001), Int32($80000081), |
Int32($00000000), Int32($80000081), |
Int32($00000000), Int32($80000008), |
Int32($00000000), Int32($00000083), |
Int32($00000000), Int32($80008003), |
Int32($00000001), Int32($80008088), |
Int32($00000000), Int32($80000088), |
Int32($00000001), Int32($00008000), |
Int32($00000000), Int32($80008082)); |
implementation |
end. |
/trunk/Decoder5/VCL_DEC/DECFormat.pas |
---|
0,0 → 1,2126 |
{***************************************************************************** |
The DEC team (see file NOTICE.txt) licenses this file |
to you under the Apache License, Version 2.0 (the |
"License"); you may not use this file except in compliance |
with the License. A copy of this licence is found in the root directory |
of this project in the file LICENCE.txt or alternatively 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. |
*****************************************************************************} |
/// <summary> |
/// This unit provides a standardisized way for applying format conversions |
/// to data |
/// </summary> |
unit DECFormat; |
{$INCLUDE DECOptions.inc} |
interface |
uses |
{$IFDEF FPC} |
SysUtils, Classes, |
{$ELSE} |
System.SysUtils, System.Classes, |
{$ENDIF} |
DECBaseClass, DECFormatBase, DECUtil; |
type |
/// <summary> |
/// wrapper (allows omitting DECFormatBase in user code) |
/// </summary> |
TDECFormat = DECFormatBase.TDECFormat; |
/// <summary> |
/// wrapper (allows omitting DECFormatBase in user code) |
/// </summary> |
TDECFormatClass = DECFormatBase.TDECFormatClass; |
/// <summary> |
/// wrapper (allows omitting DECFormatBase in user code) |
/// </summary> |
TFormat_Copy = DECFormatBase.TFormat_Copy; |
TFormat_HEX = class; |
TFormat_HEXL = class; |
TFormat_Base16 = class; |
TFormat_Base16L = class; |
TFormat_DECMIME32 = class; |
TFormat_Base32 = class; |
TFormat_Base64 = class; |
TFormat_MIME64 = class; |
TFormat_Radix64 = class; |
TFormat_PGP = class; |
TFormat_BCryptBSD = class; |
TFormat_UU = class; |
TFormat_XX = class; |
TFormat_ESCAPE = class; |
TFormat_BigEndian16 = class; |
TFormat_BigEndian32 = class; |
/// <summary> |
/// Hexadecimal in Uppercase, Base16, see http://tools.ietf.org/html/rfc4648 |
/// </summary> |
TFormat_HEX = class(TDECFormat) |
protected |
class procedure DoEncode(const Source; var Dest: TBytes; Size: Integer); override; |
/// <exception cref="EDECFormatException"> |
/// Exception raised if there is a failure in the data format. |
/// </exception> |
class procedure DoDecode(const Source; var Dest: TBytes; Size: Integer); override; |
class function DoIsValid(const Data; Size: Integer): Boolean; override; |
public |
class function CharTableBinary: TBytes; virtual; |
end; |
/// <summary> |
/// Hexadecimal in lowercase, Base16, see http://tools.ietf.org/html/rfc4648 |
/// </summary> |
TFormat_HEXL = class(TFormat_HEX) |
public |
class function CharTableBinary: TBytes; override; |
end; |
/// <summary> |
/// Same as TFormat_HEX, use TFormat_HEX instead |
/// </summary> |
TFormat_Base16 = class(TFormat_HEX) |
end deprecated 'Use TFormat_HEX instead'; |
/// <summary> |
/// Same as TFormat_HEXL, use TFormat_HEXL instead |
/// </summary> |
TFormat_Base16L = class(TFormat_HEXL) |
end deprecated 'Use TFormat_HEXL instead'; |
/// <summary> |
/// Proprietary variant of MINE32, kept for backwards compatibility with old |
/// DEC versions |
/// </summary> |
/// <remarks> |
/// This formatting should only be used for supporting legacy projects which |
/// already use this format. It is being considered to be more or less deprecated. |
/// </remarks> |
TFormat_DECMIME32 = class(TFormat_HEX) |
protected |
/// <summary> |
/// Encodes data passed to this method in the proprietary DECMIME32 format. |
/// </summary> |
/// <remarks> |
/// This formatting should only be used for supporting legacy projects which |
/// already use this format. It is being considered to be more or less deprecated. |
/// </remarks> |
class procedure DoEncode(const Source; var Dest: TBytes; Size: Integer); override; |
/// <summary> |
/// Decodes data passed to this method in the proprietary DECMIME32 format |
/// into an array of normal bytes. |
/// </summary> |
/// <remarks> |
/// This formatting should only be used for supporting legacy projects which |
/// already use this format. It is being considered to be more or less deprecated. |
/// </remarks> |
class procedure DoDecode(const Source; var Dest: TBytes; Size: Integer); override; |
/// <summary> |
/// Checks if certain data adheres to the rules for this formatting. |
/// </summary> |
/// <remarks> |
/// This formatting should only be used for supporting legacy projects which |
/// already use this format. It is being considered to be more or less deprecated. |
/// </remarks> |
class function DoIsValid(const Data; Size: Integer): Boolean; override; |
public |
class function CharTableBinary: TBytes; override; |
end; |
/// <summary> |
/// Same as DECMIME32, which itsself should only be used for legacy projects |
/// </summary> |
TFormat_MIME32 = class(TFormat_DECMIME32) |
end deprecated 'Use TFormat_DECMIME32 instead'; |
/// <summary> |
/// Base32, see http://tools.ietf.org/html/rfc4648 |
/// </summary> |
TFormat_Base32 = class(TFormat_HEX) |
private const |
/// <summary> |
/// The data will be encoded using only these chars |
/// </summary> |
cBase32 : RawByteString = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'; |
/// <summary> |
/// Char used to fill up the output when performing encoding |
/// </summary> |
cPaddingChar = '='; |
private |
/// <summary> |
/// Table used for decoding, initialized on first use |
/// </summary> |
class var FBase32DecodeTable : array [#0..'z'] of Byte; |
/// <summary> |
/// Initializes the contents of FBase32DecodeTable, which is only required |
/// when DoDecode is called for the very first time. |
/// </summary> |
class procedure PrepareTable; |
protected |
class procedure DoEncode(const Source; var Dest: TBytes; Size: Integer); override; |
/// <exception cref="EDECFormatException"> |
/// Exception raised if the format of <c>Source</c> contains invalid data. |
/// </exception> |
class procedure DoDecode(const Source; var Dest: TBytes; Size: Integer); override; |
class function DoIsValid(const Data; Size: Integer): Boolean; override; |
public |
end; |
/// <summary> |
/// Base64 (without soft wraps), see http://tools.ietf.org/html/rfc4648 |
/// </summary> |
TFormat_Base64 = class(TFormat_HEX) |
protected |
class procedure DoEncode(const Source; var Dest: TBytes; Size: Integer); override; |
class procedure DoDecode(const Source; var Dest: TBytes; Size: Integer); override; |
class function DoIsValid(const Data; Size: Integer): Boolean; override; |
public |
class function CharTableBinary: TBytes; override; |
end; |
/// <summary> |
/// Same as TFormat_Base64, use TFormat_Base64 instead, kept for backwards |
/// compatibility only |
/// </summary> |
TFormat_MIME64 = class(TFormat_Base64) |
end deprecated 'Use TFormat_Base64 instead'; |
/// <summary> |
/// OpenPGP/PGP Base64 with 24-bit Checksums, see http://tools.ietf.org/html/rfc4880 |
/// </summary> |
TFormat_Radix64 = class(TFormat_Base64) |
/// <summary> |
/// Here the section needs to be private so that the variable can be accessed |
/// for initialization in the initialization section, which is needed since |
/// all functionality of the class is implemented as class methods |
/// </summary> |
private |
/// <summary> |
/// Maximum number of chars for one line of message text |
/// </summary> |
class var FCharsPerLine : UInt32; |
protected |
/// <summary> |
/// Extracts the CRC24 checksum from Radix64 encoded data |
/// </summary> |
/// <param name="Data"> |
/// Data to extract the checksum from |
/// </param> |
/// <param name="Size"> |
/// Size of the data in byte |
/// </param> |
/// <returns> |
/// CRC24 checksum if present, otherwise $FFFFFFFF |
/// </returns> |
class function DoExtractCRC(const Data; var Size: Integer): UInt32; |
/// <summary> |
/// If the data given exceeds FCharsPerLine, means the maximum allowed |
/// line lenth, a CR/LF pair needs to be inserted at that position. |
/// </summary> |
/// <param name="Source"> |
/// Data to insert a CR/LF into if necessary |
/// </param> |
/// <param name="Dest"> |
/// In this byte array the processed data will be returned |
/// </param> |
/// <param name="LineLength"> |
/// Maximum length of a line in byte. At this position the CR/LF will be |
/// inserted if the source passed in exceeds this length. |
/// </param> |
class procedure InsertCRLF(const Source: TBytes; var Dest: TBytes; LineLength: Integer); |
class procedure DoEncode(const Source; var Dest: TBytes; Size: Integer); override; |
/// <exception cref="EDECFormatException"> |
/// Exception raised if the calculated CRC value does not match the one |
/// given in <c>Source</c>. |
/// </exception> |
class procedure DoDecode(const Source; var Dest: TBytes; Size: Integer); override; |
class function DoIsValid(const Data; Size: Integer): Boolean; override; |
public |
/// <summary> |
/// Changes the number of chars after which a line break is being added |
/// </summary> |
/// <param name="Value"> |
/// Maximum number of chars for a single line. Values < 1 result in an |
/// EArgumentOutOfRangeException being raised |
/// </param> |
/// <exception cref="EArgumentOutOfRangeException"> |
/// Exception raised if <c>Value</c> is < 1. |
/// </exception> |
class procedure SetCharsPerLine(const Value: UInt32); |
/// <summary> |
/// Returns the number of chars after which a line break will be introduced |
/// </summary> |
/// <returns> |
/// Maximum number of chars per line |
/// </returns> |
/// <remarks> |
/// Cannot be a property, as properties cannot access class vars |
/// </remarks> |
class function GetCharsPerLine: UInt32; |
end; |
/// <summary> |
/// Same as TFormat_Radix64, use TFormat_Radix64 instead, kept for backwards |
/// compatibility only |
/// </summary> |
TFormat_PGP = class(TFormat_Radix64) |
end deprecated 'Use TFormat_Radix64 instead'; |
/// <summary> |
/// BCrypt's Radix64 variant |
/// </summary> |
TFormat_BCryptBSD = class(TFormat_Base64) |
protected |
/// <summary> |
/// Internal method for the actual format conversion. This method needs to |
/// be overridden in all the child classes. Converts into the format. |
/// </summary> |
/// <param name="Source"> |
/// Data to be converted |
/// </param> |
/// <param name="Dest"> |
/// Into this parameter the converted data will be written into. |
/// </param> |
/// <param name="Size"> |
/// Number of bytes from source which will get converted. |
/// </param> |
class procedure DoEncode(const Source; var Dest: TBytes; |
Size: Integer); override; |
/// <summary> |
/// Internal method for the actual format conversion. This method needs to |
/// be overridden in all the child classes. Converts from the format into |
/// the format the data had before encoding it. |
/// </summary> |
/// <param name="Source"> |
/// Data to be converted |
/// </param> |
/// <param name="Dest"> |
/// Into this parameter the converted data will be written into. |
/// </param> |
/// <param name="Size"> |
/// Number of bytes from source which will get converted. |
/// </param> |
class procedure DoDecode(const Source; var Dest: TBytes; |
Size: Integer); override; |
/// <summary> |
/// Internal method for checking whether all bytes of the data to be |
/// processed are valid for this particular formatting. This method needs |
/// to be overridden in all the child classes. |
/// </summary> |
/// <param name="Data"> |
/// Data to be checked |
/// </param> |
/// <param name="Size"> |
/// Number of bytes from data which will get checked. |
/// </param> |
class function DoIsValid(const Data; Size: Integer): Boolean; override; |
public |
class function CharTableBinary: TBytes; override; |
end; |
/// <summary> |
/// Unix UU format |
/// </summary> |
TFormat_UU = class(TDECFormat) |
protected |
class procedure DoEncode(const Source; var Dest: TBytes; Size: Integer); override; |
/// <exception cref="EDECFormatException"> |
/// Exception raised if the format of <c>Source</c> contains invalid data. |
/// </exception> |
class procedure DoDecode(const Source; var Dest: TBytes; Size: Integer); override; |
class function DoIsValid(const Data; Size: Integer): Boolean; override; |
public |
class function CharTableBinary: TBytes; virtual; |
end; |
/// <summary> |
/// Unix XX format |
/// </summary> |
TFormat_XX = class(TFormat_UU) |
public |
class function CharTableBinary: TBytes; override; |
end; |
/// <summary> |
/// Escaped format |
/// </summary> |
TFormat_ESCAPE = class(TDECFormat) |
protected |
class procedure DoEncode(const Source; var Dest: TBytes; Size: Integer); override; |
/// <exception cref="EDECFormatException"> |
/// Exception raised if the format of <c>Source</c> contains invalid data. |
/// </exception> |
class procedure DoDecode(const Source; var Dest: TBytes; Size: Integer); override; |
class function DoIsValid(const Data; Size: Integer): Boolean; override; |
public |
class function CharTableBinary: TBytes; virtual; |
end; |
/// <summary> |
/// Conversion from/to 16 bit big endian |
/// </summary> |
TFormat_BigEndian16 = class(TDECFormat) |
private |
class procedure DoSawp(const Source; var Dest: TBytes; Size: Integer); inline; |
protected |
class procedure DoEncode(const Source; var Dest: TBytes; Size: Integer); override; |
class procedure DoDecode(const Source; var Dest: TBytes; Size: Integer); override; |
class function DoIsValid(const Data; Size: Integer): Boolean; override; |
public |
end; |
/// <summary> |
/// Conversion from/to 32 bit big endian |
/// </summary> |
TFormat_BigEndian32 = class(TDECFormat) |
private |
class procedure DoSawp(const Source; var Dest: TBytes; Size: Integer); inline; |
protected |
class procedure DoEncode(const Source; var Dest: TBytes; Size: Integer); override; |
class procedure DoDecode(const Source; var Dest: TBytes; Size: Integer); override; |
class function DoIsValid(const Data; Size: Integer): Boolean; override; |
public |
end; |
/// <summary> |
/// Conversion from/to 64 bit big endian |
/// </summary> |
TFormat_BigEndian64 = class(TDECFormat) |
private |
class procedure DoSawp(const Source; var Dest: TBytes; Size: Integer); inline; |
protected |
class procedure DoEncode(const Source; var Dest: TBytes; Size: Integer); override; |
class procedure DoDecode(const Source; var Dest: TBytes; Size: Integer); override; |
class function DoIsValid(const Data; Size: Integer): Boolean; override; |
public |
end; |
implementation |
uses |
DECTypes, DECCRC; // needed by TFormat_Radix64 |
resourcestring |
sInvalidStringFormat = 'Input is not an valid %s format'; |
sInvalidInputCharacter = 'Invalid character (#%d) in input'; |
class function TFormat_HEX.CharTableBinary: TBytes; |
begin |
SetLength(result, 48); |
// special and skipped chars |
// '0123456789ABCDEFX$ abcdefhHx()[]{},;:-_/\*+"'''+CHR(9)+CHR(10)+CHR(13); |
{$IFDEF HAVE_ASSIGN_ARRAY} |
result := [$30, $31, $32, $33, $34, $35, $36, $37, $38, $39, $41, $42, $43, |
$44, $45, $46, $58, $24, $20, $61, $62, $63, $64, $65, $66, $68, |
$48, $78, $28, $29, $5B, $5D, $7B, $7D, $2C, $3B, $3A, $2D, $5F, |
$2F, $5C, $2A, $2B, $22, $27, $09, $0A, $0D]; |
{$ELSE} |
// Remove this initialisation variant as soon as XE7+ is the new minimum |
// supported Delphi version |
result[ 0]:=$30; |
result[ 1]:=$31; |
result[ 2]:=$32; |
result[ 3]:=$33; |
result[ 4]:=$34; |
result[ 5]:=$35; |
result[ 6]:=$36; |
result[ 7]:=$37; |
result[ 8]:=$38; |
result[ 9]:=$39; |
result[10]:=$41; |
result[11]:=$42; |
result[12]:=$43; |
result[13]:=$44; |
result[14]:=$45; |
result[15]:=$46; |
result[16]:=$58; |
result[17]:=$24; |
result[18]:=$20; |
result[19]:=$61; |
result[20]:=$62; |
result[21]:=$63; |
result[22]:=$64; |
result[23]:=$65; |
result[24]:=$66; |
result[25]:=$68; |
result[26]:=$48; |
result[27]:=$78; |
result[28]:=$28; |
result[29]:=$29; |
result[30]:=$5B; |
result[31]:=$5D; |
result[32]:=$7B; |
result[33]:=$7D; |
result[34]:=$2C; |
result[35]:=$3B; |
result[36]:=$3A; |
result[37]:=$2D; |
result[38]:=$5F; |
result[39]:=$2F; |
result[40]:=$5C; |
result[41]:=$2A; |
result[42]:=$2B; |
result[43]:=$22; |
result[44]:=$27; |
result[45]:=$09; |
result[46]:=$0A; |
result[47]:=$0D; |
{$ENDIF} |
end; |
class procedure TFormat_HEX.DoEncode(const Source; var Dest: TBytes; Size: Integer); |
var |
S : PByte; |
Table : TBytes; |
i : Integer; |
begin |
if Size <= 0 then Exit; |
SetLength(Dest, Size * 2); |
Table := CharTableBinary; |
S := PByte(@Source); |
i := 0; |
while Size > 0 do |
begin |
Dest[i] := Table[S^ shr 4]; |
Dest[i + 1] := Table[S^ and $F]; |
Inc(S); |
Dec(Size); |
Inc(i, 2); |
end; |
end; |
class procedure TFormat_HEX.DoDecode(const Source; var Dest: TBytes; Size: Integer); |
var |
S: PByte; |
D: PByte; |
T: TBytes; |
I,P: Integer; |
HasIdent: Boolean; |
begin |
SetLength(Dest, 0); |
if Size <= 0 then Exit; |
SetLength(Dest, Size div 2); // + 1); |
T := CharTableBinary; |
D := PByte(Dest); |
S := PByte(@Source); |
I := 0; |
HasIdent := False; |
while Size > 0 do |
begin |
P := TableFindBinary(S^, T, 18); |
if P < 0 then P := TableFindBinary(UpCaseBinary(S^), T, 16); |
if P < 0 then |
raise EDECFormatException.CreateResFmt(@sInvalidStringFormat, [self.GetShortClassName]); |
Inc(S); |
if P >= 0 then |
if P > 16 then |
begin |
if not HasIdent then |
begin |
HasIdent := True; |
I := 0; |
D := PByte(Dest); |
end; |
end |
else |
begin |
if Odd(I) then |
begin |
D^ := D^ or P; |
Inc(D); |
end |
else |
D^ := P shl 4; |
Inc(I); |
end; |
Dec(Size); |
end; |
end; |
class function TFormat_HEX.DoIsValid(const Data; Size: Integer): Boolean; |
var |
T: TBytes; |
S: PByte; |
begin |
if not odd(Size) then |
begin |
Result := True; |
T := CharTableBinary; |
S := @Data; |
while Result and (Size > 0) do |
begin |
if TableFindBinary(S^, T, length(T)) >= 0 then |
begin |
Inc(S); |
Dec(Size); |
end |
else |
Result := False; |
end; |
end |
else |
result := false; |
end; |
class function TFormat_HEXL.CharTableBinary: TBytes; |
begin |
SetLength(result, 48); |
// special and skipped chars |
// '0123456789abcdefX$ ABCDEFhHx()[]{},;:-_/\*+"'''+CHR(9)+CHR(10)+CHR(13); |
{$IFDEF HAVE_ASSIGN_ARRAY} |
result := [$30, $31, $32, $33, $34, $35, $36, $37, $38, $39, $61, $62, $63, |
$64, $65, $66, $68, $58, $24, $20, $41, $42, $43, $44, $45, $46, |
$48, $78, $28, $29, $5B, $5D, $7B, $7D, $2C, $3B, $3A, $2D, $5F, |
$2F, $5C, $2A, $2B, $22, $27, $09, $0A, $0D]; |
{$ELSE} |
// Remove this initialisation variant as soon as XE7+ is the new minimum |
// supported Delphi version |
result[ 0]:=$30; |
result[ 1]:=$31; |
result[ 2]:=$32; |
result[ 3]:=$33; |
result[ 4]:=$34; |
result[ 5]:=$35; |
result[ 6]:=$36; |
result[ 7]:=$37; |
result[ 8]:=$38; |
result[ 9]:=$39; |
result[10]:=$61; |
result[11]:=$62; |
result[12]:=$63; |
result[13]:=$64; |
result[14]:=$65; |
result[15]:=$66; |
result[16]:=$68; |
result[17]:=$58; |
result[18]:=$24; |
result[19]:=$20; |
result[20]:=$41; |
result[21]:=$42; |
result[22]:=$43; |
result[23]:=$44; |
result[24]:=$45; |
result[25]:=$46; |
result[26]:=$48; |
result[27]:=$78; |
result[28]:=$28; |
result[29]:=$29; |
result[30]:=$5B; |
result[31]:=$5D; |
result[32]:=$7B; |
result[33]:=$7D; |
result[34]:=$2C; |
result[35]:=$3B; |
result[36]:=$3A; |
result[37]:=$2D; |
result[38]:=$5F; |
result[39]:=$2F; |
result[40]:=$5C; |
result[41]:=$2A; |
result[42]:=$2B; |
result[43]:=$22; |
result[44]:=$27; |
result[45]:=$09; |
result[46]:=$0A; |
result[47]:=$0D; |
{$ENDIF} |
end; |
class function TFormat_DECMIME32.CharTableBinary: TBytes; |
begin |
// special and skipped chars |
// 'abcdefghijklnpqrstuwxyz123456789 =$()[]{},;:-_\*"'''+CHR(9)+CHR(10)+CHR(13); |
SetLength(result, 53); |
result := [$61, $62, $63, $64, $65, $66, $67, $68, $69, $6A, $6B, $6C, $6E, $70, |
$71, $72, $73, $74, $75, $77, $78, $79, $7A, $31, $32, $33, $34, $35, |
$36, $37, $38, $39, $20, $3D, $24, $28, $29, $5B, $5D, $7B, $7D, $2C, |
$3B, $3A, $2D, $5F, $5C, $2A, $22, $27, $09, $0A, $0D]; |
end; |
class procedure TFormat_DECMIME32.DoEncode(const Source; var Dest: TBytes; Size: Integer); |
var |
T : TBytes; |
Src : TBytes; |
S, D: PByte; |
i, n: Integer; |
begin |
SetLength(Dest, 0); |
if Size <= 0 then |
Exit; |
// The passed in source parameter has to be converted into an array with |
// added additional 0 value. This is because in the original form a string was |
// being passed in as source parameter, which automatically contained a #00 at |
// the end and depending on length of the data passed in, the @S[i shr 3] index |
// calculation can result in an index which represents the last byte of the |
// source parameter. That one is accessed as PWord then which results in |
// reading the first byte behind that source parameter as well! This led to |
// wrong data errors in the unit tests. |
SetLength(Src, Size + 1); |
Move(Source, Src[0], Size); |
Src[length(Src)-1] := 0; |
Size := Size * 8; |
SetLength(Dest, Size div 5 + 5); |
D := @Dest[0]; |
T := CharTableBinary; |
S := @Src[0]; |
i := 0; n := 0; |
while i < Size do |
begin |
D^ := T[PWord(@S[i shr 3])^ shr (i and $7) and $1F]; |
Inc(D); |
Inc(i, 5); |
Inc(n); |
end; |
SetLength(Dest, n); |
SetLength(Src, 0); |
end; |
class function TFormat_DECMIME32.DoIsValid(const Data; Size: Integer): Boolean; |
var |
T: TBytes; |
S: PByte; |
begin |
Result := True; |
T := CharTableBinary; |
S := @Data; |
while Result and (Size > 0) do |
begin |
if TableFindBinary(S^, T, length(T)) >= 0 then |
begin |
Inc(S); |
Dec(Size); |
end |
else |
Result := False; |
end; |
end; |
class procedure TFormat_DECMIME32.DoDecode(const Source; var Dest: TBytes; Size: Integer); |
var |
T: TBytes; |
S: PByte; |
D: PByte; |
i, V: Integer; |
begin |
SetLength(Dest, 0); |
if Size <= 0 then |
Exit; |
Size := Size * 5; |
SetLength(Dest, Size div 8); |
T := CharTableBinary; |
S := @Source; |
D := @Dest[0]; |
FillChar(D^, Length(Dest), 0); |
i := 0; |
while i < Size do |
begin |
V := TableFindBinary(S^, T, 32); |
if V < 0 then |
V := TableFindBinary(UpCaseBinary(S^), T, 32); |
if V >= 0 then |
begin |
PWord(@D[i shr 3])^ := PWord(@D[i shr 3])^ or (V shl (i and $7)); |
Inc(i, 5); |
end |
else |
Dec(Size, 5); |
Inc(S); |
end; |
SetLength(Dest, Size div 8); |
end; |
class function TFormat_Base64.CharTableBinary: TBytes; |
begin |
// 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' + |
// ' $()[]{},;:-_\*"'''+CHR(9)+CHR(10)+CHR(13); // special and skipped chars |
SetLength(result, 85); |
result := [$41, $42, $43, $44, $45, $46, $47, $48, $49, $4A, $4B, $4C, $4D, |
$4E, $4F, $50, $51, $52, $53, $54, $55, $56, $57, $58, $59, $5A, |
$61, $62, $63, $64, $65, $66, $67, $68, $69, $6A, $6B, $6C, $6D, |
$6E, $6F, $70, $71, $72, $73, $74, $75, $76, $77, $78, $79, $7A, |
$30, $31, $32, $33, $34, $35, $36, $37, $38, $39, $2B, $2F, $3D, |
$20, $24, $28, $29, $5B, $5D, $7B, $7D, $2C, $3B, $3A, $2D, $5F, |
$5C, $2A, $22, $27, $09, $0A, $0D]; |
end; |
class procedure TFormat_Base64.DoEncode(const Source; var Dest: TBytes; Size: Integer); |
var |
T: TBytes; |
S: PByte; |
D: PByte; |
B: UInt32; |
i: Integer; |
n: Integer; |
begin |
SetLength(Dest, 0); |
if Size <= 0 then |
Exit; |
SetLength(Dest, Size * 4 div 3 + 4); |
T := CharTableBinary; |
S := @Source; |
D := @Dest[0]; |
n := 0; |
while Size >= 3 do |
begin |
Dec(Size, 3); |
B := Byte(S[0]) shl 16 or Byte(S[1]) shl 8 or Byte(S[2]); |
D[0] := T[B shr 18 and $3F]; |
D[1] := T[B shr 12 and $3F]; |
D[2] := T[B shr 6 and $3F]; |
D[3] := T[B and $3F]; |
Inc(D, 4); |
S := @S[3]; |
Inc(n, 4); |
end; |
while Size > 0 do |
begin |
B := 0; |
for i := 0 to 2 do |
begin |
B := B shl 8; |
if Size > 0 then |
begin |
B := B or Byte(S[0]); |
S := @S[1]; |
end; |
Dec(Size); |
end; |
for i := 3 downto 0 do |
begin |
if Size < 0 then |
begin |
D[i] := T[64]; |
Inc(Size); |
end |
else |
D[i] := T[B and $3F]; |
B := B shr 6; |
end; |
Inc(D, 4); |
Inc(n, 4); |
end; |
// original calculation was substract dest ptr d - start of dest |
SetLength(Dest, n); |
end; |
class procedure TFormat_Base64.DoDecode(const Source; var Dest: TBytes; Size: Integer); |
var |
T: TBytes; |
S: PByte; |
D, L: PByte; // 1) to make pointer arithmetic work 2) P/TByteArray is limited to 32768 bytes |
B: UInt32; |
i, j, n: Integer; |
begin |
SetLength(Dest, 0); |
if Size <= 0 then |
Exit; |
SetLength(Dest, Size); |
T := CharTableBinary; |
S := @Source; |
D := @Dest[0]; |
Move(Source, Dest[0], Size); |
L := S + Size; |
j := 0; |
n := 0; |
while S < L do |
begin |
B := 0; |
j := 4; |
while (j > 0) and (S < L) do |
begin |
i := TableFindBinary(S^, T, 65); |
Inc(S); |
if i >= 0 then |
begin |
if i < 64 then |
begin |
B := B shl 6 or Byte(i); |
Dec(j); |
end |
else |
L := S; |
end; |
end; |
if j > 0 then |
begin |
if j >= 4 then |
begin |
j := 0; |
Break; |
end |
else |
B := B shl (6 * j); |
end; |
i := 2; |
while i >= 0 do |
begin |
D[i] := Byte(B); |
B := B shr 8; |
Dec(i); |
end; |
Inc(D, 3); |
Inc(n, 3); |
end; |
SetLength(Dest, n-j); |
end; |
class function TFormat_Base64.DoIsValid(const Data; Size: Integer): Boolean; |
var |
S: PByte; |
begin |
Result := True; |
S := @Data; |
while Result and (Size > 0) do |
begin |
// A-Z, a-z, 0-9, +, = and / and CR/LF |
if S^ in [$41..$5A, $61..$7A, $2B, $2F..$39, $3D, $0D, $0A] then |
begin |
Inc(S); |
Dec(Size); |
end |
else |
Result := False; |
end; |
end; |
class function TFormat_Radix64.DoExtractCRC(const Data; var Size: Integer): UInt32; |
var |
L: PByte; // 1) to make pointer arithmetic work 2) P/TByteArray is limited to 32768 bytes |
C: Byte; |
R: TBytes; |
begin |
Result := $FFFFFFFF; |
C := CharTableBinary[64]; // get padding char, per default '=' |
L := PByte(@Data) + Size; |
while L <> @Data do |
begin |
if L^ = C then |
Break |
else |
Dec(L); // scan reverse for padding char |
end; |
if L - PByte(@Data) >= Size - 5 then // remaining chars must be > 4, e.g. '=XQRT' |
try |
Inc(L); |
inherited DoDecode(L^, R, Size - (L - PByte(@Data))); |
if Length(R) >= 3 then |
begin |
Result := 0; |
Move(R[0], Result, 3); |
Size := L - PByte(@Data); |
end; |
except |
end; |
end; |
class function TFormat_Radix64.DoIsValid(const Data; Size: Integer): Boolean; |
var |
crc24 : UInt32; |
Dest : TBytes; |
begin |
// Radix64 is like Base64 but with additional CRC24 checksum |
result := TFormat_Base64.IsValid(Data, Size); |
// Check contained checksum as well |
if result then |
begin |
crc24 := DoExtractCRC(Data, Size); |
// we need to decode, because it removes the CR/LF linebreaks which would |
// invalidate the checksum |
inherited DoDecode(Data, Dest, Size); |
if crc24 <> $FFFFFFFF then |
begin |
// recalc CRC and compare |
SwapBytes(crc24, 3); |
result := crc24 = CRCCalc(CRC_24, Dest[0], Length(Dest)); |
end |
else |
result := false; |
end; |
end; |
class function TFormat_Radix64.GetCharsPerLine: UInt32; |
begin |
result := FCharsPerLine; |
end; |
class procedure TFormat_Radix64.InsertCRLF(const Source: TBytes; var Dest: TBytes; LineLength: Integer); |
var |
S, D: PByte; |
i: Integer; |
begin |
i := Length(Source); |
if (LineLength <= 0) or (i <= LineLength) then |
begin |
SetLength(Dest, i); |
Move(Source[0], Dest[0], i); |
Exit; |
end; |
SetLength(Dest, i + i * 2 div LineLength + 2); |
S := @Source[0]; |
D := @Dest[0]; |
repeat |
Move(S^, D^, LineLength); |
Inc(S, LineLength); |
Inc(D, LineLength); |
D^ := Ord(#13); |
Inc(D); |
D^ := Ord(#10); |
Inc(D); |
Dec(i, LineLength); |
until i < LineLength; |
Move(S^, D^, i); |
Inc(D, i); |
SetLength(Dest, PByte(D) - PByte(Dest)); |
end; |
class procedure TFormat_Radix64.SetCharsPerLine(const Value: UInt32); |
begin |
if (Value > 0) then |
FCharsPerLine := Value |
else |
raise EArgumentOutOfRangeException.Create('Invalid number of chars per line: ' + |
IntToStr(Value)); |
end; |
class procedure TFormat_Radix64.DoEncode(const Source; var Dest: TBytes; Size: Integer); |
var |
TempData : TBytes; |
CRC : UInt32; |
CRCData : TBytes; |
Position : Integer; |
begin |
SetLength(Dest, 0); |
if Size <= 0 then |
Exit; |
// use Base64 |
inherited DoEncode(Source, TempData, Size); |
// split lines |
InsertCRLF(TempData, Dest, FCharsPerLine); |
SetLength(TempData, 0); |
CRC := CRCCalc(CRC_24, Source, Size); // calculate 24-bit Checksum |
SwapBytes(CRC, 3); // PGP use Big Endian |
// check and insert LF if needed |
Position := Length(Dest) - 1; // last char |
if Dest[Position] <> $0A then |
begin |
// insert CR needed, CRC must be in the next line |
Position := Length(Dest); |
SetLength(Dest, Position + 2); |
Dest[Position] := $0D; // append CR |
Dest[Position+1] := $0A; // append LF |
end; |
// encode CRC with Base64 too |
inherited DoEncode(CRC, CRCData, 3); |
// if CRC is too long insert CRLF. -1 to compensate the later added = char |
InsertCRLF(CRCData, TempData, FCharsPerLine - 1); |
CRCData := TempData; |
// append encoded CRC |
Position := Length(Dest); |
SetLength(Dest, Position + 1 + Length(CRCData)); |
Dest[Position] := Ord('='); |
Move(CRCData[0], Dest[Position + 1], Length(CRCData)); |
end; |
class procedure TFormat_Radix64.DoDecode(const Source; var Dest: TBytes; Size: Integer); |
var |
CRC: UInt32; |
begin |
SetLength(Dest, 0); |
if Size <= 0 then |
Exit; |
CRC := DoExtractCRC(Source, Size); |
inherited DoDecode(Source, Dest, Size); |
if CRC <> $FFFFFFFF then // check CRC if found |
begin |
SwapBytes(CRC, 3); |
if CRC <> CRCCalc(CRC_24, Dest[0], Length(Dest)) then |
raise EDECFormatException.CreateResFmt(@sInvalidStringFormat, [self.GetShortClassName]); |
end; |
end; |
class function TFormat_UU.CharTableBinary: TBytes; |
begin |
// '`!"#$%&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_' + |
// ' '+CHR(9)+CHR(10)+CHR(13); |
SetLength(result, 68); |
{$IFDEF HAVE_ASSIGN_ARRAY} |
result := [$60, $21, $22, $23, $24, $25, $26, $27, $28, $29, $2A, $2B, $2C, |
$2D, $2E, $2F, $30, $31, $32, $33, $34, $35, $36, $37, $38, $39, |
$3A, $3B, $3C, $3D, $3E, $3F, $40, $41, $42, $43, $44, $45, $46, |
$47, $48, $49, $4A, $4B, $4C, $4D, $4E, $4F, $50, $51, $52, $53, |
$54, $55, $56, $57, $58, $59, $5A, $5B, $5C, $5D, $5E, $5F, $20, |
$09, $0A, $0D]; |
{$ELSE} |
// Remove this initialisation variant as soon as XE7+ is the new minimum |
// supported Delphi version |
result[ 0]:=$60; |
result[ 1]:=$21; |
result[ 2]:=$22; |
result[ 3]:=$23; |
result[ 4]:=$24; |
result[ 5]:=$25; |
result[ 6]:=$26; |
result[ 7]:=$27; |
result[ 8]:=$28; |
result[ 9]:=$29; |
result[10]:=$2A; |
result[11]:=$2B; |
result[12]:=$2C; |
result[13]:=$2D; |
result[14]:=$2E; |
result[15]:=$2F; |
result[16]:=$30; |
result[17]:=$31; |
result[18]:=$32; |
result[19]:=$33; |
result[20]:=$34; |
result[21]:=$35; |
result[22]:=$36; |
result[23]:=$37; |
result[24]:=$38; |
result[25]:=$39; |
result[26]:=$3A; |
result[27]:=$3B; |
result[28]:=$3C; |
result[29]:=$3D; |
result[30]:=$3E; |
result[31]:=$3F; |
result[32]:=$40; |
result[33]:=$41; |
result[34]:=$42; |
result[35]:=$43; |
result[36]:=$44; |
result[37]:=$45; |
result[38]:=$46; |
result[39]:=$47; |
result[40]:=$48; |
result[41]:=$49; |
result[42]:=$4A; |
result[43]:=$4B; |
result[44]:=$4C; |
result[45]:=$4D; |
result[46]:=$4E; |
result[47]:=$4F; |
result[48]:=$50; |
result[49]:=$51; |
result[50]:=$52; |
result[51]:=$53; |
result[52]:=$54; |
result[53]:=$55; |
result[54]:=$56; |
result[55]:=$57; |
result[56]:=$58; |
result[57]:=$59; |
result[58]:=$5A; |
result[59]:=$5B; |
result[60]:=$5C; |
result[61]:=$5D; |
result[62]:=$5E; |
result[63]:=$5F; |
result[64]:=$20; |
result[65]:=$09; |
result[66]:=$0A; |
result[67]:=$0D; |
{$ENDIF} |
end; |
class procedure TFormat_UU.DoEncode(const Source; var Dest: TBytes; Size: Integer); |
var |
T: TBytes; |
S: PByte; |
D: PByte; // 1) to make pointer arithmetic work 2) P/TByteArray is limited to 32768 bytes |
L, i: Integer; |
B: Cardinal; |
begin |
SetLength(Dest, 0); |
if Size <= 0 then |
Exit; |
SetLength(Dest, Size * 4 div 3 + Size div 45 + 10); |
T := CharTableBinary; |
S := @Source; |
D := @Dest[0]; |
while Size > 0 do |
begin |
L := Size; |
if L > 45 then |
L := 45; |
Dec(Size, L); |
D^ := T[L]; |
while L > 0 do |
begin |
B := 0; |
for i := 0 to 2 do |
begin |
B := B shl 8; |
if L > 0 then |
begin |
B := B or S^; |
Inc(S); |
end; |
Dec(L); |
end; |
for i := 4 downto 1 do |
begin |
D[i] := T[B and $3F]; |
B := B shr 6; |
end; |
Inc(D, 4); |
end; |
Inc(D); |
end; |
SetLength(Dest, PByte(D) - PByte(Dest)); |
end; |
class procedure TFormat_UU.DoDecode(const Source; var Dest: TBytes; Size: Integer); |
var |
T: TBytes; |
S: PByte; |
D, L: PByte; // 1) to make pointer arithmetic work 2) P/TByteArray is limited to 32768 bytes |
i, E: Integer; |
B: UInt32; |
begin |
SetLength(Dest, 0); |
if Size <= 0 then |
Exit; |
SetLength(Dest, Size); |
T := CharTableBinary; |
S := @Source; |
D := @Dest[0]; |
L := PByte(S) + Size; |
repeat |
Size := TableFindBinary(S^, T, 64); |
if (Size < 0) or (Size > 45) then |
raise EDECFormatException.CreateResFmt(@sInvalidStringFormat, [self.GetShortClassName]); |
Inc(S); |
while Size > 0 do |
begin |
B := 0; |
i := 4; |
while (i > 0) and (S <= L) do |
begin |
E := TableFindBinary(S^, T, 64); |
if E >= 0 then |
begin |
B := B shl 6 or Byte(E); |
Dec(i); |
end; |
Inc(S); |
end; |
i := 2; |
repeat |
D[i] := Byte(B); |
B := B shr 8; |
Dec(i); |
until i < 0; |
if Size > 3 then |
Inc(D, 3) |
else |
Inc(D, Size); |
Dec(Size, 3); |
end; |
until S >= L; |
SetLength(Dest, PByte(D) - PByte(Dest)); |
end; |
class function TFormat_UU.DoIsValid(const Data; Size: Integer): Boolean; |
var |
T: TBytes; |
S: PByte; |
Len, P, i: Integer; |
begin |
Result := False; |
T := CharTableBinary; |
Len := Length(T); |
S := @Data; |
P := 0; |
while Size > 0 do |
begin |
i := TableFindBinary(S^, T, Len); |
if i >= 0 then |
begin |
Dec(Size); |
Inc(S); |
if P = 0 then |
begin |
if i > 45 then |
Exit; |
P := (i * 4 + 2) div 3; |
end |
else |
if i < 64 then |
Dec(P); |
end |
else |
Exit; |
end; |
if P <> 0 then |
Exit; |
Result := True; |
end; |
class function TFormat_XX.CharTableBinary: TBytes; |
begin |
// '+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' + |
// ' "()[]'''+CHR(9)+CHR(10)+CHR(13); |
SetLength(result, 74); |
{$IFDEF HAVE_ASSIGN_ARRAY} |
result := [$2B, $2D, $30, $31, $32, $33, $34, $35, $36, $37, $38, $39, $41, |
$42, $43, $44, $45, $46, $47, $48, $49, $4A, $4B, $4C, $4D, $4E, |
$4F, $50, $51, $52, $53, $54, $55, $56, $57, $58, $59, $5A, $61, |
$62, $63, $64, $65, $66, $67, $68, $69, $6A, $6B, $6C, $6D, $6E, |
$6F, $70, $71, $72, $73, $74, $75, $76, $77, $78, $79, $7A, $20, |
$22, $28, $29, $5B, $5D, $27, $09, $0A, $0D]; |
{$ELSE} |
// Remove this initialisation variant as soon as XE7+ is the new minimum |
// supported Delphi version |
result[ 0]:=$2B; |
result[ 1]:=$2D; |
result[ 2]:=$30; |
result[ 3]:=$31; |
result[ 4]:=$32; |
result[ 5]:=$33; |
result[ 6]:=$34; |
result[ 7]:=$35; |
result[ 8]:=$36; |
result[ 9]:=$37; |
result[10]:=$38; |
result[11]:=$39; |
result[12]:=$41; |
result[13]:=$42; |
result[14]:=$43; |
result[15]:=$44; |
result[16]:=$45; |
result[17]:=$46; |
result[18]:=$47; |
result[19]:=$48; |
result[20]:=$49; |
result[21]:=$4A; |
result[22]:=$4B; |
result[23]:=$4C; |
result[24]:=$4D; |
result[25]:=$4E; |
result[26]:=$4F; |
result[27]:=$50; |
result[28]:=$51; |
result[29]:=$52; |
result[30]:=$53; |
result[31]:=$54; |
result[32]:=$55; |
result[33]:=$56; |
result[34]:=$57; |
result[35]:=$58; |
result[36]:=$59; |
result[37]:=$5A; |
result[38]:=$61; |
result[39]:=$62; |
result[40]:=$63; |
result[41]:=$64; |
result[42]:=$65; |
result[43]:=$66; |
result[44]:=$67; |
result[45]:=$68; |
result[46]:=$69; |
result[47]:=$6A; |
result[48]:=$6B; |
result[49]:=$6C; |
result[50]:=$6D; |
result[51]:=$6E; |
result[52]:=$6F; |
result[53]:=$70; |
result[54]:=$71; |
result[55]:=$72; |
result[56]:=$73; |
result[57]:=$74; |
result[58]:=$75; |
result[59]:=$76; |
result[60]:=$77; |
result[61]:=$78; |
result[62]:=$79; |
result[63]:=$7A; |
result[64]:=$20; |
result[65]:=$22; |
result[66]:=$28; |
result[67]:=$29; |
result[68]:=$5B; |
result[69]:=$5D; |
result[70]:=$27; |
result[71]:=$09; |
result[72]:=$0A; |
result[73]:=$0D; |
{$ENDIF} |
end; |
var |
// Initlialized in initialization section, cannot be const because of the |
// TBytes requirement |
ESCAPE_CodesL: TBytes; //array[0..6] of Byte = ($61, $62, $74, $6E, $76, $66, $72); |
ESCAPE_CodesU: TBytes; //array[0..6] of Byte = ($41, $42, $54, $4E, $56, $46, $52); |
class function TFormat_ESCAPE.CharTableBinary: TBytes; |
begin |
Result := TFormat_HEX.CharTableBinary; |
end; |
class procedure TFormat_ESCAPE.DoEncode(const Source; var Dest: TBytes; Size: Integer); |
var |
T: TBytes; |
S: PByte; |
D: PByte; // 1) to make pointer arithmetic work 2) P/TByteArray is limited to 32768 bytes |
i: Integer; |
begin |
SetLength(Dest, 0); |
if Size <= 0 then |
Exit; |
SetLength(Dest, Size + 8); |
T := CharTableBinary; |
S := @Source; |
D := @Dest[0]; |
i := Size; |
while Size > 0 do |
begin |
if i <= 0 then |
begin |
i := D - PByte(Dest); |
SetLength(Dest, i + Size + 8); |
D := PByte(Dest) + i; |
i := Size; |
end; |
if (S^ < 32) or (S^ > $7F) then |
begin |
if (S^ >= 7) and (S^ <= 13) then |
begin |
D^ := $5C; // \ char |
Inc(D); |
D^ := ESCAPE_CodesL[S^ - 7]; |
Inc(D); |
Dec(i, 2); |
end |
else |
begin |
D^ := $5C; // \ char |
Inc(D); |
D^ := $78; // x |
Inc(D); |
D^ := T[S^ shr 4]; |
Inc(D); |
D^ := T[S^ and $F]; |
Inc(D); |
Dec(i, 4); |
end |
end |
else |
begin |
// S^is \ char? |
if S^ = $5C then |
begin |
D^ := $5C; // \ char |
Inc(D); |
D^ := $5C; // \ char |
Inc(D); |
Dec(i, 2); |
end |
else |
// S^ is " char? |
if S^ = $22 then |
begin |
D^ := $5C; // \ char |
Inc(D); |
D^ := $22; // " char |
Inc(D); |
Dec(i, 2); |
end |
else |
begin |
D^ := S^; |
Inc(D); |
Dec(i); |
end; |
end; |
Dec(Size); |
Inc(S); |
end; |
SetLength(Dest, PByte(D) - PByte(Dest)); |
end; |
class function TFormat_ESCAPE.DoIsValid(const Data; Size: Integer): Boolean; |
var |
T: TBytes; |
S: PByte; |
begin |
Result := False; |
T := CharTableBinary; |
S := @Data; |
while Size > 0 do |
begin |
if (S^ > $7F) or (S^ < 32) then |
Exit; |
// start of an escape sequence |
if S^ = $5C then |
begin |
Dec(Size); |
Inc(S); |
// \ at the end |
if Size <= 0 then |
Exit; |
// X for hex notation |
if UpCaseBinary(S^) = $58 then |
begin |
Inc(S); |
Dec(Size); |
// incomplete hex notation follows? |
if (Size < 2) or (TableFindBinary(UpCaseBinary(S^), T, 16) < 0) then |
Exit; |
Inc(S); |
Dec(Size); |
if (TableFindBinary(UpCaseBinary(S^), T, 16) < 0) then |
Exit; |
Inc(S); |
Dec(Size); |
end |
else |
begin |
// \ with invalid following char? |
if TableFindBinary(UpCaseBinary(S^), TBytes(ESCAPE_CodesU), 7) < 0 then |
Exit; |
Dec(Size); |
Inc(S); |
end; |
end |
else |
begin |
Dec(Size); |
Inc(S); |
end; |
end; |
Result := True; |
end; |
class procedure TFormat_ESCAPE.DoDecode(const Source; var Dest: TBytes; Size: Integer); |
var |
T: TBytes; |
S: PByte; // 1) to make pointer arithmetic work 2) P/TByteArray is limited to 32768 bytes |
D: PByte; |
L: PByte; // 1) to make pointer arithmetic work 2) P/TByteArray is limited to 32768 bytes |
i: Integer; |
begin |
if Size <= 0 then |
Exit; |
SetLength(Dest, Size); |
T := CharTableBinary; |
S := @Source; |
D := @Dest[0]; |
L := S + Size; |
while S < L do |
begin |
// S^ is \ char? |
if S^ = $5C then |
begin |
Inc(S); |
if S > L then Break; |
// S^ is X char? |
if UpCaseBinary(S^) = $58 then |
begin |
if S + 2 > L then |
raise EDECFormatException.CreateResFmt(@sInvalidStringFormat, [self.GetShortClassName]); |
Inc(S); |
i := TableFindBinary(UpCaseBinary(S^), T, 16); |
if i < 0 then |
raise EDECFormatException.CreateResFmt(@sInvalidStringFormat, [self.GetShortClassName]); |
D^ := i shl 4; |
Inc(S); |
i := TableFindBinary(UpCaseBinary(S^), T, 16); |
if i < 0 then |
raise EDECFormatException.CreateResFmt(@sInvalidStringFormat, [self.GetShortClassName]); |
D^ := D^ or i; |
end |
else |
begin |
i := TableFindBinary(UpCaseBinary(S^), TBytes(ESCAPE_CodesU), 7); |
if i >= 0 then |
D^ := i + 7 |
else |
D^ := S^; |
end; |
end |
else |
D^ := S^; |
Inc(D); |
Inc(S); |
end; |
SetLength(Dest, PByte(D) - PByte(Dest)); |
end; |
{ TFormat_BigEndian16 } |
class procedure TFormat_BigEndian16.DoDecode(const Source; var Dest: TBytes; |
Size: Integer); |
begin |
DoSawp(Source, Dest, Size); |
end; |
class procedure TFormat_BigEndian16.DoEncode(const Source; var Dest: TBytes; |
Size: Integer); |
begin |
DoSawp(Source, Dest, Size); |
end; |
class function TFormat_BigEndian16.DoIsValid(const Data; |
Size: Integer): Boolean; |
begin |
// swapping bytes in 16 bit mode requires even number of bytes |
result := not Odd(Size); |
end; |
class procedure TFormat_BigEndian16.DoSawp(const Source; var Dest: TBytes; |
Size: Integer); |
var |
i : Integer; |
begin |
if (Size < 0) or Odd(Size) then |
Exit; |
SetLength(Dest, Size); |
if (Size > 0) then |
begin |
Move(Source, Dest[0], Size); |
i := 0; |
while (i < length(Dest)) do |
begin |
DECUtil.SwapBytes(Dest[i], 2); |
inc(i, 2); |
end; |
end; |
end; |
{ TFormat_BigEndian32 } |
class procedure TFormat_BigEndian32.DoDecode(const Source; |
var Dest: TBytes; |
Size: Integer); |
begin |
DoSawp(Source, Dest, Size); |
end; |
class procedure TFormat_BigEndian32.DoEncode(const Source; |
var Dest: TBytes; |
Size: Integer); |
begin |
DoSawp(Source, Dest, Size); |
end; |
class function TFormat_BigEndian32.DoIsValid(const Data; |
Size: Integer): Boolean; |
begin |
result := (Size mod 4) = 0; |
end; |
class procedure TFormat_BigEndian32.DoSawp(const Source; |
var Dest: TBytes; |
Size: Integer); |
var |
i : Integer; |
SwapRes : UInt32; |
begin |
if (Size < 0) or ((Size mod 4) <> 0) then |
Exit; |
SetLength(Dest, Size); |
if (Size > 0) then |
begin |
Move(Source, Dest[0], Size); |
i := 0; |
while (i < length(Dest)) do |
begin |
Move(Dest[i], SwapRes, 4); |
SwapRes := DECUtil.SwapUInt32(SwapRes); |
Move(SwapRes, Dest[i], 4); |
inc(i, 4); |
end; |
end; |
end; |
{ TFormat_BigEndian64 } |
class procedure TFormat_BigEndian64.DoDecode(const Source; var Dest: TBytes; |
Size: Integer); |
begin |
DoSawp(Source, Dest, Size); |
end; |
class procedure TFormat_BigEndian64.DoEncode(const Source; var Dest: TBytes; |
Size: Integer); |
begin |
DoSawp(Source, Dest, Size); |
end; |
class function TFormat_BigEndian64.DoIsValid(const Data; |
Size: Integer): Boolean; |
begin |
result := (Size mod 8) = 0; |
end; |
class procedure TFormat_BigEndian64.DoSawp(const Source; var Dest: TBytes; |
Size: Integer); |
var |
i : Integer; |
SwapRes : Int64; |
begin |
if (Size < 0) or ((Size mod 8) <> 0) then |
Exit; |
SetLength(Dest, Size); |
if (Size > 0) then |
begin |
Move(Source, Dest[0], Size); |
i := 0; |
while (i < length(Dest)) do |
begin |
Move(Dest[i], SwapRes, 8); |
SwapRes := DECUtil.SwapInt64(SwapRes); |
Move(SwapRes, Dest[i], 8); |
inc(i, 8); |
end; |
end; |
end; |
{ TFormat_Base32 } |
class procedure TFormat_Base32.PrepareTable; |
var |
c : Char; |
begin |
for c := #0 to High(FBase32DecodeTable) do begin |
case c of |
'A'..'Z' : FBase32DecodeTable[c] := Ord(c)-Ord('A'); |
'a'..'z' : FBase32DecodeTable[c] := Ord(c)-Ord('a'); |
'2'..'7' : FBase32DecodeTable[c] := Ord(c)+(26-Ord('2')); |
'0' : FBase32DecodeTable[c] := Ord('O')-Ord('A'); |
else |
FBase32DecodeTable[c] := 255; |
end; |
end; |
end; |
class procedure TFormat_Base32.DoDecode(const Source; |
var Dest: TBytes; |
Size: Integer); |
var |
c, b, i, n, d : Integer; |
pIn : PByte; |
pOut : PByte; |
begin |
if (Pointer(Source) = nil) then |
begin |
SetLength(Dest, 0); |
Exit; |
end; |
if (FBase32DecodeTable['z'] = 0) then |
PrepareTable; |
n := Size; |
SetLength(Dest, ((n div 8)+1)*5); |
pIn := @Source; |
pOut := @Dest[0]; |
c := 0; |
b := 0; |
for i := 0 to n-1 do |
begin |
d := FBase32DecodeTable[Chr(pIn^)]; |
if d = 255 then |
begin |
if (Chr(pIn^) = '=') then break; |
raise EDECFormatException.CreateFmt(sInvalidInputCharacter, [pIn^]); |
end; |
c := (c shl 5) or d; |
Inc(b, 5); |
if b >= 8 then |
begin |
Dec(b, 8); |
pOut^ := Lo(c shr b); |
Inc(pOut); |
end; |
Inc(pIn); |
end; |
n := NativeUInt(pOut)-NativeUInt(@Dest[0]); |
SetLength(Dest, n); |
end; |
class procedure TFormat_Base32.DoEncode(const Source; |
var Dest: TBytes; |
Size: Integer); |
var |
i, n, c, b : Integer; |
pIn : PUInt8Array; |
pOut : PByte; |
PadChars : UInt8; |
begin |
if (Size = 0) or (Pointer(Source) = nil) then |
begin |
SetLength(Dest, 0); |
Exit; |
end; |
SetLength(Dest, ((Size div 5)+1)*8); |
c := 0; |
b := 0; |
pIn := @Source; |
pOut := @Dest[0]; |
for i := 0 to Size-1 do |
begin |
c := (c shl 8) or pIn[i]; |
Inc(b, 8); |
while b >= 5 do |
begin |
Dec(b, 5); |
pOut^ := Byte(cBase32[((c shr b) and $1F)+Low(string)]); |
Inc(pOut); |
end; |
end; |
if b > 0 then |
begin |
pOut^ := Byte(cBase32[((c shl (5-b)) and $1F)+Low(string)]); |
Inc(pOut); |
end; |
// Calculate the length of chars needed to encode the data |
n := (NativeUInt(pOut) - NativeUInt(@Dest[0])); |
case Size mod 5 of |
1: PadChars := 6; |
2: PadChars := 4; |
3: PadChars := 3; |
4: PadChars := 1; |
else |
PadChars := 0; |
end; |
FillChar(Dest[n], PadChars, cPaddingChar); |
SetLength(Dest, n+PadChars); |
end; |
class function TFormat_Base32.DoIsValid(const Data; Size: Integer): Boolean; |
var |
S: PByte; |
begin |
Result := True; |
S := @Data; |
while Result and (Size > 0) do |
begin |
// A-Z, 2-7 |
if S^ in [$41..$5A, $32..$37, $3D] then |
begin |
Inc(S); |
Dec(Size); |
end |
else |
Result := False; |
end; |
end; |
{ TFormat_Radix64BCrypt } |
class function TFormat_BCryptBSD.CharTableBinary: TBytes; |
begin |
// ./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 |
SetLength(result, 64); |
result := [$2E, $2F, |
$41, $42, $43, $44, $45, $46, $47, $48, $49, $4A, $4B, $4C, $4D, |
$4E, $4F, $50, $51, $52, $53, $54, $55, $56, $57, $58, $59, $5A, |
$61, $62, $63, $64, $65, $66, $67, $68, $69, $6A, $6B, $6C, $6D, |
$6E, $6F, $70, $71, $72, $73, $74, $75, $76, $77, $78, $79, $7A, |
$30, $31, $32, $33, $34, $35, $36, $37, $38, $39]; |
end; |
class procedure TFormat_BCryptBSD.DoDecode(const Source; |
var Dest: TBytes; |
Size: Integer); |
const |
BT: array[0..127] of shortint = ( |
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, |
54, 55, 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, |
-1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, |
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, -1, -1, -1, |
-1, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, |
43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, -1, -1, -1, -1, -1); |
var |
Src : PByte; |
c1, c2, c3, c4: Integer; |
function GetNextByte: integer; |
var |
b: UInt8; |
begin |
Result := -1; |
if (Size > 0) then |
begin |
b := Src^; |
Inc(Src); |
Dec(Size); |
if (b < 128) then |
Result := BT[b]; |
end; |
end; |
procedure SetNextByte(b: Integer); |
begin |
// Put next byte into pdest if LA<ldest, inc LA and pdest |
Dest := Dest + [byte(b and $ff)]; |
end; |
begin |
Src := @Source; |
if (Src = nil) or (Size < 1) then |
exit; |
while Size > 0 do |
begin |
c1 := GetNextByte; |
if (c1 < 0) then exit; |
c2 := GetNextByte; |
if (c2 < 0) then exit; |
SetNextByte(((c1 and $3f) shl 2) or (c2 shr 4)); |
c3 := GetNextByte; |
if (c3 < 0) then exit; |
SetNextByte(((c2 and $0f) shl 4) or (c3 shr 2)); |
c4 := GetNextByte; |
if (c4 < 0) then exit; |
SetNextByte(((c3 and $03) shl 6) or c4); |
end; |
end; |
class procedure TFormat_BCryptBSD.DoEncode(const Source; |
var Dest: TBytes; |
Size: Integer); |
var |
CT64 : TBytes; |
c1,c2 : UInt16; |
Src : PByte; |
begin |
CT64 := CharTableBinary; |
Src := @Source; |
if (@Src <> nil) then |
begin |
while (Size > 0) do |
begin |
c1 := Src^; |
inc(Src); |
dec(Size); |
Dest := Dest + [CT64[(c1 shr 2) and $3f]]; |
c1 := (c1 and $03) shl 4; |
if (Size <= 0) then |
Dest := Dest + [CT64[c1 and $3f]] |
else |
begin |
c2 := Src^; |
inc(Src); |
dec(Size); |
c1 := c1 or ((c2 shr 4) and $0f); |
Dest := Dest + [CT64[c1 and $3f]]; |
c1 := (c2 and $0f) shl 2; |
if (Size <= 0) then |
Dest := Dest + [CT64[c1 and $3f]] |
else |
begin |
c2 := Src^; |
inc(Src); |
dec(Size); |
c1 := c1 or ((c2 shr 6) and $03); |
Dest := Dest + [CT64[c1 and $3f]] + [CT64[c2 and $3f]]; |
end; |
end; |
end; |
end; |
end; |
class function TFormat_BCryptBSD.DoIsValid(const Data; |
Size: Integer): Boolean; |
var |
S: PByte; |
begin |
Result := True; |
S := @Data; |
while Result and (Size > 0) do |
begin |
// ./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 |
if S^ in [$41..$5A, $61..$7A, $2E..$39] then |
begin |
Inc(S); |
Dec(Size); |
end |
else |
Result := False; |
end; |
end; |
initialization |
SetLength(ESCAPE_CodesL, 7); |
ESCAPE_CodesL[0] := $61; |
ESCAPE_CodesL[1] := $62; |
ESCAPE_CodesL[2] := $74; |
ESCAPE_CodesL[3] := $6E; |
ESCAPE_CodesL[4] := $76; |
ESCAPE_CodesL[5] := $66; |
ESCAPE_CodesL[6] := $72; |
SetLength(ESCAPE_CodesU, 7); |
ESCAPE_CodesU[0] := $41; |
ESCAPE_CodesU[1] := $42; |
ESCAPE_CodesU[2] := $54; |
ESCAPE_CodesU[3] := $4E; |
ESCAPE_CodesU[4] := $56; |
ESCAPE_CodesU[5] := $46; |
ESCAPE_CodesU[6] := $52; |
{$IFNDEF BCB} |
{$IFNDEF ManualRegisterFormatClasses} |
TFormat_HEX.RegisterClass(TDECFormat.ClassList); |
TFormat_HEXL.RegisterClass(TDECFormat.ClassList); |
TFormat_DECMIME32.RegisterClass(TDECFormat.ClassList); |
TFormat_Base32.RegisterClass(TDECFormat.ClassList); |
TFormat_Base64.RegisterClass(TDECFormat.ClassList); |
TFormat_Radix64.RegisterClass(TDECFormat.ClassList); |
TFormat_BCryptBSD.RegisterClass(TDECFormat.ClassList); |
TFormat_UU.RegisterClass(TDECFormat.ClassList); |
TFormat_XX.RegisterClass(TDECFormat.ClassList); |
TFormat_ESCAPE.RegisterClass(TDECFormat.ClassList); |
TFormat_BigEndian16.RegisterClass(TDECFormat.ClassList); |
TFormat_BigEndian32.RegisterClass(TDECFormat.ClassList); |
TFormat_BigEndian64.RegisterClass(TDECFormat.ClassList); |
{$ENDIF} |
{$ENDIF} |
// Init the number of chars per line as per RFC 4880 to 76 chars |
TFormat_Radix64.FCharsPerLine := 76; |
finalization |
end. |
/trunk/Decoder5/VCL_DEC/DECFormatBase.pas |
---|
0,0 → 1,656 |
{ ***************************************************************************** |
The DEC team (see file NOTICE.txt) licenses this file |
to you under the Apache License, Version 2.0 (the |
"License"); you may not use this file except in compliance |
with the License. A copy of this licence is found in the root directory |
of this project in the file LICENCE.txt or alternatively 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. |
***************************************************************************** } |
/// <summary> |
/// Contains the base class for all the formatting classes |
/// </summary> |
unit DECFormatBase; |
{$INCLUDE DECOptions.inc} |
interface |
uses |
{$IFDEF FPC} |
SysUtils, Classes, |
{$ELSE} |
System.SysUtils, System.Classes, Generics.Collections, |
{$ENDIF} |
DECBaseClass, DECUtil; |
type |
/// <summary> |
/// Class reference type of the TDECFormat base class. This is used for |
/// passing formatting classes as parameters or returning those. This is |
/// especially useful for the formatting classes, as they only contain |
/// class functions. |
/// </summary> |
TDECFormatClass = class of TDECFormat; |
/// <summary> |
/// copy input to output (default format) |
/// </summary> |
TFormat_Copy = class; |
/// <summary> |
/// Basis for all formatting classes. Not to be instantiated directly. |
/// </summary> |
TDECFormat = class(TDECObject) |
protected |
/// <summary> |
/// Internal method for the actual format conversion. This method needs to |
/// be overridden in all the child classes. Converts into the format. |
/// </summary> |
/// <param name="Source"> |
/// Data to be converted |
/// </param> |
/// <param name="Dest"> |
/// Into this parameter the converted data will be written into. |
/// </param> |
/// <param name="Size"> |
/// Number of bytes from source which will get converted. |
/// </param> |
class procedure DoEncode(const Source; var Dest: TBytes; |
Size: Integer); virtual; |
/// <summary> |
/// Internal method for the actual format conversion. This method needs to |
/// be overridden in all the child classes. Converts from the format into |
/// the format the data had before encoding it. |
/// </summary> |
/// <param name="Source"> |
/// Data to be converted |
/// </param> |
/// <param name="Dest"> |
/// Into this parameter the converted data will be written into. |
/// </param> |
/// <param name="Size"> |
/// Number of bytes from source which will get converted. |
/// </param> |
class procedure DoDecode(const Source; var Dest: TBytes; |
Size: Integer); virtual; |
/// <summary> |
/// Internal method for checking whether all bytes of the data to be |
/// processed are valid for this particular formatting. This method needs |
/// to be overridden in all the child classes. |
/// </summary> |
/// <param name="Data"> |
/// Data to be checked |
/// </param> |
/// <param name="Size"> |
/// Number of bytes from data which will get checked. |
/// </param> |
class function DoIsValid(const Data; Size: Integer): Boolean; virtual; |
public |
/// <summary> |
/// List of registered DEC classes. Key is the Identity of the class. |
/// </summary> |
class var ClassList: TDECClassList; |
/// <summary> |
/// Tries to find a class type by its name in the list of registered |
/// formatting classes |
/// </summary> |
/// <param name="Name"> |
/// Name to look for in the list |
/// </param> |
/// <returns> |
/// Returns the class type if found. if it could not be found a |
/// EDECClassNotRegisteredException will be thrown |
/// </returns> |
/// <exception cref="EDECClassNotRegisteredException"> |
/// Exception raised if the class specified by <c>Name</c> is not found |
/// </exception> |
class function ClassByName(const Name: string): TDECFormatClass; |
/// <summary> |
/// Tries to find a class type by its numeric identity DEC assigned to it. |
/// Useful for file headers, so they can easily encode numerically which |
/// cipher class was being used. |
/// </summary> |
/// <param name="Identity"> |
/// Identity to look for |
/// </param> |
/// <returns> |
/// Returns the class type of the class with the specified identity value |
/// or throws an EDECClassNotRegisteredException exception if no class |
/// with the given identity has been found |
/// </returns> |
/// <exception cref="EDECClassNotRegisteredException"> |
/// Exception raised if the class specified by <c>Identity</c> is not found |
/// </exception> |
class function ClassByIdentity(Identity: Int64): TDECFormatClass; |
/// <summary> |
/// Calls the internal method which actually does the format conversion. |
/// </summary> |
/// <param name="Data"> |
/// Source data to be converted into the format of this class as |
/// RawByteString. Empty strings are allowed. They will simply lead to |
// empty return arrays as well. |
/// </param> |
/// <returns> |
/// Data in the format of this formatting algorithm as RawByteString |
/// </returns> |
class function Encode(const Data: RawByteString): RawByteString; overload; |
/// <summary> |
/// Calls the internal method which actually does the format conversion. |
/// </summary> |
/// <param name="Data"> |
/// Source data to be converted into the format of this class as untyped |
/// parameter. Empty data is allowed. It will simply lead to empty return |
// values as well. |
/// </param> |
/// <param name="Size"> |
/// Size of the data passed via data in bytes. |
/// </param> |
/// <returns> |
/// Data in the format of this formatting algorithm as RawByteString |
/// </returns> |
class function Encode(const Data; Size: Integer): RawByteString; overload; |
/// <summary> |
/// Calls the internal method which actually does the format conversion. |
/// </summary> |
/// <param name="Data"> |
/// Source data to be converted into the format of this class as Byte Array. |
/// Empty arrays of size 0 are allowed. They will simply lead to empty return |
// arrays as well. |
/// </param> |
/// <returns> |
/// Data in the format of this formatting algorithm as byte array. |
/// </returns> |
class function Encode(const Data: TBytes): TBytes; overload; |
/// <summary> |
/// Calls the internal method which actually does the format conversion. |
/// </summary> |
/// <param name="Data"> |
/// Source data to be converted from the format of this class as byte array |
/// into the original byte representation. Empty arrays of size 0 are allowed. |
// They will simply lead to empty return arrays as well. |
/// </param> |
/// <returns> |
/// Data in the original byte format it had before getting encoded with |
/// this formatting. |
/// </returns> |
class function Decode(const Data: TBytes): TBytes; overload; |
/// <summary> |
/// Calls the internal method which actually does the format conversion. |
/// </summary> |
/// <param name="Data"> |
/// Source data to be converted from the format of this class as |
/// RawByteString into the original representation. Empty strings are allowed. |
/// They will simply lead to empty return arrays as well. |
/// </param> |
/// <returns> |
/// Data in the format of this formatting algorithm as RawByteString |
/// </returns> |
class function Decode(const Data: RawByteString): RawByteString; overload; |
/// <summary> |
/// Calls the internal method which actually does the format conversion. |
/// </summary> |
/// <param name="Data"> |
/// Source data to be converted from the format of this class as untyped |
/// parameter into the original representation. Empty data is allowed. |
/// It will simply lead to empty return values as well. |
/// </param> |
/// <param name="Size"> |
/// Size of the data passed via data in bytes. |
/// </param> |
/// <returns> |
/// Data in the format of this formatting algorithm as RawByteString |
/// </returns> |
class function Decode(const Data; Size: Integer): RawByteString; overload; |
/// <summary> |
/// Checks whether the data passed to this method only contains chars |
/// valid for this specific formatting. |
/// </summary> |
/// <param name="Data"> |
/// Untyped parameter with the data to be checked |
/// </param> |
/// <param name="Size"> |
/// Size of the data to be checked in bytes |
/// </param> |
/// <returns> |
/// true, if the input data contains only characters valid for this format |
/// </returns> |
class function IsValid(const Data; Size: Integer): Boolean; overload; |
/// <summary> |
/// Checks whether the data passed to this method only contains chars |
/// valid for this specific formatting. |
/// </summary> |
/// <param name="Data"> |
/// Byte array with the data to be checked |
/// </param> |
/// <returns> |
/// true, if the input data contains only characters valid for this format |
/// </returns> |
class function IsValid(const Data: TBytes): Boolean; overload; |
/// <summary> |
/// Checks whether the data passed to this method only contains chars |
/// valid for this specific formatting. |
/// </summary> |
/// <param name="Text"> |
/// RawByteString with the data to be checked |
/// </param> |
/// <returns> |
/// true, if the input data contains only characters valid for this format |
/// </returns> |
class function IsValid(const Text: RawByteString): Boolean; overload; |
/// <summary> |
/// Converts the ordinal number of an ASCII char given as byte into the |
/// ordinal number of the corresponding upper case ASCII char. Works only |
/// on a-z and works like the System.Pas variant just on bytes instead of chars |
/// </summary> |
/// <param name="b"> |
/// Ordinal ASCII char value to be converted to upper case |
/// </param> |
/// <returns> |
/// Uppercase ordinal number if the number passed in as parameter belongs to |
/// a char in the a-z range. Otherwise the number passed in will be returned. |
/// </returns> |
class function UpCaseBinary(b: Byte): Byte; |
/// <summary> |
/// Looks for the index of a given byte in a byte-array. |
/// </summary> |
/// <param name="Value"> |
/// Byte value to be searched in the array |
/// </param> |
/// <param name="Table"> |
/// Byte-array where the value is searched in |
/// </param> |
/// <param name="Len"> |
/// Maximum index until which the search will be performed. If Len is higher |
/// than length(Table) the latter will be used as maximum |
/// </param> |
/// <returns> |
/// Index of the first appearance of the searched value. If it cannot be found |
/// the result will be -1. The index is 0 based. |
/// </returns> |
class function TableFindBinary(Value: Byte; Table: TBytes; |
Len: Integer): Integer; |
end; |
/// <summary> |
/// Formatting class which doesn't apply any transformation to the data |
/// passed in. It simply copies it from Source to Dest. |
/// </summary> |
TFormat_Copy = class(TDECFormat) |
protected |
/// <summary> |
/// Copies the data contained in Source into Dest without any conversion |
/// </summary> |
/// <param name="Source"> |
/// Variable from which Size bytes will be copied to Dest |
/// </param> |
/// <param name="Dest"> |
/// Byte-array where Source will be copied into. It will be dimensioned |
/// to a length of Size internally. |
/// </param> |
/// <param name="Size"> |
/// Number of bytes to copy from Soruce to Dest |
/// </param> |
class procedure DoEncode(const Source; var Dest: TBytes; |
Size: Integer); override; |
/// <summary> |
/// Copies the data contained in Source into Dest without any conversion |
/// </summary> |
/// <param name="Source"> |
/// Variable from which Size bytes will be copied to Dest |
/// </param> |
/// <param name="Dest"> |
/// Byte-array where Source will be copied into. It will be dimensioned |
/// to a length of Size internally. |
/// </param> |
/// <param name="Size"> |
/// Number of bytes to copy from Soruce to Dest |
/// </param> |
class procedure DoDecode(const Source; var Dest: TBytes; |
Size: Integer); override; |
/// <summary> |
/// Dummy function to check if Source is valid for this particular format |
/// </summary> |
/// <param name="Data"> |
/// Data to be checked for validity. In this dummy case it will only be |
/// checked for Size >= 0 |
/// </param> |
/// <param name="Size"> |
/// Number of bytes the Source to be checked contains |
/// </param> |
/// <returns> |
/// true if Size >= 0 |
/// </returns> |
class function DoIsValid(const Data; Size: Integer): Boolean; override; |
public |
end; |
/// <summary> |
/// Returns the passed class type if it is not nil. Otherwise the class type |
/// of the TFormat_Copy class is being returned. |
/// </summary> |
/// <param name="FormatClass"> |
/// Class type of a formatting class like TFormat_HEX or nil, if no formatting |
/// is desired. |
/// </param> |
/// <returns> |
/// Passed class type or TFormat_Copy class type, depending on FormatClass |
/// parameter value. |
/// </returns> |
function ValidFormat(FormatClass: TDECFormatClass = nil): TDECFormatClass; |
/// <summary> |
/// Searches a registered formatting class by name. |
/// </summary> |
/// <param name="Name"> |
/// Unique long (TFormat_HEXL) or short (HEXL) name of the class to be searched. |
/// </param> |
/// <returns> |
/// Class type, which can be used to create an object isntance from. Raises an |
/// EDECClassNotRegisteredException exception if the class cannot be found in |
/// the list of registered format classes. |
/// </returns> |
/// <exception cref="EDECClassNotRegisteredException"> |
/// Exception raised if the class specified by <c>Name</c> is not found |
/// </exception> |
function FormatByName(const Name: string): TDECFormatClass; |
/// <summary> |
/// Searches a registered formatting class by identity. The identity is some |
/// integer value calculated on the basis of the class name, the length of the |
/// name and a fixed prefix and by calculating a CRC32 checksum of this. |
/// </summary> |
/// <param name="Identity"> |
/// Unique identity of the class to be searched. |
/// </param> |
/// <returns> |
/// Class type, which can be used to create an object isntance from. Raises an |
/// EDECClassNotRegisteredException exception if the class cannot be found in |
/// the list of registered format classes. |
/// </returns> |
/// <exception cref="EDECClassNotRegisteredException"> |
/// Exception raised if the class specified by <c>Identity</c> is not found |
/// </exception> |
function FormatByIdentity(Identity: Int64): TDECFormatClass; |
implementation |
uses |
DECTypes; |
function ValidFormat(FormatClass: TDECFormatClass = nil): TDECFormatClass; |
begin |
if FormatClass <> nil then |
Result := FormatClass |
else |
Result := TFormat_Copy; |
end; |
function FormatByName(const Name: string): TDECFormatClass; |
begin |
Result := TDECFormatClass(TDECFormat.ClassList.ClassByName(Name)); |
end; |
function FormatByIdentity(Identity: Int64): TDECFormatClass; |
begin |
Result := TDECFormatClass(TDECFormat.ClassList.ClassByIdentity(Identity)); |
end; |
{ TDECFormat } |
class procedure TDECFormat.DoEncode(const Source; var Dest: TBytes; |
Size: Integer); |
begin |
// C++ does not support virtual static functions thus the base cannot be |
// marked 'abstract'. This is our workaround: |
raise EDECAbstractError.Create(GetShortClassName); |
end; |
class procedure TDECFormat.DoDecode(const Source; var Dest: TBytes; |
Size: Integer); |
begin |
// C++ does not support virtual static functions thus the base cannot be |
// marked 'abstract'. This is our workaround: |
raise EDECAbstractError.Create(GetShortClassName); |
end; |
class function TDECFormat.DoIsValid(const Data; Size: Integer): Boolean; |
begin |
{$IFDEF FPC} |
Result := False; // suppress FPC compiler warning |
{$ENDIF FPC} |
// C++ does not support virtual static functions thus the base cannot be |
// marked 'abstract'. This is our workaround: |
raise EDECAbstractError.Create(GetShortClassName); |
end; |
class function TDECFormat.Encode(const Data: RawByteString): RawByteString; |
var |
b: TBytes; |
begin |
if Length(Data) > 0 then |
begin |
{$IFdef HAVE_STR_LIKE_ARRAY} |
DoEncode(Data[Low(Data)], b, Length(Data) * SizeOf(Data[Low(Data)])); |
{$ELSE} |
DoEncode(Data[1], b, Length(Data) * SizeOf(Data[1])); |
{$ENDIF} |
Result := BytesToRawString(b); |
end |
else |
SetLength(Result, 0); |
end; |
class function TDECFormat.Encode(const Data: TBytes): TBytes; |
var |
b: TBytes; |
begin |
if Length(Data) > 0 then |
begin |
DoEncode(Data[0], b, Length(Data)); |
Result := b; |
end |
else |
SetLength(Result, 0); |
end; |
class function TDECFormat.ClassByIdentity(Identity: Int64): TDECFormatClass; |
begin |
Result := TDECFormatClass(ClassList.ClassByIdentity(Identity)); |
end; |
class function TDECFormat.ClassByName(const Name: string): TDECFormatClass; |
begin |
Result := TDECFormatClass(ClassList.ClassByName(Name)); |
end; |
class function TDECFormat.Decode(const Data: TBytes): TBytes; |
var |
b: TBytes; |
begin |
if Length(Data) > 0 then |
begin |
DoDecode(Data[0], b, Length(Data)); |
Result := b; |
end |
else |
SetLength(Result, 0); |
end; |
class function TDECFormat.Decode(const Data: RawByteString): RawByteString; |
var |
b: TBytes; |
begin |
if Length(Data) > 0 then |
begin |
{$IFDEF HAVE_STR_LIKE_ARRAY} |
DoDecode(Data[Low(Data)], b, Length(Data) * SizeOf(Data[Low(Data)])); |
{$ELSE} |
DoDecode(Data[1], b, Length(Data) * SizeOf(Data[1])); |
{$ENDIF} |
Result := BytesToRawString(b); |
end |
else |
SetLength(Result, 0); |
end; |
class function TDECFormat.Decode(const Data; Size: Integer): RawByteString; |
var |
b: TBytes; |
begin |
if Size > 0 then |
begin |
DoDecode(Data, b, Size); |
Result := BytesToRawString(b); |
end |
else |
SetLength(Result, 0); |
end; |
class function TDECFormat.Encode(const Data; Size: Integer): RawByteString; |
var |
b: TBytes; |
begin |
if Size > 0 then |
begin |
DoEncode(Data, b, Size); |
Result := BytesToRawString(b); |
end |
else |
SetLength(Result, 0); |
end; |
class function TDECFormat.IsValid(const Data; Size: Integer): Boolean; |
begin |
Result := DoIsValid(Data, Size); |
end; |
class function TDECFormat.IsValid(const Data: TBytes): Boolean; |
begin |
Result := (Length(Data) = 0) or (DoIsValid(Data[0], Length(Data))); |
end; |
class function TDECFormat.IsValid(const Text: RawByteString): Boolean; |
begin |
{$IFDEF HAVE_STR_LIKE_ARRAY} |
Result := (Length(Text) = 0) or |
(DoIsValid(Text[Low(Text)], Length(Text) * SizeOf(Text[Low(Text)]))); |
{$ELSE} |
Result := (Length(Text) = 0) or |
(DoIsValid(Text[1], Length(Text) * SizeOf(Text[1]))); |
{$ENDIF} |
end; |
class function TDECFormat.UpCaseBinary(b: Byte): Byte; |
begin |
Result := b; |
if Result in [$61 .. $7A] then |
Dec(Result, $61 - $41); |
end; |
class function TDECFormat.TableFindBinary(Value: Byte; Table: TBytes; |
Len: Integer): Integer; |
var |
i: Integer; |
begin |
Result := -1; |
i := 0; |
while (i <= Len) and (i < Length(Table)) do |
begin |
if (Table[i] = Value) then |
begin |
Result := i; |
break; |
end; |
inc(i); |
end; |
end; |
{ TFormat_Copy } |
class procedure TFormat_Copy.DoEncode(const Source; var Dest: TBytes; |
Size: Integer); |
begin |
SetLength(Dest, Size); |
if Size <> 0 then |
Move(Source, Dest[0], Size); |
end; |
class procedure TFormat_Copy.DoDecode(const Source; var Dest: TBytes; |
Size: Integer); |
begin |
SetLength(Dest, Size); |
if Size <> 0 then |
Move(Source, Dest[0], Size); |
end; |
class function TFormat_Copy.DoIsValid(const Data; Size: Integer): Boolean; |
begin |
Result := Size >= 0; |
end; |
{$IFDEF DELPHIORBCB} |
procedure ModuleUnload(Instance: NativeUInt); |
var // automaticaly deregistration/releasing |
i: Integer; |
Items: TArray<TPair<Int64, TDECCLass>>; |
begin |
// C++Builder calls this function for our own module, but we destroy the ClassList |
// in that case in the finalization section anyway. |
if (Instance <> HInstance) and |
(TDECFormat.ClassList <> nil) and (TDECFormat.ClassList.Count > 0) then |
begin |
Items := TDECFormat.ClassList.ToArray; |
for i := Length(Items) - 1 downto 0 do |
begin |
if FindClassHInstance(Items[i].Value) = HINST(HInstance) then |
TDECFormat.ClassList.Remove(Items[i].Key); |
end; |
end; |
end; |
{$ENDIF DELPHIORBCB} |
initialization |
// Code for packages and dynamic extension of the class registration list |
{$IFDEF DELPHIORBCB} |
AddModuleUnloadProc(ModuleUnload); |
{$ENDIF DELPHIORBCB} |
TDECFormat.ClassList := TDECClassList.Create; |
TFormat_Copy.RegisterClass(TDECFormat.ClassList); |
finalization |
{$IFNDEF BCB} |
// Ensure no further instances of classes registered in the registration list |
// are possible through the list after this unit has been unloaded by unloding |
// the package this unit is in |
{$IFDEF DELPHIORBCB} |
RemoveModuleUnloadProc(ModuleUnload); |
{$ENDIF DELPHIORBCB} |
{$ENDIF} |
TDECFormat.ClassList.Free; |
end. |
/trunk/Decoder5/VCL_DEC/DECHash.asm86.inc |
---|
0,0 → 1,29529 |
{***************************************************************************** |
The DEC team (see file NOTICE.txt) licenses this file |
to you under the Apache License, Version 2.0 (the |
"License"); you may not use this file except in compliance |
with the License. A copy of this licence is found in the root directory |
of this project in the file LICENCE.txt or alternatively 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. |
*****************************************************************************} |
{ |
x86 Assembler optimized hash functions |
} |
{$IFDEF INCLUDED} |
{$IFDEF THash_MD2_asm} |
procedure THash_MD2.DoTransform(Buffer: PUInt32Array); |
asm |
push ebx |
push esi |
push edi |
push ebp |
lea esi, [eax].THash_MD2.FDigest |
// copying incoming buffer into work buffer |
mov eax, [edx] |
mov ecx, [edx + 4] |
mov ebx, [edx + 8] |
mov edi, [edx + 12] |
mov [esi + 16], eax |
mov [esi + 16 + 4], ecx |
mov [esi + 16 + 8], ebx |
mov [esi + 16 + 12], edi |
// recalculating message checksum |
// loop unrolled to 4 iterations, |
// combined with |
// xor first 16 bytes with second 16 and move res to third |
mov ecx, dword ptr [esi + 60] |
mov edi, -16 |
shr ecx, 24 |
@checksumloop: |
mov edx, dword ptr [esi + edi + 16] // digest |
mov ebp, dword ptr [esi + edi + 16 + 16] // source data |
mov ebx, dword ptr [esi + edi + 16 + 48] // checksum |
xor ecx, ebp |
xor edx, ebp |
and ecx, 0ffh |
xor eax, eax |
mov ecx, dword ptr MD2_PiSubst[ecx*4] |
shr ebp, 8 |
xor ecx, ebx |
mov dword ptr [esi + edi + 16 + 32], edx |
and ecx, 0ffh |
shr ebx, 8 |
or eax, ecx |
shl eax, 24 |
xor ecx, ebp |
and ecx, 0ffh |
shr ebp, 8 |
mov ecx, dword ptr MD2_PiSubst[ecx*4] |
xor ecx, ebx |
and ecx, 0ffh |
shr ebx, 8 |
or eax, ecx |
ror eax, 8 |
xor ecx, ebp |
and ecx, 0ffh |
shr ebp, 8 |
mov ecx, dword ptr MD2_PiSubst[ecx*4] |
xor ecx, ebx |
and ecx, 0ffh |
shr ebx, 8 |
or eax, ecx |
ror eax, 8 |
xor ecx, ebp |
and ecx, 0ffh |
mov ecx, dword ptr MD2_PiSubst[ecx*4] |
xor ecx, ebx |
or eax, ecx |
ror eax, 8 |
mov dword ptr [esi + edi + 16 + 48], eax |
add edi, 4 |
jnz @checksumloop |
// do 18 rounds of transformation |
// internal loop unrolled |
lea edi, MD2_PiSubst // MD2 permutation array pointer |
xor ecx, ecx // T variable |
xor ebp, ebp // external 18 rounds loop |
mov ebx, 0ffh // mask constant |
@roundsloop: |
// part 1 |
mov edx, dword ptr [esi] |
mov ecx, dword ptr [edi + ecx*4] |
xor eax, eax |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
shl eax, 24 |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
ror eax, 8 |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
ror eax, 8 |
xor ecx, edx |
or eax, ecx |
ror eax, 8 |
mov dword ptr [esi], eax |
// part 2 |
mov edx, dword ptr [esi + 4] |
mov ecx, dword ptr [edi + ecx*4] |
xor eax, eax |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
shl eax, 24 |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
ror eax, 8 |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
ror eax, 8 |
xor ecx, edx |
or eax, ecx |
ror eax, 8 |
mov dword ptr [esi + 4], eax |
// part 3 |
mov edx, dword ptr [esi + 8] |
mov ecx, dword ptr [edi + ecx*4] |
xor eax, eax |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
shl eax, 24 |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
ror eax, 8 |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
ror eax, 8 |
xor ecx, edx |
or eax, ecx |
ror eax, 8 |
mov dword ptr [esi + 8], eax |
// part 4 |
mov edx, dword ptr [esi + 12] |
mov ecx, dword ptr [edi + ecx*4] |
xor eax, eax |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
shl eax, 24 |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
ror eax, 8 |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
ror eax, 8 |
xor ecx, edx |
or eax, ecx |
ror eax, 8 |
mov dword ptr [esi + 12], eax |
// part 5 |
mov edx, dword ptr [esi + 16] |
mov ecx, dword ptr [edi + ecx*4] |
xor eax, eax |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
shl eax, 24 |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
ror eax, 8 |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
ror eax, 8 |
xor ecx, edx |
or eax, ecx |
ror eax, 8 |
mov dword ptr [esi + 16], eax |
// part 6 |
mov edx, dword ptr [esi + 20] |
mov ecx, dword ptr [edi + ecx*4] |
xor eax, eax |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
shl eax, 24 |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
ror eax, 8 |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
ror eax, 8 |
xor ecx, edx |
or eax, ecx |
ror eax, 8 |
mov dword ptr [esi + 20], eax |
// part 7 |
mov edx, dword ptr [esi + 24] |
mov ecx, dword ptr [edi + ecx*4] |
xor eax, eax |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
shl eax, 24 |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
ror eax, 8 |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
ror eax, 8 |
xor ecx, edx |
or eax, ecx |
ror eax, 8 |
mov dword ptr [esi + 24], eax |
// part 8 |
mov edx, dword ptr [esi + 28] |
mov ecx, dword ptr [edi + ecx*4] |
xor eax, eax |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
shl eax, 24 |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
ror eax, 8 |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
ror eax, 8 |
xor ecx, edx |
or eax, ecx |
ror eax, 8 |
mov dword ptr [esi + 28], eax |
// part 9 |
mov edx, dword ptr [esi + 32] |
mov ecx, dword ptr [edi + ecx*4] |
xor eax, eax |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
shl eax, 24 |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
ror eax, 8 |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
ror eax, 8 |
xor ecx, edx |
or eax, ecx |
ror eax, 8 |
mov dword ptr [esi + 32], eax |
// part 10 |
mov edx, dword ptr [esi + 36] |
mov ecx, dword ptr [edi + ecx*4] |
xor eax, eax |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
shl eax, 24 |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
ror eax, 8 |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
ror eax, 8 |
xor ecx, edx |
or eax, ecx |
ror eax, 8 |
mov dword ptr [esi + 36], eax |
// part 11 |
mov edx, dword ptr [esi + 40] |
mov ecx, dword ptr [edi + ecx*4] |
xor eax, eax |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
shl eax, 24 |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
ror eax, 8 |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
ror eax, 8 |
xor ecx, edx |
or eax, ecx |
ror eax, 8 |
mov dword ptr [esi + 40], eax |
// part 12 |
mov edx, dword ptr [esi + 44] |
mov ecx, dword ptr [edi + ecx*4] |
xor eax, eax |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
shl eax, 24 |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
ror eax, 8 |
xor ecx, edx |
shr edx, 8 |
and ecx, ebx |
or eax, ecx |
mov ecx, dword ptr [edi + ecx*4] |
ror eax, 8 |
xor ecx, edx |
or eax, ecx |
ror eax, 8 |
mov dword ptr [esi + 44], eax |
add ecx, ebp |
inc ebp |
and ecx, ebx |
cmp ebp, 18 |
jnz @roundsloop |
pop ebp |
pop edi |
pop esi |
pop ebx |
end; |
{$ENDIF} |
{$IFDEF THash_MD4_asm} |
procedure THash_MD4.DoTransform(Buffer: PUInt32Array); |
asm |
push ebx |
push esi |
push edi |
lea edi, [eax].THash_MD4.FDigest // let edi points to A,B .. |
mov esi, edx // let esi points to Buffer |
push ebp |
mov eax, [edi] |
mov ebx, [edi+4] |
push edi |
mov ecx, [edi+8] |
mov edx, [edi+0Ch] |
mov edi, ecx |
xor edi, edx |
and edi, ebx |
mov ebp, [esi] |
xor edi, edx |
add eax, ebp |
mov ebp, ebx |
add eax, edi |
rol eax, 3 |
xor ebp, ecx |
mov edi, [esi+4] |
and ebp, eax |
add edx, edi |
xor ebp, ecx |
mov edi, eax |
add edx, ebp |
xor edi, ebx |
rol edx, 7 |
and edi, edx |
mov ebp, [esi+8] |
xor edi, ebx |
add ecx, ebp |
mov ebp, edx |
add ecx, edi |
rol ecx, 0Bh |
xor ebp, eax |
mov edi, [esi+0Ch] |
and ebp, ecx |
add ebx, edi |
xor ebp, eax |
mov edi, ecx |
add ebx, ebp |
xor edi, edx |
ror ebx, 0Dh |
and edi, ebx |
mov ebp, [esi+10h] |
xor edi, edx |
add eax, ebp |
mov ebp, ebx |
add eax, edi |
rol eax, 3 |
xor ebp, ecx |
mov edi, [esi+14h] |
and ebp, eax |
add edx, edi |
xor ebp, ecx |
mov edi, eax |
add edx, ebp |
xor edi, ebx |
rol edx, 7 |
and edi, edx |
mov ebp, [esi+18h] |
xor edi, ebx |
add ecx, ebp |
mov ebp, edx |
add ecx, edi |
rol ecx, 0Bh |
xor ebp, eax |
mov edi, [esi+1Ch] |
and ebp, ecx |
add ebx, edi |
xor ebp, eax |
mov edi, ecx |
add ebx, ebp |
xor edi, edx |
ror ebx, 0Dh |
and edi, ebx |
mov ebp, [esi+20h] |
xor edi, edx |
add eax, ebp |
mov ebp, ebx |
add eax, edi |
rol eax, 3 |
xor ebp, ecx |
mov edi, [esi+24h] |
and ebp, eax |
add edx, edi |
xor ebp, ecx |
mov edi, eax |
add edx, ebp |
xor edi, ebx |
rol edx, 7 |
and edi, edx |
mov ebp, [esi+28h] |
xor edi, ebx |
add ecx, ebp |
mov ebp, edx |
add ecx, edi |
rol ecx, 0Bh |
xor ebp, eax |
mov edi, [esi+2Ch] |
and ebp, ecx |
add ebx, edi |
xor ebp, eax |
mov edi, ecx |
add ebx, ebp |
xor edi, edx |
ror ebx, 0Dh |
and edi, ebx |
mov ebp, [esi+30h] |
xor edi, edx |
add eax, ebp |
mov ebp, ebx |
add eax, edi |
rol eax, 3 |
xor ebp, ecx |
mov edi, [esi+34h] |
and ebp, eax |
add edx, edi |
xor ebp, ecx |
mov edi, eax |
add edx, ebp |
xor edi, ebx |
rol edx, 7 |
and edi, edx |
mov ebp, [esi+38h] |
xor edi, ebx |
add ecx, ebp |
mov ebp, edx |
add ecx, edi |
rol ecx, 0Bh |
xor ebp, eax |
mov edi, [esi+3Ch] |
and ebp, ecx |
add ebx, edi |
xor ebp, eax |
mov edi, edx |
add ebx, ebp |
mov ebp, edx |
ror ebx, 0Dh |
or edi, ecx |
and ebp, ecx |
and edi, ebx |
add eax, [esi] |
or edi, ebp |
mov ebp, ecx |
lea eax, [eax+edi+5A827999h] |
mov edi, ecx |
rol eax, 3 |
or edi, ebx |
and ebp, ebx |
and edi, eax |
add edx, [esi+10h] |
or edi, ebp |
mov ebp, ebx |
lea edx, [edx+edi+5A827999h] |
mov edi, ebx |
rol edx, 5 |
or edi, eax |
and ebp, eax |
and edi, edx |
add ecx, [esi+20h] |
or edi, ebp |
mov ebp, eax |
lea ecx, [ecx+edi+5A827999h] |
mov edi, eax |
rol ecx, 9 |
or edi, edx |
and ebp, edx |
and edi, ecx |
add ebx, [esi+30h] |
or edi, ebp |
mov ebp, edx |
lea ebx, [ebx+edi+5A827999h] |
mov edi, edx |
rol ebx, 0Dh |
or edi, ecx |
and ebp, ecx |
and edi, ebx |
add eax, [esi+4] |
or edi, ebp |
mov ebp, ecx |
lea eax, [eax+edi+5A827999h] |
mov edi, ecx |
rol eax, 3 |
or edi, ebx |
and ebp, ebx |
and edi, eax |
add edx, [esi+14h] |
or edi, ebp |
mov ebp, ebx |
lea edx, [edx+edi+5A827999h] |
mov edi, ebx |
rol edx, 5 |
or edi, eax |
and ebp, eax |
and edi, edx |
add ecx, [esi+24h] |
or edi, ebp |
mov ebp, eax |
lea ecx, [ecx+edi+5A827999h] |
mov edi, eax |
rol ecx, 9 |
or edi, edx |
and ebp, edx |
and edi, ecx |
add ebx, [esi+34h] |
or edi, ebp |
mov ebp, edx |
lea ebx, [ebx+edi+5A827999h] |
mov edi, edx |
rol ebx, 0Dh |
or edi, ecx |
and ebp, ecx |
and edi, ebx |
add eax, [esi+8] |
or edi, ebp |
mov ebp, ecx |
lea eax, [eax+edi+5A827999h] |
mov edi, ecx |
rol eax, 3 |
or edi, ebx |
and ebp, ebx |
and edi, eax |
add edx, [esi+18h] |
or edi, ebp |
mov ebp, ebx |
lea edx, [edx+edi+5A827999h] |
mov edi, ebx |
rol edx, 5 |
or edi, eax |
and ebp, eax |
and edi, edx |
add ecx, [esi+28h] |
or edi, ebp |
mov ebp, eax |
lea ecx, [ecx+edi+5A827999h] |
mov edi, eax |
rol ecx, 9 |
or edi, edx |
and ebp, edx |
and edi, ecx |
add ebx, [esi+38h] |
or edi, ebp |
mov ebp, edx |
lea ebx, [ebx+edi+5A827999h] |
mov edi, edx |
rol ebx, 0Dh |
or edi, ecx |
and ebp, ecx |
and edi, ebx |
add eax, [esi+0Ch] |
or edi, ebp |
mov ebp, ecx |
lea eax, [eax+edi+5A827999h] |
mov edi, ecx |
rol eax, 3 |
or edi, ebx |
and ebp, ebx |
and edi, eax |
add edx, [esi+1Ch] |
or edi, ebp |
mov ebp, ebx |
lea edx, [edx+edi+5A827999h] |
mov edi, ebx |
rol edx, 5 |
or edi, eax |
and ebp, eax |
and edi, edx |
add ecx, [esi+2Ch] |
or edi, ebp |
mov ebp, eax |
lea ecx, [ecx+edi+5A827999h] |
mov edi, eax |
rol ecx, 9 |
or edi, edx |
and ebp, edx |
and edi, ecx |
add ebx, [esi+3Ch] |
or edi, ebp |
mov ebp, edx |
lea ebx, [ebx+edi+5A827999h] |
mov edi, edx |
rol ebx, 0Dh |
xor edi, ecx |
mov ebp, [esi] |
xor edi, ebx |
add eax, ebp |
lea eax, [eax+edi+6ED9EBA1h] |
mov ebp, ecx |
rol eax, 3 |
xor ebp, ebx |
mov edi, [esi+20h] |
xor ebp, eax |
add edx, edi |
lea edx, [edx+ebp+6ED9EBA1h] |
mov edi, ebx |
rol edx, 9 |
xor edi, eax |
mov ebp, [esi+10h] |
xor edi, edx |
add ecx, ebp |
lea ecx, [ecx+edi+6ED9EBA1h] |
mov ebp, eax |
rol ecx, 0Bh |
xor ebp, edx |
mov edi, [esi+30h] |
xor ebp, ecx |
add ebx, edi |
lea ebx, [ebx+ebp+6ED9EBA1h] |
mov edi, edx |
rol ebx, 0Fh |
xor edi, ecx |
mov ebp, [esi+8] |
xor edi, ebx |
add eax, ebp |
lea eax, [eax+edi+6ED9EBA1h] |
mov ebp, ecx |
rol eax, 3 |
xor ebp, ebx |
mov edi, [esi+28h] |
xor ebp, eax |
add edx, edi |
lea edx, [edx+ebp+6ED9EBA1h] |
mov edi, ebx |
rol edx, 9 |
xor edi, eax |
mov ebp, [esi+18h] |
xor edi, edx |
add ecx, ebp |
lea ecx, [ecx+edi+6ED9EBA1h] |
mov ebp, eax |
rol ecx, 0Bh |
xor ebp, edx |
mov edi, [esi+38h] |
xor ebp, ecx |
add ebx, edi |
lea ebx, [ebx+ebp+6ED9EBA1h] |
mov edi, edx |
rol ebx, 0Fh |
xor edi, ecx |
mov ebp, [esi+4] |
xor edi, ebx |
add eax, ebp |
lea eax, [eax+edi+6ED9EBA1h] |
mov ebp, ecx |
rol eax, 3 |
xor ebp, ebx |
mov edi, [esi+24h] |
xor ebp, eax |
add edx, edi |
lea edx, [edx+ebp+6ED9EBA1h] |
mov edi, ebx |
rol edx, 9 |
xor edi, eax |
mov ebp, [esi+14h] |
xor edi, edx |
add ecx, ebp |
lea ecx, [ecx+edi+6ED9EBA1h] |
mov ebp, eax |
rol ecx, 0Bh |
xor ebp, edx |
mov edi, [esi+34h] |
xor ebp, ecx |
add ebx, edi |
lea ebx, [ebx+ebp+6ED9EBA1h] |
mov edi, edx |
rol ebx, 0Fh |
xor edi, ecx |
mov ebp, [esi+0Ch] |
xor edi, ebx |
add eax, ebp |
lea eax, [eax+edi+6ED9EBA1h] |
mov ebp, ecx |
rol eax, 3 |
xor ebp, ebx |
mov edi, [esi+2Ch] |
xor ebp, eax |
add edx, edi |
lea edx, [edx+ebp+6ED9EBA1h] |
mov edi, ebx |
rol edx, 9 |
xor edi, eax |
mov ebp, [esi+1Ch] |
xor edi, edx |
add ecx, ebp |
lea ecx, [ecx+edi+6ED9EBA1h] |
mov ebp, eax |
rol ecx, 0Bh |
xor ebp, edx |
mov edi, [esi+3Ch] |
xor ebp, ecx |
add ebx, edi |
lea ebx, [ebx+ebp+6ED9EBA1h] |
rol ebx, 0Fh |
pop edi |
add [edi], eax |
add [edi+4], ebx |
add [edi+8], ecx |
add [edi+0Ch], edx |
pop ebp |
pop edi |
pop esi |
pop ebx |
end; |
{$ENDIF} |
{$IFDEF THash_MD5_asm} |
procedure THash_MD5.DoTransform(Buffer: PUInt32Array); |
asm |
push ebx |
push esi |
push edi |
lea edi, [eax].THash_MD5.FDigest // let edi points to A,B .. |
mov esi, edx // let esi points to Buffer |
push ebp |
mov eax, [edi] |
mov ebx, [edi+4] |
push edi |
mov ecx, [edi+8] |
mov edx, [edi+0Ch] |
mov edi, ecx |
mov ebp, [esi] |
xor edi, edx |
lea eax, [eax+ebp-28955B88h] |
and edi, ebx |
mov ebp, [esi+4] |
xor edi, edx |
add eax, edi |
mov edi, ebx |
rol eax, 7 |
xor edi, ecx |
add eax, ebx |
lea edx, [edx+ebp-173848AAh] |
and edi, eax |
mov ebp, [esi+8] |
xor edi, ecx |
add edx, edi |
mov edi, eax |
rol edx, 0Ch |
xor edi, ebx |
add edx, eax |
lea ecx, [ecx+ebp+242070DBh] |
and edi, edx |
mov ebp, [esi+0Ch] |
xor edi, ebx |
add ecx, edi |
mov edi, edx |
ror ecx, 0Fh |
xor edi, eax |
add ecx, edx |
lea ebx, [ebx+ebp-3E423112h] |
and edi, ecx |
mov ebp, [esi+10h] |
xor edi, eax |
add ebx, edi |
mov edi, ecx |
ror ebx, 0Ah |
xor edi, edx |
add ebx, ecx |
lea eax, [eax+ebp-0A83F051h] |
and edi, ebx |
mov ebp, [esi+14h] |
xor edi, edx |
add eax, edi |
mov edi, ebx |
rol eax, 7 |
xor edi, ecx |
add eax, ebx |
lea edx, [edx+ebp+4787C62Ah] |
and edi, eax |
mov ebp, [esi+18h] |
xor edi, ecx |
add edx, edi |
mov edi, eax |
rol edx, 0Ch |
xor edi, ebx |
add edx, eax |
lea ecx, [ecx+ebp-57CFB9EDh] |
and edi, edx |
mov ebp, [esi+1Ch] |
xor edi, ebx |
add ecx, edi |
mov edi, edx |
ror ecx, 0Fh |
xor edi, eax |
add ecx, edx |
lea ebx, [ebx+ebp-2B96AFFh] |
and edi, ecx |
mov ebp, [esi+20h] |
xor edi, eax |
add ebx, edi |
mov edi, ecx |
ror ebx, 0Ah |
xor edi, edx |
add ebx, ecx |
lea eax, [eax+ebp+698098D8h] |
and edi, ebx |
mov ebp, [esi+24h] |
xor edi, edx |
add eax, edi |
mov edi, ebx |
rol eax, 7 |
xor edi, ecx |
add eax, ebx |
lea edx, [edx+ebp-74BB0851h] |
and edi, eax |
mov ebp, [esi+28h] |
xor edi, ecx |
add edx, edi |
mov edi, eax |
rol edx, 0Ch |
xor edi, ebx |
add edx, eax |
lea ecx, [ecx+ebp-0A44Fh] |
and edi, edx |
mov ebp, [esi+2Ch] |
xor edi, ebx |
add ecx, edi |
mov edi, edx |
ror ecx, 0Fh |
xor edi, eax |
add ecx, edx |
lea ebx, [ebx+ebp-76A32842h] |
and edi, ecx |
mov ebp, [esi+30h] |
xor edi, eax |
add ebx, edi |
mov edi, ecx |
ror ebx, 0Ah |
xor edi, edx |
add ebx, ecx |
lea eax, [eax+ebp+6B901122h] |
and edi, ebx |
mov ebp, [esi+34h] |
xor edi, edx |
add eax, edi |
mov edi, ebx |
rol eax, 7 |
xor edi, ecx |
add eax, ebx |
lea edx, [edx+ebp-2678E6Dh] |
and edi, eax |
mov ebp, [esi+38h] |
xor edi, ecx |
add edx, edi |
mov edi, eax |
rol edx, 0Ch |
xor edi, ebx |
add edx, eax |
lea ecx, [ecx+ebp-5986BC72h] |
and edi, edx |
mov ebp, [esi+3Ch] |
xor edi, ebx |
add ecx, edi |
mov edi, edx |
ror ecx, 0Fh |
xor edi, eax |
add ecx, edx |
lea ebx, [ebx+ebp+49B40821h] |
and edi, ecx |
mov ebp, [esi+4] |
xor edi, eax |
add ebx, edi |
mov edi, ecx |
ror ebx, 0Ah |
xor edi, edx |
add ebx, ecx |
mov edi, ecx |
xor edi, ebx |
lea eax, [eax+ebp-9E1DA9Eh] |
and edi, edx |
mov ebp, [esi+18h] |
xor edi, ecx |
add eax, edi |
mov edi, ebx |
rol eax, 5 |
add eax, ebx |
xor edi, eax |
lea edx, [edx+ebp-3FBF4CC0h] |
and edi, ecx |
mov ebp, [esi+2Ch] |
xor edi, ebx |
add edx, edi |
mov edi, eax |
rol edx, 9 |
add edx, eax |
xor edi, edx |
lea ecx, [ecx+ebp+265E5A51h] |
and edi, ebx |
mov ebp, [esi] |
xor edi, eax |
add ecx, edi |
mov edi, edx |
rol ecx, 0Eh |
add ecx, edx |
xor edi, ecx |
lea ebx, [ebx+ebp-16493856h] |
and edi, eax |
mov ebp, [esi+14h] |
xor edi, edx |
add ebx, edi |
mov edi, ecx |
ror ebx, 0Ch |
add ebx, ecx |
xor edi, ebx |
lea eax, [eax+ebp-29D0EFA3h] |
and edi, edx |
mov ebp, [esi+28h] |
xor edi, ecx |
add eax, edi |
mov edi, ebx |
rol eax, 5 |
add eax, ebx |
xor edi, eax |
lea edx, [edx+ebp+2441453h] |
and edi, ecx |
mov ebp, [esi+3Ch] |
xor edi, ebx |
add edx, edi |
mov edi, eax |
rol edx, 9 |
add edx, eax |
xor edi, edx |
lea ecx, [ecx+ebp-275E197Fh] |
and edi, ebx |
mov ebp, [esi+10h] |
xor edi, eax |
add ecx, edi |
mov edi, edx |
rol ecx, 0Eh |
add ecx, edx |
xor edi, ecx |
lea ebx, [ebx+ebp-182C0438h] |
and edi, eax |
mov ebp, [esi+24h] |
xor edi, edx |
add ebx, edi |
mov edi, ecx |
ror ebx, 0Ch |
add ebx, ecx |
xor edi, ebx |
lea eax, [eax+ebp+21E1CDE6h] |
and edi, edx |
mov ebp, [esi+38h] |
xor edi, ecx |
add eax, edi |
mov edi, ebx |
rol eax, 5 |
add eax, ebx |
xor edi, eax |
lea edx, [edx+ebp-3CC8F82Ah] |
and edi, ecx |
mov ebp, [esi+0Ch] |
xor edi, ebx |
add edx, edi |
mov edi, eax |
rol edx, 9 |
add edx, eax |
xor edi, edx |
lea ecx, [ecx+ebp-0B2AF279h] |
and edi, ebx |
mov ebp, [esi+20h] |
xor edi, eax |
add ecx, edi |
mov edi, edx |
rol ecx, 0Eh |
add ecx, edx |
xor edi, ecx |
lea ebx, [ebx+ebp+455A14EDh] |
and edi, eax |
mov ebp, [esi+34h] |
xor edi, edx |
add ebx, edi |
mov edi, ecx |
ror ebx, 0Ch |
add ebx, ecx |
xor edi, ebx |
lea eax, [eax+ebp-561C16FBh] |
and edi, edx |
mov ebp, [esi+8] |
xor edi, ecx |
add eax, edi |
mov edi, ebx |
rol eax, 5 |
add eax, ebx |
xor edi, eax |
lea edx, [edx+ebp-3105C08h] |
and edi, ecx |
mov ebp, [esi+1Ch] |
xor edi, ebx |
add edx, edi |
mov edi, eax |
rol edx, 9 |
add edx, eax |
xor edi, edx |
lea ecx, [ecx+ebp+676F02D9h] |
and edi, ebx |
mov ebp, [esi+30h] |
xor edi, eax |
add ecx, edi |
mov edi, edx |
rol ecx, 0Eh |
add ecx, edx |
xor edi, ecx |
lea ebx, [ebx+ebp-72D5B376h] |
and edi, eax |
mov ebp, [esi+14h] |
xor edi, edx |
add ebx, edi |
mov edi, ecx |
ror ebx, 0Ch |
add ebx, ecx |
xor edi, edx |
lea eax, [eax+ebp-5C6BEh] |
xor edi, ebx |
mov ebp, [esi+20h] |
add eax, edi |
rol eax, 4 |
lea edx, [edx+ebp-788E097Fh] |
mov edi, ebx |
add eax, ebx |
xor edi, ecx |
mov ebp, [esi+2Ch] |
xor edi, eax |
add edx, edi |
mov edi, eax |
rol edx, 0Bh |
add edx, eax |
xor edi, ebx |
lea ecx, [ecx+ebp+6D9D6122h] |
xor edi, edx |
mov ebp, [esi+38h] |
add ecx, edi |
rol ecx, 10h |
lea ebx, [ebx+ebp-21AC7F4h] |
mov edi, edx |
add ecx, edx |
xor edi, eax |
mov ebp, [esi+4] |
xor edi, ecx |
add ebx, edi |
mov edi, ecx |
ror ebx, 9 |
add ebx, ecx |
xor edi, edx |
lea eax, [eax+ebp-5B4115BCh] |
xor edi, ebx |
mov ebp, [esi+10h] |
add eax, edi |
rol eax, 4 |
lea edx, [edx+ebp+4BDECFA9h] |
mov edi, ebx |
add eax, ebx |
xor edi, ecx |
mov ebp, [esi+1Ch] |
xor edi, eax |
add edx, edi |
mov edi, eax |
rol edx, 0Bh |
add edx, eax |
xor edi, ebx |
lea ecx, [ecx+ebp-944B4A0h] |
xor edi, edx |
mov ebp, [esi+28h] |
add ecx, edi |
rol ecx, 10h |
lea ebx, [ebx+ebp-41404390h] |
mov edi, edx |
add ecx, edx |
xor edi, eax |
mov ebp, [esi+34h] |
xor edi, ecx |
add ebx, edi |
mov edi, ecx |
ror ebx, 9 |
add ebx, ecx |
xor edi, edx |
lea eax, [eax+ebp+289B7EC6h] |
xor edi, ebx |
mov ebp, [esi] |
add eax, edi |
rol eax, 4 |
lea edx, [edx+ebp-155ED806h] |
mov edi, ebx |
add eax, ebx |
xor edi, ecx |
mov ebp, [esi+0Ch] |
xor edi, eax |
add edx, edi |
mov edi, eax |
rol edx, 0Bh |
add edx, eax |
xor edi, ebx |
lea ecx, [ecx+ebp-2B10CF7Bh] |
xor edi, edx |
mov ebp, [esi+18h] |
add ecx, edi |
rol ecx, 10h |
lea ebx, [ebx+ebp+4881D05h] |
mov edi, edx |
add ecx, edx |
xor edi, eax |
mov ebp, [esi+24h] |
xor edi, ecx |
add ebx, edi |
mov edi, ecx |
ror ebx, 9 |
add ebx, ecx |
xor edi, edx |
lea eax, [eax+ebp-262B2FC7h] |
xor edi, ebx |
mov ebp, [esi+30h] |
add eax, edi |
rol eax, 4 |
lea edx, [edx+ebp-1924661Bh] |
mov edi, ebx |
add eax, ebx |
xor edi, ecx |
mov ebp, [esi+3Ch] |
xor edi, eax |
add edx, edi |
mov edi, eax |
rol edx, 0Bh |
add edx, eax |
xor edi, ebx |
lea ecx, [ecx+ebp+1FA27CF8h] |
xor edi, edx |
mov ebp, [esi+8] |
add ecx, edi |
rol ecx, 10h |
lea ebx, [ebx+ebp-3B53A99Bh] |
mov edi, edx |
add ecx, edx |
xor edi, eax |
mov ebp, [esi] |
xor edi, ecx |
add ebx, edi |
mov edi, edx |
ror ebx, 9 |
add ebx, ecx |
xor edi, 0FFFFFFFFh |
lea eax, [eax+ebp-0BD6DDBCh] |
or edi, ebx |
mov ebp, [esi+1Ch] |
xor edi, ecx |
add eax, edi |
mov edi, ecx |
rol eax, 6 |
add eax, ebx |
xor edi, 0FFFFFFFFh |
lea edx, [edx+ebp+432AFF97h] |
or edi, eax |
mov ebp, [esi+38h] |
xor edi, ebx |
add edx, edi |
mov edi, ebx |
rol edx, 0Ah |
add edx, eax |
xor edi, 0FFFFFFFFh |
lea ecx, [ecx+ebp-546BDC59h] |
or edi, edx |
mov ebp, [esi+14h] |
xor edi, eax |
add ecx, edi |
mov edi, eax |
rol ecx, 0Fh |
add ecx, edx |
xor edi, 0FFFFFFFFh |
lea ebx, [ebx+ebp-36C5FC7h] |
or edi, ecx |
mov ebp, [esi+30h] |
xor edi, edx |
add ebx, edi |
mov edi, edx |
ror ebx, 0Bh |
add ebx, ecx |
xor edi, 0FFFFFFFFh |
lea eax, [eax+ebp+655B59C3h] |
or edi, ebx |
mov ebp, [esi+0Ch] |
xor edi, ecx |
add eax, edi |
mov edi, ecx |
rol eax, 6 |
add eax, ebx |
xor edi, 0FFFFFFFFh |
lea edx, [edx+ebp-70F3336Eh] |
or edi, eax |
mov ebp, [esi+28h] |
xor edi, ebx |
add edx, edi |
mov edi, ebx |
rol edx, 0Ah |
add edx, eax |
xor edi, 0FFFFFFFFh |
lea ecx, [ecx+ebp-100B83h] |
or edi, edx |
mov ebp, [esi+4] |
xor edi, eax |
add ecx, edi |
mov edi, eax |
rol ecx, 0Fh |
add ecx, edx |
xor edi, 0FFFFFFFFh |
lea ebx, [ebx+ebp-7A7BA22Fh] |
or edi, ecx |
mov ebp, [esi+20h] |
xor edi, edx |
add ebx, edi |
mov edi, edx |
ror ebx, 0Bh |
add ebx, ecx |
xor edi, 0FFFFFFFFh |
lea eax, [eax+ebp+6FA87E4Fh] |
or edi, ebx |
mov ebp, [esi+3Ch] |
xor edi, ecx |
add eax, edi |
mov edi, ecx |
rol eax, 6 |
add eax, ebx |
xor edi, 0FFFFFFFFh |
lea edx, [edx+ebp-1D31920h] |
or edi, eax |
mov ebp, [esi+18h] |
xor edi, ebx |
add edx, edi |
mov edi, ebx |
rol edx, 0Ah |
add edx, eax |
xor edi, 0FFFFFFFFh |
lea ecx, [ecx+ebp-5CFEBCECh] |
or edi, edx |
mov ebp, [esi+34h] |
xor edi, eax |
add ecx, edi |
mov edi, eax |
rol ecx, 0Fh |
add ecx, edx |
xor edi, 0FFFFFFFFh |
lea ebx, [ebx+ebp+4E0811A1h] |
or edi, ecx |
mov ebp, [esi+10h] |
xor edi, edx |
add ebx, edi |
mov edi, edx |
ror ebx, 0Bh |
add ebx, ecx |
xor edi, 0FFFFFFFFh |
lea eax, [eax+ebp-8AC817Eh] |
or edi, ebx |
mov ebp, [esi+2Ch] |
xor edi, ecx |
add eax, edi |
mov edi, ecx |
rol eax, 6 |
add eax, ebx |
xor edi, 0FFFFFFFFh |
lea edx, [edx+ebp-42C50DCBh] |
or edi, eax |
mov ebp, [esi+8] |
xor edi, ebx |
add edx, edi |
mov edi, ebx |
rol edx, 0Ah |
add edx, eax |
xor edi, 0FFFFFFFFh |
lea ecx, [ecx+ebp+2AD7D2BBh] |
or edi, edx |
mov ebp, [esi+24h] |
xor edi, eax |
add ecx, edi |
mov edi, eax |
rol ecx, 0Fh |
add ecx, edx |
xor edi, 0FFFFFFFFh |
lea ebx, [ebx+ebp-14792C6Fh] |
or edi, ecx |
xor edi, edx |
add ebx, edi |
ror ebx, 0Bh |
add ebx, ecx |
pop edi |
add [edi], eax |
add [edi+4], ebx |
add [edi+8], ecx |
add [edi+0Ch], edx |
pop ebp |
pop edi |
pop esi |
pop ebx |
end; |
{$ENDIF} |
{$IFDEF THash_RipeMD128_asm} |
procedure THash_RipeMD128.DoTransform(Buffer: PUInt32Array); |
asm |
push ebx |
push esi |
push edi |
lea edi, [eax].THash_RipeMD128.FDigest |
mov esi, edx |
push ebp |
mov eax, [edi] |
mov ebx, [edi+4] |
push edi |
mov ecx, [edi+8] |
mov edx, [edi+0Ch] |
add esp, 0FFFFFFF0h |
mov edi, edx |
xor edi, ecx |
mov ebp, [esi] |
xor edi, ebx |
add eax, ebp |
add eax, edi |
mov edi, ecx |
rol eax, 0Bh |
xor edi, ebx |
mov ebp, [esi+4] |
xor edi, eax |
add edx, ebp |
add edx, edi |
mov edi, ebx |
rol edx, 0Eh |
xor edi, eax |
mov ebp, [esi+8] |
xor edi, edx |
add ecx, ebp |
add ecx, edi |
mov edi, eax |
rol ecx, 0Fh |
xor edi, edx |
mov ebp, [esi+0Ch] |
xor edi, ecx |
add ebx, ebp |
add ebx, edi |
mov edi, edx |
rol ebx, 0Ch |
xor edi, ecx |
mov ebp, [esi+10h] |
xor edi, ebx |
add eax, ebp |
add eax, edi |
mov edi, ecx |
rol eax, 5 |
xor edi, ebx |
mov ebp, [esi+14h] |
xor edi, eax |
add edx, ebp |
add edx, edi |
mov edi, ebx |
rol edx, 8 |
xor edi, eax |
mov ebp, [esi+18h] |
xor edi, edx |
add ecx, ebp |
add ecx, edi |
mov edi, eax |
rol ecx, 7 |
xor edi, edx |
mov ebp, [esi+1Ch] |
xor edi, ecx |
add ebx, ebp |
add ebx, edi |
mov edi, edx |
rol ebx, 9 |
xor edi, ecx |
mov ebp, [esi+20h] |
xor edi, ebx |
add eax, ebp |
add eax, edi |
mov edi, ecx |
rol eax, 0Bh |
xor edi, ebx |
mov ebp, [esi+24h] |
xor edi, eax |
add edx, ebp |
add edx, edi |
mov edi, ebx |
rol edx, 0Dh |
xor edi, eax |
mov ebp, [esi+28h] |
xor edi, edx |
add ecx, ebp |
add ecx, edi |
mov edi, eax |
rol ecx, 0Eh |
xor edi, edx |
mov ebp, [esi+2Ch] |
xor edi, ecx |
add ebx, ebp |
add ebx, edi |
mov edi, edx |
rol ebx, 0Fh |
xor edi, ecx |
mov ebp, [esi+30h] |
xor edi, ebx |
add eax, ebp |
add eax, edi |
mov edi, ecx |
rol eax, 6 |
xor edi, ebx |
mov ebp, [esi+34h] |
xor edi, eax |
add edx, ebp |
add edx, edi |
mov edi, ebx |
rol edx, 7 |
xor edi, eax |
mov ebp, [esi+38h] |
xor edi, edx |
add ecx, ebp |
add ecx, edi |
mov edi, eax |
rol ecx, 9 |
xor edi, edx |
mov ebp, [esi+3Ch] |
xor edi, ecx |
add ebx, ebp |
add ebx, edi |
rol ebx, 8 |
mov ebp, [esi+1Ch] |
mov edi, ecx |
xor edi, edx |
lea eax, [eax+ebp+5A827999h] |
and edi, ebx |
mov ebp, ebx |
xor edi, edx |
xor ebp, ecx |
add eax, edi |
mov edi, [esi+10h] |
rol eax, 7 |
and ebp, eax |
lea edx, [edx+edi+5A827999h] |
xor ebp, ecx |
mov edi, eax |
add edx, ebp |
mov ebp, [esi+34h] |
rol edx, 6 |
xor edi, ebx |
lea ecx, [ecx+ebp+5A827999h] |
and edi, edx |
mov ebp, edx |
xor edi, ebx |
xor ebp, eax |
add ecx, edi |
mov edi, [esi+4] |
rol ecx, 8 |
and ebp, ecx |
lea ebx, [ebx+edi+5A827999h] |
xor ebp, eax |
mov edi, ecx |
add ebx, ebp |
mov ebp, [esi+28h] |
rol ebx, 0Dh |
xor edi, edx |
lea eax, [eax+ebp+5A827999h] |
and edi, ebx |
mov ebp, ebx |
xor edi, edx |
xor ebp, ecx |
add eax, edi |
mov edi, [esi+18h] |
rol eax, 0Bh |
and ebp, eax |
lea edx, [edx+edi+5A827999h] |
xor ebp, ecx |
mov edi, eax |
add edx, ebp |
mov ebp, [esi+3Ch] |
rol edx, 9 |
xor edi, ebx |
lea ecx, [ecx+ebp+5A827999h] |
and edi, edx |
mov ebp, edx |
xor edi, ebx |
xor ebp, eax |
add ecx, edi |
mov edi, [esi+0Ch] |
rol ecx, 7 |
and ebp, ecx |
lea ebx, [ebx+edi+5A827999h] |
xor ebp, eax |
mov edi, ecx |
add ebx, ebp |
mov ebp, [esi+30h] |
rol ebx, 0Fh |
xor edi, edx |
lea eax, [eax+ebp+5A827999h] |
and edi, ebx |
mov ebp, ebx |
xor edi, edx |
xor ebp, ecx |
add eax, edi |
mov edi, [esi] |
rol eax, 7 |
and ebp, eax |
lea edx, [edx+edi+5A827999h] |
xor ebp, ecx |
mov edi, eax |
add edx, ebp |
mov ebp, [esi+24h] |
rol edx, 0Ch |
xor edi, ebx |
lea ecx, [ecx+ebp+5A827999h] |
and edi, edx |
mov ebp, edx |
xor edi, ebx |
xor ebp, eax |
add ecx, edi |
mov edi, [esi+14h] |
rol ecx, 0Fh |
and ebp, ecx |
lea ebx, [ebx+edi+5A827999h] |
xor ebp, eax |
mov edi, ecx |
add ebx, ebp |
mov ebp, [esi+8] |
rol ebx, 9 |
xor edi, edx |
lea eax, [eax+ebp+5A827999h] |
and edi, ebx |
mov ebp, ebx |
xor edi, edx |
xor ebp, ecx |
add eax, edi |
mov edi, [esi+38h] |
rol eax, 0Bh |
and ebp, eax |
lea edx, [edx+edi+5A827999h] |
xor ebp, ecx |
mov edi, eax |
add edx, ebp |
mov ebp, [esi+2Ch] |
rol edx, 7 |
xor edi, ebx |
lea ecx, [ecx+ebp+5A827999h] |
and edi, edx |
mov ebp, edx |
xor edi, ebx |
xor ebp, eax |
add ecx, edi |
mov edi, [esi+20h] |
rol ecx, 0Dh |
and ebp, ecx |
lea ebx, [ebx+edi+5A827999h] |
xor ebp, eax |
add ebx, ebp |
rol ebx, 0Ch |
mov edi, ecx |
mov ebp, [esi+0Ch] |
xor edi, 0FFFFFFFFh |
lea eax, [eax+ebp+6ED9EBA1h] |
or edi, ebx |
mov ebp, ebx |
xor edi, edx |
xor ebp, 0FFFFFFFFh |
add eax, edi |
mov edi, [esi+28h] |
rol eax, 0Bh |
or ebp, eax |
lea edx, [edx+edi+6ED9EBA1h] |
xor ebp, ecx |
mov edi, eax |
add edx, ebp |
mov ebp, [esi+38h] |
rol edx, 0Dh |
xor edi, 0FFFFFFFFh |
lea ecx, [ecx+ebp+6ED9EBA1h] |
or edi, edx |
mov ebp, edx |
xor edi, ebx |
xor ebp, 0FFFFFFFFh |
add ecx, edi |
mov edi, [esi+10h] |
rol ecx, 6 |
or ebp, ecx |
lea ebx, [ebx+edi+6ED9EBA1h] |
xor ebp, eax |
mov edi, ecx |
add ebx, ebp |
mov ebp, [esi+24h] |
rol ebx, 7 |
xor edi, 0FFFFFFFFh |
lea eax, [eax+ebp+6ED9EBA1h] |
or edi, ebx |
mov ebp, ebx |
xor edi, edx |
xor ebp, 0FFFFFFFFh |
add eax, edi |
mov edi, [esi+3Ch] |
rol eax, 0Eh |
or ebp, eax |
lea edx, [edx+edi+6ED9EBA1h] |
xor ebp, ecx |
mov edi, eax |
add edx, ebp |
mov ebp, [esi+20h] |
rol edx, 9 |
xor edi, 0FFFFFFFFh |
lea ecx, [ecx+ebp+6ED9EBA1h] |
or edi, edx |
mov ebp, edx |
xor edi, ebx |
xor ebp, 0FFFFFFFFh |
add ecx, edi |
mov edi, [esi+4] |
rol ecx, 0Dh |
or ebp, ecx |
lea ebx, [ebx+edi+6ED9EBA1h] |
xor ebp, eax |
mov edi, ecx |
add ebx, ebp |
mov ebp, [esi+8] |
rol ebx, 0Fh |
xor edi, 0FFFFFFFFh |
lea eax, [eax+ebp+6ED9EBA1h] |
or edi, ebx |
mov ebp, ebx |
xor edi, edx |
xor ebp, 0FFFFFFFFh |
add eax, edi |
mov edi, [esi+1Ch] |
rol eax, 0Eh |
or ebp, eax |
lea edx, [edx+edi+6ED9EBA1h] |
xor ebp, ecx |
mov edi, eax |
add edx, ebp |
mov ebp, [esi] |
rol edx, 8 |
xor edi, 0FFFFFFFFh |
lea ecx, [ecx+ebp+6ED9EBA1h] |
or edi, edx |
mov ebp, edx |
xor edi, ebx |
xor ebp, 0FFFFFFFFh |
add ecx, edi |
mov edi, [esi+18h] |
rol ecx, 0Dh |
or ebp, ecx |
lea ebx, [ebx+edi+6ED9EBA1h] |
xor ebp, eax |
mov edi, ecx |
add ebx, ebp |
mov ebp, [esi+34h] |
rol ebx, 6 |
xor edi, 0FFFFFFFFh |
lea eax, [eax+ebp+6ED9EBA1h] |
or edi, ebx |
mov ebp, ebx |
xor edi, edx |
xor ebp, 0FFFFFFFFh |
add eax, edi |
mov edi, [esi+2Ch] |
rol eax, 5 |
or ebp, eax |
lea edx, [edx+edi+6ED9EBA1h] |
xor ebp, ecx |
mov edi, eax |
add edx, ebp |
mov ebp, [esi+14h] |
rol edx, 0Ch |
xor edi, 0FFFFFFFFh |
lea ecx, [ecx+ebp+6ED9EBA1h] |
or edi, edx |
mov ebp, edx |
xor edi, ebx |
xor ebp, 0FFFFFFFFh |
add ecx, edi |
mov edi, [esi+30h] |
rol ecx, 7 |
or ebp, ecx |
lea ebx, [ebx+edi+6ED9EBA1h] |
xor ebp, eax |
mov edi, ecx |
add ebx, ebp |
mov ebp, [esi+4] |
rol ebx, 5 |
xor edi, ebx |
lea eax, [eax+ebp-70E44324h] |
and edi, edx |
mov ebp, [esi+24h] |
xor edi, ecx |
add eax, edi |
mov edi, ebx |
rol eax, 0Bh |
xor edi, eax |
lea edx, [edx+ebp-70E44324h] |
and edi, ecx |
mov ebp, [esi+2Ch] |
xor edi, ebx |
add edx, edi |
mov edi, eax |
rol edx, 0Ch |
xor edi, edx |
lea ecx, [ecx+ebp-70E44324h] |
and edi, ebx |
mov ebp, [esi+28h] |
xor edi, eax |
add ecx, edi |
mov edi, edx |
rol ecx, 0Eh |
xor edi, ecx |
lea ebx, [ebx+ebp-70E44324h] |
and edi, eax |
mov ebp, [esi] |
xor edi, edx |
add ebx, edi |
mov edi, ecx |
rol ebx, 0Fh |
xor edi, ebx |
lea eax, [eax+ebp-70E44324h] |
and edi, edx |
mov ebp, [esi+20h] |
xor edi, ecx |
add eax, edi |
mov edi, ebx |
rol eax, 0Eh |
xor edi, eax |
lea edx, [edx+ebp-70E44324h] |
and edi, ecx |
mov ebp, [esi+30h] |
xor edi, ebx |
add edx, edi |
mov edi, eax |
rol edx, 0Fh |
xor edi, edx |
lea ecx, [ecx+ebp-70E44324h] |
and edi, ebx |
mov ebp, [esi+10h] |
xor edi, eax |
add ecx, edi |
mov edi, edx |
rol ecx, 9 |
xor edi, ecx |
lea ebx, [ebx+ebp-70E44324h] |
and edi, eax |
mov ebp, [esi+34h] |
xor edi, edx |
add ebx, edi |
mov edi, ecx |
rol ebx, 8 |
xor edi, ebx |
lea eax, [eax+ebp-70E44324h] |
and edi, edx |
mov ebp, [esi+0Ch] |
xor edi, ecx |
add eax, edi |
mov edi, ebx |
rol eax, 9 |
xor edi, eax |
lea edx, [edx+ebp-70E44324h] |
and edi, ecx |
mov ebp, [esi+1Ch] |
xor edi, ebx |
add edx, edi |
mov edi, eax |
rol edx, 0Eh |
xor edi, edx |
lea ecx, [ecx+ebp-70E44324h] |
and edi, ebx |
mov ebp, [esi+3Ch] |
xor edi, eax |
add ecx, edi |
mov edi, edx |
rol ecx, 5 |
xor edi, ecx |
lea ebx, [ebx+ebp-70E44324h] |
and edi, eax |
mov ebp, [esi+38h] |
xor edi, edx |
add ebx, edi |
mov edi, ecx |
rol ebx, 6 |
xor edi, ebx |
lea eax, [eax+ebp-70E44324h] |
and edi, edx |
mov ebp, [esi+14h] |
xor edi, ecx |
add eax, edi |
mov edi, ebx |
rol eax, 8 |
xor edi, eax |
lea edx, [edx+ebp-70E44324h] |
and edi, ecx |
mov ebp, [esi+18h] |
xor edi, ebx |
add edx, edi |
mov edi, eax |
rol edx, 6 |
xor edi, edx |
lea ecx, [ecx+ebp-70E44324h] |
and edi, ebx |
mov ebp, [esi+8] |
xor edi, eax |
add ecx, edi |
mov edi, edx |
rol ecx, 5 |
xor edi, ecx |
lea ebx, [ebx+ebp-70E44324h] |
and edi, eax |
xor edi, edx |
add ebx, edi |
rol ebx, 0Ch |
mov edi, [esp+10h] |
mov [esp], eax |
mov [esp+4], ebx |
mov eax, [edi] |
mov ebx, [edi+4] |
mov [esp+8], ecx |
mov ecx, [edi+8] |
mov ebp, [esi+14h] |
mov [esp+0Ch], edx |
mov edx, [edi+0Ch] |
mov edi, ecx |
xor edi, ebx |
lea eax, [eax+ebp+50A28BE6h] |
and edi, edx |
mov ebp, [esi+38h] |
xor edi, ecx |
add eax, edi |
mov edi, ebx |
rol eax, 8 |
xor edi, eax |
lea edx, [edx+ebp+50A28BE6h] |
and edi, ecx |
mov ebp, [esi+1Ch] |
xor edi, ebx |
add edx, edi |
mov edi, eax |
rol edx, 9 |
xor edi, edx |
lea ecx, [ecx+ebp+50A28BE6h] |
and edi, ebx |
mov ebp, [esi] |
xor edi, eax |
add ecx, edi |
mov edi, edx |
rol ecx, 9 |
xor edi, ecx |
lea ebx, [ebx+ebp+50A28BE6h] |
and edi, eax |
mov ebp, [esi+24h] |
xor edi, edx |
add ebx, edi |
mov edi, ecx |
rol ebx, 0Bh |
xor edi, ebx |
lea eax, [eax+ebp+50A28BE6h] |
and edi, edx |
mov ebp, [esi+8] |
xor edi, ecx |
add eax, edi |
mov edi, ebx |
rol eax, 0Dh |
xor edi, eax |
lea edx, [edx+ebp+50A28BE6h] |
and edi, ecx |
mov ebp, [esi+2Ch] |
xor edi, ebx |
add edx, edi |
mov edi, eax |
rol edx, 0Fh |
xor edi, edx |
lea ecx, [ecx+ebp+50A28BE6h] |
and edi, ebx |
mov ebp, [esi+10h] |
xor edi, eax |
add ecx, edi |
mov edi, edx |
rol ecx, 0Fh |
xor edi, ecx |
lea ebx, [ebx+ebp+50A28BE6h] |
and edi, eax |
mov ebp, [esi+34h] |
xor edi, edx |
add ebx, edi |
mov edi, ecx |
rol ebx, 5 |
xor edi, ebx |
lea eax, [eax+ebp+50A28BE6h] |
and edi, edx |
mov ebp, [esi+18h] |
xor edi, ecx |
add eax, edi |
mov edi, ebx |
rol eax, 7 |
xor edi, eax |
lea edx, [edx+ebp+50A28BE6h] |
and edi, ecx |
mov ebp, [esi+3Ch] |
xor edi, ebx |
add edx, edi |
mov edi, eax |
rol edx, 7 |
xor edi, edx |
lea ecx, [ecx+ebp+50A28BE6h] |
and edi, ebx |
mov ebp, [esi+20h] |
xor edi, eax |
add ecx, edi |
mov edi, edx |
rol ecx, 8 |
xor edi, ecx |
lea ebx, [ebx+ebp+50A28BE6h] |
and edi, eax |
mov ebp, [esi+4] |
xor edi, edx |
add ebx, edi |
mov edi, ecx |
rol ebx, 0Bh |
xor edi, ebx |
lea eax, [eax+ebp+50A28BE6h] |
and edi, edx |
mov ebp, [esi+28h] |
xor edi, ecx |
add eax, edi |
mov edi, ebx |
rol eax, 0Eh |
xor edi, eax |
lea edx, [edx+ebp+50A28BE6h] |
and edi, ecx |
mov ebp, [esi+0Ch] |
xor edi, ebx |
add edx, edi |
mov edi, eax |
rol edx, 0Eh |
xor edi, edx |
lea ecx, [ecx+ebp+50A28BE6h] |
and edi, ebx |
mov ebp, [esi+30h] |
xor edi, eax |
add ecx, edi |
mov edi, edx |
rol ecx, 0Ch |
xor edi, ecx |
lea ebx, [ebx+ebp+50A28BE6h] |
and edi, eax |
mov ebp, [esi+18h] |
xor edi, edx |
add ebx, edi |
mov edi, ecx |
rol ebx, 6 |
xor edi, 0FFFFFFFFh |
lea eax, [eax+ebp+5C4DD124h] |
or edi, ebx |
mov ebp, ebx |
xor edi, edx |
xor ebp, 0FFFFFFFFh |
add eax, edi |
mov edi, [esi+2Ch] |
rol eax, 9 |
or ebp, eax |
lea edx, [edx+edi+5C4DD124h] |
xor ebp, ecx |
mov edi, eax |
add edx, ebp |
mov ebp, [esi+0Ch] |
rol edx, 0Dh |
xor edi, 0FFFFFFFFh |
lea ecx, [ecx+ebp+5C4DD124h] |
or edi, edx |
mov ebp, edx |
xor edi, ebx |
xor ebp, 0FFFFFFFFh |
add ecx, edi |
mov edi, [esi+1Ch] |
rol ecx, 0Fh |
or ebp, ecx |
lea ebx, [ebx+edi+5C4DD124h] |
xor ebp, eax |
mov edi, ecx |
add ebx, ebp |
mov ebp, [esi] |
rol ebx, 7 |
xor edi, 0FFFFFFFFh |
lea eax, [eax+ebp+5C4DD124h] |
or edi, ebx |
mov ebp, ebx |
xor edi, edx |
xor ebp, 0FFFFFFFFh |
add eax, edi |
mov edi, [esi+34h] |
rol eax, 0Ch |
or ebp, eax |
lea edx, [edx+edi+5C4DD124h] |
xor ebp, ecx |
mov edi, eax |
add edx, ebp |
mov ebp, [esi+14h] |
rol edx, 8 |
xor edi, 0FFFFFFFFh |
lea ecx, [ecx+ebp+5C4DD124h] |
or edi, edx |
mov ebp, edx |
xor edi, ebx |
xor ebp, 0FFFFFFFFh |
add ecx, edi |
mov edi, [esi+28h] |
rol ecx, 9 |
or ebp, ecx |
lea ebx, [ebx+edi+5C4DD124h] |
xor ebp, eax |
mov edi, ecx |
add ebx, ebp |
mov ebp, [esi+38h] |
rol ebx, 0Bh |
xor edi, 0FFFFFFFFh |
lea eax, [eax+ebp+5C4DD124h] |
or edi, ebx |
mov ebp, ebx |
xor edi, edx |
xor ebp, 0FFFFFFFFh |
add eax, edi |
mov edi, [esi+3Ch] |
rol eax, 7 |
or ebp, eax |
lea edx, [edx+edi+5C4DD124h] |
xor ebp, ecx |
mov edi, eax |
add edx, ebp |
mov ebp, [esi+20h] |
rol edx, 7 |
xor edi, 0FFFFFFFFh |
lea ecx, [ecx+ebp+5C4DD124h] |
or edi, edx |
mov ebp, edx |
xor edi, ebx |
xor ebp, 0FFFFFFFFh |
add ecx, edi |
mov edi, [esi+30h] |
rol ecx, 0Ch |
or ebp, ecx |
lea ebx, [ebx+edi+5C4DD124h] |
xor ebp, eax |
mov edi, ecx |
add ebx, ebp |
mov ebp, [esi+10h] |
rol ebx, 7 |
xor edi, 0FFFFFFFFh |
lea eax, [eax+ebp+5C4DD124h] |
or edi, ebx |
mov ebp, ebx |
xor edi, edx |
xor ebp, 0FFFFFFFFh |
add eax, edi |
mov edi, [esi+24h] |
rol eax, 6 |
or ebp, eax |
lea edx, [edx+edi+5C4DD124h] |
xor ebp, ecx |
mov edi, eax |
add edx, ebp |
mov ebp, [esi+4] |
rol edx, 0Fh |
xor edi, 0FFFFFFFFh |
lea ecx, [ecx+ebp+5C4DD124h] |
or edi, edx |
mov ebp, edx |
xor edi, ebx |
xor ebp, 0FFFFFFFFh |
add ecx, edi |
mov edi, [esi+8] |
rol ecx, 0Dh |
or ebp, ecx |
lea ebx, [ebx+edi+5C4DD124h] |
xor ebp, eax |
mov edi, ecx |
add ebx, ebp |
mov ebp, [esi+3Ch] |
rol ebx, 0Bh |
xor edi, edx |
lea eax, [eax+ebp+6D703EF3h] |
and edi, ebx |
mov ebp, ebx |
xor edi, edx |
xor ebp, ecx |
add eax, edi |
mov edi, [esi+14h] |
rol eax, 9 |
and ebp, eax |
lea edx, [edx+edi+6D703EF3h] |
xor ebp, ecx |
mov edi, eax |
add edx, ebp |
mov ebp, [esi+4] |
rol edx, 7 |
xor edi, ebx |
lea ecx, [ecx+ebp+6D703EF3h] |
and edi, edx |
mov ebp, edx |
xor edi, ebx |
xor ebp, eax |
add ecx, edi |
mov edi, [esi+0Ch] |
rol ecx, 0Fh |
and ebp, ecx |
lea ebx, [ebx+edi+6D703EF3h] |
xor ebp, eax |
mov edi, ecx |
add ebx, ebp |
mov ebp, [esi+1Ch] |
rol ebx, 0Bh |
xor edi, edx |
lea eax, [eax+ebp+6D703EF3h] |
and edi, ebx |
mov ebp, ebx |
xor edi, edx |
xor ebp, ecx |
add eax, edi |
mov edi, [esi+38h] |
rol eax, 8 |
and ebp, eax |
lea edx, [edx+edi+6D703EF3h] |
xor ebp, ecx |
mov edi, eax |
add edx, ebp |
mov ebp, [esi+18h] |
rol edx, 6 |
xor edi, ebx |
lea ecx, [ecx+ebp+6D703EF3h] |
and edi, edx |
mov ebp, edx |
xor edi, ebx |
xor ebp, eax |
add ecx, edi |
mov edi, [esi+24h] |
rol ecx, 6 |
and ebp, ecx |
lea ebx, [ebx+edi+6D703EF3h] |
xor ebp, eax |
mov edi, ecx |
add ebx, ebp |
mov ebp, [esi+2Ch] |
rol ebx, 0Eh |
xor edi, edx |
lea eax, [eax+ebp+6D703EF3h] |
and edi, ebx |
mov ebp, ebx |
xor edi, edx |
xor ebp, ecx |
add eax, edi |
mov edi, [esi+20h] |
rol eax, 0Ch |
and ebp, eax |
lea edx, [edx+edi+6D703EF3h] |
xor ebp, ecx |
mov edi, eax |
add edx, ebp |
mov ebp, [esi+30h] |
rol edx, 0Dh |
xor edi, ebx |
lea ecx, [ecx+ebp+6D703EF3h] |
and edi, edx |
mov ebp, edx |
xor edi, ebx |
xor ebp, eax |
add ecx, edi |
mov edi, [esi+8] |
rol ecx, 5 |
and ebp, ecx |
lea ebx, [ebx+edi+6D703EF3h] |
xor ebp, eax |
mov edi, ecx |
add ebx, ebp |
mov ebp, [esi+28h] |
rol ebx, 0Eh |
xor edi, edx |
lea eax, [eax+ebp+6D703EF3h] |
and edi, ebx |
mov ebp, ebx |
xor edi, edx |
xor ebp, ecx |
add eax, edi |
mov edi, [esi] |
rol eax, 0Dh |
and ebp, eax |
lea edx, [edx+edi+6D703EF3h] |
xor ebp, ecx |
mov edi, eax |
add edx, ebp |
mov ebp, [esi+10h] |
rol edx, 0Dh |
xor edi, ebx |
lea ecx, [ecx+ebp+6D703EF3h] |
and edi, edx |
mov ebp, edx |
xor edi, ebx |
xor ebp, eax |
add ecx, edi |
mov edi, [esi+34h] |
rol ecx, 7 |
and ebp, ecx |
lea ebx, [ebx+edi+6D703EF3h] |
xor ebp, eax |
add ebx, ebp |
rol ebx, 5 |
mov edi, edx |
xor edi, ecx |
mov ebp, [esi+20h] |
xor edi, ebx |
add eax, ebp |
add eax, edi |
mov edi, ecx |
rol eax, 0Fh |
xor edi, ebx |
mov ebp, [esi+18h] |
xor edi, eax |
add edx, ebp |
add edx, edi |
mov edi, ebx |
rol edx, 5 |
xor edi, eax |
mov ebp, [esi+10h] |
xor edi, edx |
add ecx, ebp |
add ecx, edi |
mov edi, eax |
rol ecx, 8 |
xor edi, edx |
mov ebp, [esi+4] |
xor edi, ecx |
add ebx, ebp |
add ebx, edi |
mov edi, edx |
rol ebx, 0Bh |
xor edi, ecx |
mov ebp, [esi+0Ch] |
xor edi, ebx |
add eax, ebp |
add eax, edi |
mov edi, ecx |
rol eax, 0Eh |
xor edi, ebx |
mov ebp, [esi+2Ch] |
xor edi, eax |
add edx, ebp |
add edx, edi |
mov edi, ebx |
rol edx, 0Eh |
xor edi, eax |
mov ebp, [esi+3Ch] |
xor edi, edx |
add ecx, ebp |
add ecx, edi |
mov edi, eax |
rol ecx, 6 |
xor edi, edx |
mov ebp, [esi] |
xor edi, ecx |
add ebx, ebp |
add ebx, edi |
mov edi, edx |
rol ebx, 0Eh |
xor edi, ecx |
mov ebp, [esi+14h] |
xor edi, ebx |
add eax, ebp |
add eax, edi |
mov edi, ecx |
rol eax, 6 |
xor edi, ebx |
mov ebp, [esi+30h] |
xor edi, eax |
add edx, ebp |
add edx, edi |
mov edi, ebx |
rol edx, 9 |
xor edi, eax |
mov ebp, [esi+8] |
xor edi, edx |
add ecx, ebp |
add ecx, edi |
mov edi, eax |
rol ecx, 0Ch |
xor edi, edx |
mov ebp, [esi+34h] |
xor edi, ecx |
add ebx, ebp |
add ebx, edi |
mov edi, edx |
rol ebx, 9 |
xor edi, ecx |
mov ebp, [esi+24h] |
xor edi, ebx |
add eax, ebp |
add eax, edi |
mov edi, ecx |
rol eax, 0Ch |
xor edi, ebx |
mov ebp, [esi+1Ch] |
xor edi, eax |
add edx, ebp |
add edx, edi |
mov edi, ebx |
rol edx, 5 |
xor edi, eax |
mov ebp, [esi+28h] |
xor edi, edx |
add ecx, ebp |
add ecx, edi |
mov edi, eax |
rol ecx, 0Fh |
xor edi, edx |
mov ebp, [esi+38h] |
xor edi, ecx |
add ebx, ebp |
add ebx, edi |
rol ebx, 8 |
mov edi, [esp+10h] |
mov ebp, [esp+8] |
mov esi, [esp+0Ch] |
add edx, ebp |
add eax, esi |
mov ebp, [edi+4] |
mov esi, [edi+8] |
add edx, ebp |
add eax, esi |
mov [edi+4], eax |
mov ebp, [esp] |
mov esi, [esp+4] |
add ebx, ebp |
add ecx, esi |
mov ebp, [edi+0Ch] |
mov esi, [edi] |
add ebx, ebp |
add ecx, esi |
mov [edi+8], ebx |
add esp, 14h |
mov [edi+0Ch], ecx |
mov [edi], edx |
pop ebp |
pop edi |
pop esi |
pop ebx |
end; |
{$ENDIF} |
{$IFDEF THash_RipeMD160_asm} |
procedure THash_RipeMD160.DoTransform(Buffer: PUInt32Array); |
asm |
push ebx |
push esi |
push edi |
lea edi, [eax].THash_RipeMD160.FDigest |
mov esi, edx |
push ebp |
mov eax, [edi] |
mov ebx, [edi+4] |
push edi |
mov ecx, [edi+8] |
mov edx, [edi+0Ch] |
mov ebp, [edi+10h] |
add esp, 0FFFFFFECh |
mov edi, edx |
xor edi, ecx |
xor edi, ebx |
add eax, [esi] |
rol ecx, 0Ah |
add eax, edi |
mov edi, ecx |
rol eax, 0Bh |
add eax, ebp |
xor edi, ebx |
xor edi, eax |
add ebp, [esi+4] |
rol ebx, 0Ah |
add ebp, edi |
mov edi, ebx |
rol ebp, 0Eh |
add ebp, edx |
xor edi, eax |
xor edi, ebp |
add edx, [esi+8] |
rol eax, 0Ah |
add edx, edi |
mov edi, eax |
rol edx, 0Fh |
add edx, ecx |
xor edi, ebp |
xor edi, edx |
add ecx, [esi+0Ch] |
rol ebp, 0Ah |
add ecx, edi |
mov edi, ebp |
rol ecx, 0Ch |
add ecx, ebx |
xor edi, edx |
xor edi, ecx |
add ebx, [esi+10h] |
rol edx, 0Ah |
add ebx, edi |
mov edi, edx |
rol ebx, 5 |
add ebx, eax |
xor edi, ecx |
xor edi, ebx |
add eax, [esi+14h] |
rol ecx, 0Ah |
add eax, edi |
mov edi, ecx |
rol eax, 8 |
add eax, ebp |
xor edi, ebx |
xor edi, eax |
add ebp, [esi+18h] |
rol ebx, 0Ah |
add ebp, edi |
mov edi, ebx |
rol ebp, 7 |
add ebp, edx |
xor edi, eax |
xor edi, ebp |
add edx, [esi+1Ch] |
rol eax, 0Ah |
add edx, edi |
mov edi, eax |
rol edx, 9 |
add edx, ecx |
xor edi, ebp |
xor edi, edx |
add ecx, [esi+20h] |
rol ebp, 0Ah |
add ecx, edi |
mov edi, ebp |
rol ecx, 0Bh |
add ecx, ebx |
xor edi, edx |
xor edi, ecx |
add ebx, [esi+24h] |
rol edx, 0Ah |
add ebx, edi |
mov edi, edx |
rol ebx, 0Dh |
add ebx, eax |
xor edi, ecx |
xor edi, ebx |
add eax, [esi+28h] |
rol ecx, 0Ah |
add eax, edi |
mov edi, ecx |
rol eax, 0Eh |
add eax, ebp |
xor edi, ebx |
xor edi, eax |
add ebp, [esi+2Ch] |
rol ebx, 0Ah |
add ebp, edi |
mov edi, ebx |
rol ebp, 0Fh |
add ebp, edx |
xor edi, eax |
xor edi, ebp |
add edx, [esi+30h] |
rol eax, 0Ah |
add edx, edi |
mov edi, eax |
rol edx, 6 |
add edx, ecx |
xor edi, ebp |
xor edi, edx |
add ecx, [esi+34h] |
rol ebp, 0Ah |
add ecx, edi |
mov edi, ebp |
rol ecx, 7 |
add ecx, ebx |
xor edi, edx |
xor edi, ecx |
add ebx, [esi+38h] |
rol edx, 0Ah |
add ebx, edi |
mov edi, edx |
rol ebx, 9 |
add ebx, eax |
xor edi, ecx |
xor edi, ebx |
add eax, [esi+3Ch] |
rol ecx, 0Ah |
add eax, edi |
mov edi, ecx |
rol eax, 8 |
add eax, ebp |
xor edi, ebx |
add ebp, [esi+1Ch] |
and edi, eax |
xor edi, ecx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+5A827999h] |
mov edi, ebx |
rol ebp, 7 |
add ebp, edx |
xor edi, eax |
add edx, [esi+10h] |
and edi, ebp |
xor edi, ebx |
rol eax, 0Ah |
lea edx, [edx+edi+5A827999h] |
mov edi, eax |
rol edx, 6 |
add edx, ecx |
xor edi, ebp |
add ecx, [esi+34h] |
and edi, edx |
xor edi, eax |
rol ebp, 0Ah |
lea ecx, [ecx+edi+5A827999h] |
mov edi, ebp |
rol ecx, 8 |
add ecx, ebx |
xor edi, edx |
add ebx, [esi+4] |
and edi, ecx |
xor edi, ebp |
rol edx, 0Ah |
lea ebx, [ebx+edi+5A827999h] |
mov edi, edx |
rol ebx, 0Dh |
add ebx, eax |
xor edi, ecx |
add eax, [esi+28h] |
and edi, ebx |
xor edi, edx |
rol ecx, 0Ah |
lea eax, [eax+edi+5A827999h] |
mov edi, ecx |
rol eax, 0Bh |
add eax, ebp |
xor edi, ebx |
add ebp, [esi+18h] |
and edi, eax |
xor edi, ecx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+5A827999h] |
mov edi, ebx |
rol ebp, 9 |
add ebp, edx |
xor edi, eax |
add edx, [esi+3Ch] |
and edi, ebp |
xor edi, ebx |
rol eax, 0Ah |
lea edx, [edx+edi+5A827999h] |
mov edi, eax |
rol edx, 7 |
add edx, ecx |
xor edi, ebp |
add ecx, [esi+0Ch] |
and edi, edx |
xor edi, eax |
rol ebp, 0Ah |
lea ecx, [ecx+edi+5A827999h] |
mov edi, ebp |
rol ecx, 0Fh |
add ecx, ebx |
xor edi, edx |
add ebx, [esi+30h] |
and edi, ecx |
xor edi, ebp |
rol edx, 0Ah |
lea ebx, [ebx+edi+5A827999h] |
mov edi, edx |
rol ebx, 7 |
add ebx, eax |
xor edi, ecx |
add eax, [esi] |
and edi, ebx |
xor edi, edx |
rol ecx, 0Ah |
lea eax, [eax+edi+5A827999h] |
mov edi, ecx |
rol eax, 0Ch |
add eax, ebp |
xor edi, ebx |
add ebp, [esi+24h] |
and edi, eax |
xor edi, ecx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+5A827999h] |
mov edi, ebx |
rol ebp, 0Fh |
add ebp, edx |
xor edi, eax |
add edx, [esi+14h] |
and edi, ebp |
xor edi, ebx |
rol eax, 0Ah |
lea edx, [edx+edi+5A827999h] |
mov edi, eax |
rol edx, 9 |
add edx, ecx |
xor edi, ebp |
add ecx, [esi+8] |
and edi, edx |
xor edi, eax |
rol ebp, 0Ah |
lea ecx, [ecx+edi+5A827999h] |
mov edi, ebp |
rol ecx, 0Bh |
add ecx, ebx |
xor edi, edx |
add ebx, [esi+38h] |
and edi, ecx |
xor edi, ebp |
rol edx, 0Ah |
lea ebx, [ebx+edi+5A827999h] |
mov edi, edx |
rol ebx, 7 |
add ebx, eax |
xor edi, ecx |
add eax, [esi+2Ch] |
and edi, ebx |
xor edi, edx |
rol ecx, 0Ah |
lea eax, [eax+edi+5A827999h] |
mov edi, ecx |
rol eax, 0Dh |
add eax, ebp |
xor edi, ebx |
add ebp, [esi+20h] |
and edi, eax |
xor edi, ecx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+5A827999h] |
mov edi, ebx |
rol ebp, 0Ch |
add ebp, edx |
mov edi, eax |
xor edi, 0FFFFFFFFh |
or edi, ebp |
add edx, [esi+0Ch] |
xor edi, ebx |
rol eax, 0Ah |
lea edx, [edx+edi+6ED9EBA1h] |
mov edi, ebp |
rol edx, 0Bh |
xor edi, 0FFFFFFFFh |
add edx, ecx |
or edi, edx |
add ecx, [esi+28h] |
xor edi, eax |
rol ebp, 0Ah |
lea ecx, [ecx+edi+6ED9EBA1h] |
mov edi, edx |
rol ecx, 0Dh |
xor edi, 0FFFFFFFFh |
add ecx, ebx |
or edi, ecx |
add ebx, [esi+38h] |
xor edi, ebp |
rol edx, 0Ah |
lea ebx, [ebx+edi+6ED9EBA1h] |
mov edi, ecx |
rol ebx, 6 |
xor edi, 0FFFFFFFFh |
add ebx, eax |
or edi, ebx |
add eax, [esi+10h] |
xor edi, edx |
rol ecx, 0Ah |
lea eax, [eax+edi+6ED9EBA1h] |
mov edi, ebx |
rol eax, 7 |
xor edi, 0FFFFFFFFh |
add eax, ebp |
or edi, eax |
add ebp, [esi+24h] |
xor edi, ecx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+6ED9EBA1h] |
mov edi, eax |
rol ebp, 0Eh |
xor edi, 0FFFFFFFFh |
add ebp, edx |
or edi, ebp |
add edx, [esi+3Ch] |
xor edi, ebx |
rol eax, 0Ah |
lea edx, [edx+edi+6ED9EBA1h] |
mov edi, ebp |
rol edx, 9 |
xor edi, 0FFFFFFFFh |
add edx, ecx |
or edi, edx |
add ecx, [esi+20h] |
xor edi, eax |
rol ebp, 0Ah |
lea ecx, [ecx+edi+6ED9EBA1h] |
mov edi, edx |
rol ecx, 0Dh |
xor edi, 0FFFFFFFFh |
add ecx, ebx |
or edi, ecx |
add ebx, [esi+4] |
xor edi, ebp |
rol edx, 0Ah |
lea ebx, [ebx+edi+6ED9EBA1h] |
mov edi, ecx |
rol ebx, 0Fh |
xor edi, 0FFFFFFFFh |
add ebx, eax |
or edi, ebx |
add eax, [esi+8] |
xor edi, edx |
rol ecx, 0Ah |
lea eax, [eax+edi+6ED9EBA1h] |
mov edi, ebx |
rol eax, 0Eh |
xor edi, 0FFFFFFFFh |
add eax, ebp |
or edi, eax |
add ebp, [esi+1Ch] |
xor edi, ecx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+6ED9EBA1h] |
mov edi, eax |
rol ebp, 8 |
xor edi, 0FFFFFFFFh |
add ebp, edx |
or edi, ebp |
add edx, [esi] |
xor edi, ebx |
rol eax, 0Ah |
lea edx, [edx+edi+6ED9EBA1h] |
mov edi, ebp |
rol edx, 0Dh |
xor edi, 0FFFFFFFFh |
add edx, ecx |
or edi, edx |
add ecx, [esi+18h] |
xor edi, eax |
rol ebp, 0Ah |
lea ecx, [ecx+edi+6ED9EBA1h] |
mov edi, edx |
rol ecx, 6 |
xor edi, 0FFFFFFFFh |
add ecx, ebx |
or edi, ecx |
add ebx, [esi+34h] |
xor edi, ebp |
rol edx, 0Ah |
lea ebx, [ebx+edi+6ED9EBA1h] |
mov edi, ecx |
rol ebx, 5 |
xor edi, 0FFFFFFFFh |
add ebx, eax |
or edi, ebx |
add eax, [esi+2Ch] |
xor edi, edx |
rol ecx, 0Ah |
lea eax, [eax+edi+6ED9EBA1h] |
mov edi, ebx |
rol eax, 0Ch |
xor edi, 0FFFFFFFFh |
add eax, ebp |
or edi, eax |
add ebp, [esi+14h] |
xor edi, ecx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+6ED9EBA1h] |
mov edi, eax |
rol ebp, 7 |
xor edi, 0FFFFFFFFh |
add ebp, edx |
or edi, ebp |
add edx, [esi+30h] |
xor edi, ebx |
rol eax, 0Ah |
lea edx, [edx+edi+6ED9EBA1h] |
mov edi, ebp |
rol edx, 5 |
xor edi, 0FFFFFFFFh |
add edx, ecx |
mov edi, ebp |
xor edi, edx |
and edi, eax |
add ecx, [esi+4] |
xor edi, ebp |
rol ebp, 0Ah |
lea ecx, [ecx+edi-70E44324h] |
mov edi, edx |
rol ecx, 0Bh |
add ecx, ebx |
xor edi, ecx |
and edi, ebp |
add ebx, [esi+24h] |
xor edi, edx |
rol edx, 0Ah |
lea ebx, [ebx+edi-70E44324h] |
mov edi, ecx |
rol ebx, 0Ch |
add ebx, eax |
xor edi, ebx |
and edi, edx |
add eax, [esi+2Ch] |
xor edi, ecx |
rol ecx, 0Ah |
lea eax, [eax+edi-70E44324h] |
mov edi, ebx |
rol eax, 0Eh |
add eax, ebp |
xor edi, eax |
and edi, ecx |
add ebp, [esi+28h] |
xor edi, ebx |
rol ebx, 0Ah |
lea ebp, [ebp+edi-70E44324h] |
mov edi, eax |
rol ebp, 0Fh |
add ebp, edx |
xor edi, ebp |
and edi, ebx |
add edx, [esi] |
xor edi, eax |
rol eax, 0Ah |
lea edx, [edx+edi-70E44324h] |
mov edi, ebp |
rol edx, 0Eh |
add edx, ecx |
xor edi, edx |
and edi, eax |
add ecx, [esi+20h] |
xor edi, ebp |
rol ebp, 0Ah |
lea ecx, [ecx+edi-70E44324h] |
mov edi, edx |
rol ecx, 0Fh |
add ecx, ebx |
xor edi, ecx |
and edi, ebp |
add ebx, [esi+30h] |
xor edi, edx |
rol edx, 0Ah |
lea ebx, [ebx+edi-70E44324h] |
mov edi, ecx |
rol ebx, 9 |
add ebx, eax |
xor edi, ebx |
and edi, edx |
add eax, [esi+10h] |
xor edi, ecx |
rol ecx, 0Ah |
lea eax, [eax+edi-70E44324h] |
mov edi, ebx |
rol eax, 8 |
add eax, ebp |
xor edi, eax |
and edi, ecx |
add ebp, [esi+34h] |
xor edi, ebx |
rol ebx, 0Ah |
lea ebp, [ebp+edi-70E44324h] |
mov edi, eax |
rol ebp, 9 |
add ebp, edx |
xor edi, ebp |
and edi, ebx |
add edx, [esi+0Ch] |
xor edi, eax |
rol eax, 0Ah |
lea edx, [edx+edi-70E44324h] |
mov edi, ebp |
rol edx, 0Eh |
add edx, ecx |
xor edi, edx |
and edi, eax |
add ecx, [esi+1Ch] |
xor edi, ebp |
rol ebp, 0Ah |
lea ecx, [ecx+edi-70E44324h] |
mov edi, edx |
rol ecx, 5 |
add ecx, ebx |
xor edi, ecx |
and edi, ebp |
add ebx, [esi+3Ch] |
xor edi, edx |
rol edx, 0Ah |
lea ebx, [ebx+edi-70E44324h] |
mov edi, ecx |
rol ebx, 6 |
add ebx, eax |
xor edi, ebx |
and edi, edx |
add eax, [esi+38h] |
xor edi, ecx |
rol ecx, 0Ah |
lea eax, [eax+edi-70E44324h] |
mov edi, ebx |
rol eax, 8 |
add eax, ebp |
xor edi, eax |
and edi, ecx |
add ebp, [esi+14h] |
xor edi, ebx |
rol ebx, 0Ah |
lea ebp, [ebp+edi-70E44324h] |
mov edi, eax |
rol ebp, 6 |
add ebp, edx |
xor edi, ebp |
and edi, ebx |
add edx, [esi+18h] |
xor edi, eax |
rol eax, 0Ah |
lea edx, [edx+edi-70E44324h] |
mov edi, ebp |
rol edx, 5 |
add edx, ecx |
xor edi, edx |
and edi, eax |
add ecx, [esi+8] |
xor edi, ebp |
rol ebp, 0Ah |
lea ecx, [ecx+edi-70E44324h] |
mov edi, edx |
rol ecx, 0Ch |
add ecx, ebx |
mov edi, ebp |
xor edi, 0FFFFFFFFh |
or edi, edx |
add ebx, [esi+10h] |
xor edi, ecx |
rol edx, 0Ah |
lea ebx, [ebx+edi-56AC02B2h] |
mov edi, edx |
rol ebx, 9 |
add ebx, eax |
xor edi, 0FFFFFFFFh |
or edi, ecx |
add eax, [esi] |
xor edi, ebx |
rol ecx, 0Ah |
lea eax, [eax+edi-56AC02B2h] |
mov edi, ecx |
rol eax, 0Fh |
add eax, ebp |
xor edi, 0FFFFFFFFh |
or edi, ebx |
add ebp, [esi+14h] |
xor edi, eax |
rol ebx, 0Ah |
lea ebp, [ebp+edi-56AC02B2h] |
mov edi, ebx |
rol ebp, 5 |
add ebp, edx |
xor edi, 0FFFFFFFFh |
or edi, eax |
add edx, [esi+24h] |
xor edi, ebp |
rol eax, 0Ah |
lea edx, [edx+edi-56AC02B2h] |
mov edi, eax |
rol edx, 0Bh |
add edx, ecx |
xor edi, 0FFFFFFFFh |
or edi, ebp |
add ecx, [esi+1Ch] |
xor edi, edx |
rol ebp, 0Ah |
lea ecx, [ecx+edi-56AC02B2h] |
mov edi, ebp |
rol ecx, 6 |
add ecx, ebx |
xor edi, 0FFFFFFFFh |
or edi, edx |
add ebx, [esi+30h] |
xor edi, ecx |
rol edx, 0Ah |
lea ebx, [ebx+edi-56AC02B2h] |
mov edi, edx |
rol ebx, 8 |
add ebx, eax |
xor edi, 0FFFFFFFFh |
or edi, ecx |
add eax, [esi+8] |
xor edi, ebx |
rol ecx, 0Ah |
lea eax, [eax+edi-56AC02B2h] |
mov edi, ecx |
rol eax, 0Dh |
add eax, ebp |
xor edi, 0FFFFFFFFh |
or edi, ebx |
add ebp, [esi+28h] |
xor edi, eax |
rol ebx, 0Ah |
lea ebp, [ebp+edi-56AC02B2h] |
mov edi, ebx |
rol ebp, 0Ch |
add ebp, edx |
xor edi, 0FFFFFFFFh |
or edi, eax |
add edx, [esi+38h] |
xor edi, ebp |
rol eax, 0Ah |
lea edx, [edx+edi-56AC02B2h] |
mov edi, eax |
rol edx, 5 |
add edx, ecx |
xor edi, 0FFFFFFFFh |
or edi, ebp |
add ecx, [esi+4] |
xor edi, edx |
rol ebp, 0Ah |
lea ecx, [ecx+edi-56AC02B2h] |
mov edi, ebp |
rol ecx, 0Ch |
add ecx, ebx |
xor edi, 0FFFFFFFFh |
or edi, edx |
add ebx, [esi+0Ch] |
xor edi, ecx |
rol edx, 0Ah |
lea ebx, [ebx+edi-56AC02B2h] |
mov edi, edx |
rol ebx, 0Dh |
add ebx, eax |
xor edi, 0FFFFFFFFh |
or edi, ecx |
add eax, [esi+20h] |
xor edi, ebx |
rol ecx, 0Ah |
lea eax, [eax+edi-56AC02B2h] |
mov edi, ecx |
rol eax, 0Eh |
add eax, ebp |
xor edi, 0FFFFFFFFh |
or edi, ebx |
add ebp, [esi+2Ch] |
xor edi, eax |
rol ebx, 0Ah |
lea ebp, [ebp+edi-56AC02B2h] |
mov edi, ebx |
rol ebp, 0Bh |
add ebp, edx |
xor edi, 0FFFFFFFFh |
or edi, eax |
add edx, [esi+18h] |
xor edi, ebp |
rol eax, 0Ah |
lea edx, [edx+edi-56AC02B2h] |
mov edi, eax |
rol edx, 8 |
add edx, ecx |
xor edi, 0FFFFFFFFh |
or edi, ebp |
add ecx, [esi+3Ch] |
xor edi, edx |
rol ebp, 0Ah |
lea ecx, [ecx+edi-56AC02B2h] |
mov edi, ebp |
rol ecx, 5 |
add ecx, ebx |
xor edi, 0FFFFFFFFh |
or edi, edx |
add ebx, [esi+34h] |
xor edi, ecx |
rol edx, 0Ah |
lea ebx, [ebx+edi-56AC02B2h] |
mov edi, edx |
rol ebx, 6 |
add ebx, eax |
mov edi, [esp+14h] |
mov [esp], eax |
mov [esp+4], ebx |
mov eax, [edi] |
mov ebx, [edi+4] |
mov [esp+8], ecx |
mov [esp+0Ch], edx |
mov ecx, [edi+8] |
mov edx, [edi+0Ch] |
mov [esp+10h], ebp |
mov ebp, [edi+10h] |
mov edi, edx |
xor edi, 0FFFFFFFFh |
or edi, ecx |
add eax, [esi+14h] |
xor edi, ebx |
rol ecx, 0Ah |
lea eax, [eax+edi+50A28BE6h] |
mov edi, ecx |
rol eax, 8 |
add eax, ebp |
xor edi, 0FFFFFFFFh |
or edi, ebx |
add ebp, [esi+38h] |
xor edi, eax |
rol ebx, 0Ah |
lea ebp, [ebp+edi+50A28BE6h] |
mov edi, ebx |
rol ebp, 9 |
add ebp, edx |
xor edi, 0FFFFFFFFh |
or edi, eax |
add edx, [esi+1Ch] |
xor edi, ebp |
rol eax, 0Ah |
lea edx, [edx+edi+50A28BE6h] |
mov edi, eax |
rol edx, 9 |
add edx, ecx |
xor edi, 0FFFFFFFFh |
or edi, ebp |
add ecx, [esi] |
xor edi, edx |
rol ebp, 0Ah |
lea ecx, [ecx+edi+50A28BE6h] |
mov edi, ebp |
rol ecx, 0Bh |
add ecx, ebx |
xor edi, 0FFFFFFFFh |
or edi, edx |
add ebx, [esi+24h] |
xor edi, ecx |
rol edx, 0Ah |
lea ebx, [ebx+edi+50A28BE6h] |
mov edi, edx |
rol ebx, 0Dh |
add ebx, eax |
xor edi, 0FFFFFFFFh |
or edi, ecx |
add eax, [esi+8] |
xor edi, ebx |
rol ecx, 0Ah |
lea eax, [eax+edi+50A28BE6h] |
mov edi, ecx |
rol eax, 0Fh |
add eax, ebp |
xor edi, 0FFFFFFFFh |
or edi, ebx |
add ebp, [esi+2Ch] |
xor edi, eax |
rol ebx, 0Ah |
lea ebp, [ebp+edi+50A28BE6h] |
mov edi, ebx |
rol ebp, 0Fh |
add ebp, edx |
xor edi, 0FFFFFFFFh |
or edi, eax |
add edx, [esi+10h] |
xor edi, ebp |
rol eax, 0Ah |
lea edx, [edx+edi+50A28BE6h] |
mov edi, eax |
rol edx, 5 |
add edx, ecx |
xor edi, 0FFFFFFFFh |
or edi, ebp |
add ecx, [esi+34h] |
xor edi, edx |
rol ebp, 0Ah |
lea ecx, [ecx+edi+50A28BE6h] |
mov edi, ebp |
rol ecx, 7 |
add ecx, ebx |
xor edi, 0FFFFFFFFh |
or edi, edx |
add ebx, [esi+18h] |
xor edi, ecx |
rol edx, 0Ah |
lea ebx, [ebx+edi+50A28BE6h] |
mov edi, edx |
rol ebx, 7 |
add ebx, eax |
xor edi, 0FFFFFFFFh |
or edi, ecx |
add eax, [esi+3Ch] |
xor edi, ebx |
rol ecx, 0Ah |
lea eax, [eax+edi+50A28BE6h] |
mov edi, ecx |
rol eax, 8 |
add eax, ebp |
xor edi, 0FFFFFFFFh |
or edi, ebx |
add ebp, [esi+20h] |
xor edi, eax |
rol ebx, 0Ah |
lea ebp, [ebp+edi+50A28BE6h] |
mov edi, ebx |
rol ebp, 0Bh |
add ebp, edx |
xor edi, 0FFFFFFFFh |
or edi, eax |
add edx, [esi+4] |
xor edi, ebp |
rol eax, 0Ah |
lea edx, [edx+edi+50A28BE6h] |
mov edi, eax |
rol edx, 0Eh |
add edx, ecx |
xor edi, 0FFFFFFFFh |
or edi, ebp |
add ecx, [esi+28h] |
xor edi, edx |
rol ebp, 0Ah |
lea ecx, [ecx+edi+50A28BE6h] |
mov edi, ebp |
rol ecx, 0Eh |
add ecx, ebx |
xor edi, 0FFFFFFFFh |
or edi, edx |
add ebx, [esi+0Ch] |
xor edi, ecx |
rol edx, 0Ah |
lea ebx, [ebx+edi+50A28BE6h] |
mov edi, edx |
rol ebx, 0Ch |
add ebx, eax |
xor edi, 0FFFFFFFFh |
or edi, ecx |
add eax, [esi+30h] |
xor edi, ebx |
rol ecx, 0Ah |
lea eax, [eax+edi+50A28BE6h] |
mov edi, ecx |
rol eax, 6 |
add eax, ebp |
mov edi, ebx |
xor edi, eax |
and edi, ecx |
add ebp, [esi+18h] |
xor edi, ebx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+5C4DD124h] |
mov edi, eax |
rol ebp, 9 |
add ebp, edx |
xor edi, ebp |
and edi, ebx |
add edx, [esi+2Ch] |
xor edi, eax |
rol eax, 0Ah |
lea edx, [edx+edi+5C4DD124h] |
mov edi, ebp |
rol edx, 0Dh |
add edx, ecx |
xor edi, edx |
and edi, eax |
add ecx, [esi+0Ch] |
xor edi, ebp |
rol ebp, 0Ah |
lea ecx, [ecx+edi+5C4DD124h] |
mov edi, edx |
rol ecx, 0Fh |
add ecx, ebx |
xor edi, ecx |
and edi, ebp |
add ebx, [esi+1Ch] |
xor edi, edx |
rol edx, 0Ah |
lea ebx, [ebx+edi+5C4DD124h] |
mov edi, ecx |
rol ebx, 7 |
add ebx, eax |
xor edi, ebx |
and edi, edx |
add eax, [esi] |
xor edi, ecx |
rol ecx, 0Ah |
lea eax, [eax+edi+5C4DD124h] |
mov edi, ebx |
rol eax, 0Ch |
add eax, ebp |
xor edi, eax |
and edi, ecx |
add ebp, [esi+34h] |
xor edi, ebx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+5C4DD124h] |
mov edi, eax |
rol ebp, 8 |
add ebp, edx |
xor edi, ebp |
and edi, ebx |
add edx, [esi+14h] |
xor edi, eax |
rol eax, 0Ah |
lea edx, [edx+edi+5C4DD124h] |
mov edi, ebp |
rol edx, 9 |
add edx, ecx |
xor edi, edx |
and edi, eax |
add ecx, [esi+28h] |
xor edi, ebp |
rol ebp, 0Ah |
lea ecx, [ecx+edi+5C4DD124h] |
mov edi, edx |
rol ecx, 0Bh |
add ecx, ebx |
xor edi, ecx |
and edi, ebp |
add ebx, [esi+38h] |
xor edi, edx |
rol edx, 0Ah |
lea ebx, [ebx+edi+5C4DD124h] |
mov edi, ecx |
rol ebx, 7 |
add ebx, eax |
xor edi, ebx |
and edi, edx |
add eax, [esi+3Ch] |
xor edi, ecx |
rol ecx, 0Ah |
lea eax, [eax+edi+5C4DD124h] |
mov edi, ebx |
rol eax, 7 |
add eax, ebp |
xor edi, eax |
and edi, ecx |
add ebp, [esi+20h] |
xor edi, ebx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+5C4DD124h] |
mov edi, eax |
rol ebp, 0Ch |
add ebp, edx |
xor edi, ebp |
and edi, ebx |
add edx, [esi+30h] |
xor edi, eax |
rol eax, 0Ah |
lea edx, [edx+edi+5C4DD124h] |
mov edi, ebp |
rol edx, 7 |
add edx, ecx |
xor edi, edx |
and edi, eax |
add ecx, [esi+10h] |
xor edi, ebp |
rol ebp, 0Ah |
lea ecx, [ecx+edi+5C4DD124h] |
mov edi, edx |
rol ecx, 6 |
add ecx, ebx |
xor edi, ecx |
and edi, ebp |
add ebx, [esi+24h] |
xor edi, edx |
rol edx, 0Ah |
lea ebx, [ebx+edi+5C4DD124h] |
mov edi, ecx |
rol ebx, 0Fh |
add ebx, eax |
xor edi, ebx |
and edi, edx |
add eax, [esi+4] |
xor edi, ecx |
rol ecx, 0Ah |
lea eax, [eax+edi+5C4DD124h] |
mov edi, ebx |
rol eax, 0Dh |
add eax, ebp |
xor edi, eax |
and edi, ecx |
add ebp, [esi+8] |
xor edi, ebx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+5C4DD124h] |
mov edi, eax |
rol ebp, 0Bh |
add ebp, edx |
mov edi, eax |
xor edi, 0FFFFFFFFh |
or edi, ebp |
add edx, [esi+3Ch] |
xor edi, ebx |
rol eax, 0Ah |
lea edx, [edx+edi+6D703EF3h] |
mov edi, ebp |
rol edx, 9 |
xor edi, 0FFFFFFFFh |
add edx, ecx |
or edi, edx |
add ecx, [esi+14h] |
xor edi, eax |
rol ebp, 0Ah |
lea ecx, [ecx+edi+6D703EF3h] |
mov edi, edx |
rol ecx, 7 |
xor edi, 0FFFFFFFFh |
add ecx, ebx |
or edi, ecx |
add ebx, [esi+4] |
xor edi, ebp |
rol edx, 0Ah |
lea ebx, [ebx+edi+6D703EF3h] |
mov edi, ecx |
rol ebx, 0Fh |
xor edi, 0FFFFFFFFh |
add ebx, eax |
or edi, ebx |
add eax, [esi+0Ch] |
xor edi, edx |
rol ecx, 0Ah |
lea eax, [eax+edi+6D703EF3h] |
mov edi, ebx |
rol eax, 0Bh |
xor edi, 0FFFFFFFFh |
add eax, ebp |
or edi, eax |
add ebp, [esi+1Ch] |
xor edi, ecx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+6D703EF3h] |
mov edi, eax |
rol ebp, 8 |
xor edi, 0FFFFFFFFh |
add ebp, edx |
or edi, ebp |
add edx, [esi+38h] |
xor edi, ebx |
rol eax, 0Ah |
lea edx, [edx+edi+6D703EF3h] |
mov edi, ebp |
rol edx, 6 |
xor edi, 0FFFFFFFFh |
add edx, ecx |
or edi, edx |
add ecx, [esi+18h] |
xor edi, eax |
rol ebp, 0Ah |
lea ecx, [ecx+edi+6D703EF3h] |
mov edi, edx |
rol ecx, 6 |
xor edi, 0FFFFFFFFh |
add ecx, ebx |
or edi, ecx |
add ebx, [esi+24h] |
xor edi, ebp |
rol edx, 0Ah |
lea ebx, [ebx+edi+6D703EF3h] |
mov edi, ecx |
rol ebx, 0Eh |
xor edi, 0FFFFFFFFh |
add ebx, eax |
or edi, ebx |
add eax, [esi+2Ch] |
xor edi, edx |
rol ecx, 0Ah |
lea eax, [eax+edi+6D703EF3h] |
mov edi, ebx |
rol eax, 0Ch |
xor edi, 0FFFFFFFFh |
add eax, ebp |
or edi, eax |
add ebp, [esi+20h] |
xor edi, ecx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+6D703EF3h] |
mov edi, eax |
rol ebp, 0Dh |
xor edi, 0FFFFFFFFh |
add ebp, edx |
or edi, ebp |
add edx, [esi+30h] |
xor edi, ebx |
rol eax, 0Ah |
lea edx, [edx+edi+6D703EF3h] |
mov edi, ebp |
rol edx, 5 |
xor edi, 0FFFFFFFFh |
add edx, ecx |
or edi, edx |
add ecx, [esi+8] |
xor edi, eax |
rol ebp, 0Ah |
lea ecx, [ecx+edi+6D703EF3h] |
mov edi, edx |
rol ecx, 0Eh |
xor edi, 0FFFFFFFFh |
add ecx, ebx |
or edi, ecx |
add ebx, [esi+28h] |
xor edi, ebp |
rol edx, 0Ah |
lea ebx, [ebx+edi+6D703EF3h] |
mov edi, ecx |
rol ebx, 0Dh |
xor edi, 0FFFFFFFFh |
add ebx, eax |
or edi, ebx |
add eax, [esi] |
xor edi, edx |
rol ecx, 0Ah |
lea eax, [eax+edi+6D703EF3h] |
mov edi, ebx |
rol eax, 0Dh |
xor edi, 0FFFFFFFFh |
add eax, ebp |
or edi, eax |
add ebp, [esi+10h] |
xor edi, ecx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+6D703EF3h] |
mov edi, eax |
rol ebp, 7 |
xor edi, 0FFFFFFFFh |
add ebp, edx |
or edi, ebp |
add edx, [esi+34h] |
xor edi, ebx |
rol eax, 0Ah |
lea edx, [edx+edi+6D703EF3h] |
mov edi, ebp |
rol edx, 5 |
xor edi, 0FFFFFFFFh |
add edx, ecx |
mov edi, eax |
xor edi, ebp |
add ecx, [esi+20h] |
and edi, edx |
xor edi, eax |
rol ebp, 0Ah |
lea ecx, [ecx+edi+7A6D76E9h] |
mov edi, ebp |
rol ecx, 0Fh |
add ecx, ebx |
xor edi, edx |
add ebx, [esi+18h] |
and edi, ecx |
xor edi, ebp |
rol edx, 0Ah |
lea ebx, [ebx+edi+7A6D76E9h] |
mov edi, edx |
rol ebx, 5 |
add ebx, eax |
xor edi, ecx |
add eax, [esi+10h] |
and edi, ebx |
xor edi, edx |
rol ecx, 0Ah |
lea eax, [eax+edi+7A6D76E9h] |
mov edi, ecx |
rol eax, 8 |
add eax, ebp |
xor edi, ebx |
add ebp, [esi+4] |
and edi, eax |
xor edi, ecx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+7A6D76E9h] |
mov edi, ebx |
rol ebp, 0Bh |
add ebp, edx |
xor edi, eax |
add edx, [esi+0Ch] |
and edi, ebp |
xor edi, ebx |
rol eax, 0Ah |
lea edx, [edx+edi+7A6D76E9h] |
mov edi, eax |
rol edx, 0Eh |
add edx, ecx |
xor edi, ebp |
add ecx, [esi+2Ch] |
and edi, edx |
xor edi, eax |
rol ebp, 0Ah |
lea ecx, [ecx+edi+7A6D76E9h] |
mov edi, ebp |
rol ecx, 0Eh |
add ecx, ebx |
xor edi, edx |
add ebx, [esi+3Ch] |
and edi, ecx |
xor edi, ebp |
rol edx, 0Ah |
lea ebx, [ebx+edi+7A6D76E9h] |
mov edi, edx |
rol ebx, 6 |
add ebx, eax |
xor edi, ecx |
add eax, [esi] |
and edi, ebx |
xor edi, edx |
rol ecx, 0Ah |
lea eax, [eax+edi+7A6D76E9h] |
mov edi, ecx |
rol eax, 0Eh |
add eax, ebp |
xor edi, ebx |
add ebp, [esi+14h] |
and edi, eax |
xor edi, ecx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+7A6D76E9h] |
mov edi, ebx |
rol ebp, 6 |
add ebp, edx |
xor edi, eax |
add edx, [esi+30h] |
and edi, ebp |
xor edi, ebx |
rol eax, 0Ah |
lea edx, [edx+edi+7A6D76E9h] |
mov edi, eax |
rol edx, 9 |
add edx, ecx |
xor edi, ebp |
add ecx, [esi+8] |
and edi, edx |
xor edi, eax |
rol ebp, 0Ah |
lea ecx, [ecx+edi+7A6D76E9h] |
mov edi, ebp |
rol ecx, 0Ch |
add ecx, ebx |
xor edi, edx |
add ebx, [esi+34h] |
and edi, ecx |
xor edi, ebp |
rol edx, 0Ah |
lea ebx, [ebx+edi+7A6D76E9h] |
mov edi, edx |
rol ebx, 9 |
add ebx, eax |
xor edi, ecx |
add eax, [esi+24h] |
and edi, ebx |
xor edi, edx |
rol ecx, 0Ah |
lea eax, [eax+edi+7A6D76E9h] |
mov edi, ecx |
rol eax, 0Ch |
add eax, ebp |
xor edi, ebx |
add ebp, [esi+1Ch] |
and edi, eax |
xor edi, ecx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+7A6D76E9h] |
mov edi, ebx |
rol ebp, 5 |
add ebp, edx |
xor edi, eax |
add edx, [esi+28h] |
and edi, ebp |
xor edi, ebx |
rol eax, 0Ah |
lea edx, [edx+edi+7A6D76E9h] |
mov edi, eax |
rol edx, 0Fh |
add edx, ecx |
xor edi, ebp |
add ecx, [esi+38h] |
and edi, edx |
xor edi, eax |
rol ebp, 0Ah |
lea ecx, [ecx+edi+7A6D76E9h] |
mov edi, ebp |
rol ecx, 8 |
add ecx, ebx |
xor edi, edx |
xor edi, ecx |
add ebx, [esi+30h] |
rol edx, 0Ah |
add ebx, edi |
mov edi, edx |
rol ebx, 8 |
add ebx, eax |
xor edi, ecx |
xor edi, ebx |
add eax, [esi+3Ch] |
rol ecx, 0Ah |
add eax, edi |
mov edi, ecx |
rol eax, 5 |
add eax, ebp |
xor edi, ebx |
xor edi, eax |
add ebp, [esi+28h] |
rol ebx, 0Ah |
add ebp, edi |
mov edi, ebx |
rol ebp, 0Ch |
add ebp, edx |
xor edi, eax |
xor edi, ebp |
add edx, [esi+10h] |
rol eax, 0Ah |
add edx, edi |
mov edi, eax |
rol edx, 9 |
add edx, ecx |
xor edi, ebp |
xor edi, edx |
add ecx, [esi+4] |
rol ebp, 0Ah |
add ecx, edi |
mov edi, ebp |
rol ecx, 0Ch |
add ecx, ebx |
xor edi, edx |
xor edi, ecx |
add ebx, [esi+14h] |
rol edx, 0Ah |
add ebx, edi |
mov edi, edx |
rol ebx, 5 |
add ebx, eax |
xor edi, ecx |
xor edi, ebx |
add eax, [esi+20h] |
rol ecx, 0Ah |
add eax, edi |
mov edi, ecx |
rol eax, 0Eh |
add eax, ebp |
xor edi, ebx |
xor edi, eax |
add ebp, [esi+1Ch] |
rol ebx, 0Ah |
add ebp, edi |
mov edi, ebx |
rol ebp, 6 |
add ebp, edx |
xor edi, eax |
xor edi, ebp |
add edx, [esi+18h] |
rol eax, 0Ah |
add edx, edi |
mov edi, eax |
rol edx, 8 |
add edx, ecx |
xor edi, ebp |
xor edi, edx |
add ecx, [esi+8] |
rol ebp, 0Ah |
add ecx, edi |
mov edi, ebp |
rol ecx, 0Dh |
add ecx, ebx |
xor edi, edx |
xor edi, ecx |
add ebx, [esi+34h] |
rol edx, 0Ah |
add ebx, edi |
mov edi, edx |
rol ebx, 6 |
add ebx, eax |
xor edi, ecx |
xor edi, ebx |
add eax, [esi+38h] |
rol ecx, 0Ah |
add eax, edi |
mov edi, ecx |
rol eax, 5 |
add eax, ebp |
xor edi, ebx |
xor edi, eax |
add ebp, [esi] |
rol ebx, 0Ah |
add ebp, edi |
mov edi, ebx |
rol ebp, 0Fh |
add ebp, edx |
xor edi, eax |
xor edi, ebp |
add edx, [esi+0Ch] |
rol eax, 0Ah |
add edx, edi |
mov edi, eax |
rol edx, 0Dh |
add edx, ecx |
xor edi, ebp |
xor edi, edx |
add ecx, [esi+24h] |
rol ebp, 0Ah |
add ecx, edi |
mov edi, ebp |
rol ecx, 0Bh |
add ecx, ebx |
xor edi, edx |
xor edi, ecx |
add ebx, [esi+2Ch] |
rol edx, 0Ah |
add ebx, edi |
mov edi, edx |
rol ebx, 0Bh |
add ebx, eax |
mov edi, [esp+14h] |
add edx, [esp+8] |
mov esi, [edi+4] |
add ebp, [esp+0Ch] |
add edx, esi |
mov esi, [esp+10h] |
add ecx, [edi] |
mov [edi], edx |
mov edx, [edi+8] |
add eax, esi |
mov esi, [edi+0Ch] |
add ebp, edx |
mov edx, [esp] |
mov [edi+4], ebp |
add eax, esi |
mov esi, [edi+10h] |
add ebx, edx |
mov edx, [esp+4] |
mov [edi+8], eax |
add ebx, esi |
add ecx, edx |
mov [edi+0Ch], ebx |
add esp, 18h |
mov [edi+10h], ecx |
pop ebp |
pop edi |
pop esi |
pop ebx |
end; |
{$ENDIF} |
{$IFDEF THash_RipeMD256_asm} |
procedure THash_RipeMD256.DoTransform(Buffer: PUInt32Array); |
asm |
push ebx |
push esi |
push edi |
lea edi, [eax].THash_RipeMD256.FDigest |
mov esi, edx |
push ebp |
mov eax, [edi] |
mov ebx, [edi+4] |
push edi |
mov ecx, [edi+8] |
mov edx, [edi+0Ch] |
add esp, 0FFFFFFE0h |
mov edi, ecx |
xor edi, edx |
mov ebp, [esi] |
xor edi, ebx |
add eax, ebp |
add eax, edi |
mov edi, ebx |
rol eax, 0Bh |
xor edi, ecx |
mov ebp, [esi+4] |
xor edi, eax |
add edx, ebp |
add edx, edi |
mov edi, eax |
rol edx, 0Eh |
xor edi, ebx |
mov ebp, [esi+8] |
xor edi, edx |
add ecx, ebp |
add ecx, edi |
mov edi, edx |
rol ecx, 0Fh |
xor edi, eax |
mov ebp, [esi+0Ch] |
xor edi, ecx |
add ebx, ebp |
add ebx, edi |
mov edi, ecx |
rol ebx, 0Ch |
xor edi, edx |
mov ebp, [esi+10h] |
xor edi, ebx |
add eax, ebp |
add eax, edi |
mov edi, ebx |
rol eax, 5 |
xor edi, ecx |
mov ebp, [esi+14h] |
xor edi, eax |
add edx, ebp |
add edx, edi |
mov edi, eax |
rol edx, 8 |
xor edi, ebx |
mov ebp, [esi+18h] |
xor edi, edx |
add ecx, ebp |
add ecx, edi |
mov edi, edx |
rol ecx, 7 |
xor edi, eax |
mov ebp, [esi+1Ch] |
xor edi, ecx |
add ebx, ebp |
add ebx, edi |
mov edi, ecx |
rol ebx, 9 |
xor edi, edx |
mov ebp, [esi+20h] |
xor edi, ebx |
add eax, ebp |
add eax, edi |
mov edi, ebx |
rol eax, 0Bh |
xor edi, ecx |
mov ebp, [esi+24h] |
xor edi, eax |
add edx, ebp |
add edx, edi |
mov edi, eax |
rol edx, 0Dh |
xor edi, ebx |
mov ebp, [esi+28h] |
xor edi, edx |
add ecx, ebp |
add ecx, edi |
mov edi, edx |
rol ecx, 0Eh |
xor edi, eax |
mov ebp, [esi+2Ch] |
xor edi, ecx |
add ebx, ebp |
add ebx, edi |
mov edi, ecx |
rol ebx, 0Fh |
xor edi, edx |
mov ebp, [esi+30h] |
xor edi, ebx |
add eax, ebp |
add eax, edi |
mov edi, ebx |
rol eax, 6 |
xor edi, ecx |
mov ebp, [esi+34h] |
xor edi, eax |
add edx, ebp |
add edx, edi |
mov edi, eax |
rol edx, 7 |
xor edi, ebx |
mov ebp, [esi+38h] |
xor edi, edx |
add ecx, ebp |
add ecx, edi |
mov edi, edx |
rol ecx, 9 |
xor edi, eax |
mov ebp, [esi+3Ch] |
xor edi, ecx |
add ebx, ebp |
add ebx, edi |
rol ebx, 8 |
mov edi, [esp+20h] |
mov [esp], eax |
mov [esp+4], ebx |
mov ebp, [esi+14h] |
mov eax, [edi+10h] |
mov [esp+8], ecx |
mov ebx, [edi+14h] |
mov ecx, [edi+18h] |
mov [esp+0Ch], edx |
mov edx, [edi+1Ch] |
mov edi, ecx |
xor edi, ebx |
lea eax, [eax+ebp+50A28BE6h] |
and edi, edx |
mov ebp, [esi+38h] |
xor edi, ecx |
add eax, edi |
mov edi, ebx |
rol eax, 8 |
xor edi, eax |
lea edx, [edx+ebp+50A28BE6h] |
and edi, ecx |
mov ebp, [esi+1Ch] |
xor edi, ebx |
add edx, edi |
mov edi, eax |
rol edx, 9 |
xor edi, edx |
lea ecx, [ecx+ebp+50A28BE6h] |
and edi, ebx |
mov ebp, [esi] |
xor edi, eax |
add ecx, edi |
mov edi, edx |
rol ecx, 9 |
xor edi, ecx |
lea ebx, [ebx+ebp+50A28BE6h] |
and edi, eax |
mov ebp, [esi+24h] |
xor edi, edx |
add ebx, edi |
mov edi, ecx |
rol ebx, 0Bh |
xor edi, ebx |
lea eax, [eax+ebp+50A28BE6h] |
and edi, edx |
mov ebp, [esi+8] |
xor edi, ecx |
add eax, edi |
mov edi, ebx |
rol eax, 0Dh |
xor edi, eax |
lea edx, [edx+ebp+50A28BE6h] |
and edi, ecx |
mov ebp, [esi+2Ch] |
xor edi, ebx |
add edx, edi |
mov edi, eax |
rol edx, 0Fh |
xor edi, edx |
lea ecx, [ecx+ebp+50A28BE6h] |
and edi, ebx |
mov ebp, [esi+10h] |
xor edi, eax |
add ecx, edi |
mov edi, edx |
rol ecx, 0Fh |
xor edi, ecx |
lea ebx, [ebx+ebp+50A28BE6h] |
and edi, eax |
mov ebp, [esi+34h] |
xor edi, edx |
add ebx, edi |
mov edi, ecx |
rol ebx, 5 |
xor edi, ebx |
lea eax, [eax+ebp+50A28BE6h] |
and edi, edx |
mov ebp, [esi+18h] |
xor edi, ecx |
add eax, edi |
mov edi, ebx |
rol eax, 7 |
xor edi, eax |
lea edx, [edx+ebp+50A28BE6h] |
and edi, ecx |
mov ebp, [esi+3Ch] |
xor edi, ebx |
add edx, edi |
mov edi, eax |
rol edx, 7 |
xor edi, edx |
lea ecx, [ecx+ebp+50A28BE6h] |
and edi, ebx |
mov ebp, [esi+20h] |
xor edi, eax |
add ecx, edi |
mov edi, edx |
rol ecx, 8 |
xor edi, ecx |
lea ebx, [ebx+ebp+50A28BE6h] |
and edi, eax |
mov ebp, [esi+4] |
xor edi, edx |
add ebx, edi |
mov edi, ecx |
rol ebx, 0Bh |
xor edi, ebx |
lea eax, [eax+ebp+50A28BE6h] |
and edi, edx |
mov ebp, [esi+28h] |
xor edi, ecx |
add eax, edi |
mov edi, ebx |
rol eax, 0Eh |
xor edi, eax |
lea edx, [edx+ebp+50A28BE6h] |
and edi, ecx |
mov ebp, [esi+0Ch] |
xor edi, ebx |
add edx, edi |
mov edi, eax |
rol edx, 0Eh |
xor edi, edx |
lea ecx, [ecx+ebp+50A28BE6h] |
and edi, ebx |
mov ebp, [esi+30h] |
xor edi, eax |
add ecx, edi |
mov edi, edx |
rol ecx, 0Ch |
xor edi, ecx |
lea ebx, [ebx+ebp+50A28BE6h] |
and edi, eax |
mov ebp, [esi+1Ch] |
xor edi, edx |
add ebx, edi |
rol ebx, 6 |
mov [esp+14h], ebx |
mov ebx, [esp+4] |
mov [esp+1Ch], edx |
mov [esp+18h], ecx |
mov edx, [esp] |
mov ecx, [esp+8] |
mov [esp+10h], edx |
mov edx, [esp+0Ch] |
mov edi, ecx |
xor edi, edx |
lea eax, [eax+ebp+5A827999h] |
and edi, ebx |
mov ebp, ebx |
xor edi, edx |
xor ebp, ecx |
add eax, edi |
mov edi, [esi+10h] |
rol eax, 7 |
and ebp, eax |
lea edx, [edx+edi+5A827999h] |
xor ebp, ecx |
mov edi, eax |
add edx, ebp |
mov ebp, [esi+34h] |
rol edx, 6 |
xor edi, ebx |
lea ecx, [ecx+ebp+5A827999h] |
and edi, edx |
mov ebp, edx |
xor edi, ebx |
xor ebp, eax |
add ecx, edi |
mov edi, [esi+4] |
rol ecx, 8 |
and ebp, ecx |
lea ebx, [ebx+edi+5A827999h] |
xor ebp, eax |
mov edi, ecx |
add ebx, ebp |
mov ebp, [esi+28h] |
rol ebx, 0Dh |
xor edi, edx |
lea eax, [eax+ebp+5A827999h] |
and edi, ebx |
mov ebp, ebx |
xor edi, edx |
xor ebp, ecx |
add eax, edi |
mov edi, [esi+18h] |
rol eax, 0Bh |
and ebp, eax |
lea edx, [edx+edi+5A827999h] |
xor ebp, ecx |
mov edi, eax |
add edx, ebp |
mov ebp, [esi+3Ch] |
rol edx, 9 |
xor edi, ebx |
lea ecx, [ecx+ebp+5A827999h] |
and edi, edx |
mov ebp, edx |
xor edi, ebx |
xor ebp, eax |
add ecx, edi |
mov edi, [esi+0Ch] |
rol ecx, 7 |
and ebp, ecx |
lea ebx, [ebx+edi+5A827999h] |
xor ebp, eax |
mov edi, ecx |
add ebx, ebp |
mov ebp, [esi+30h] |
rol ebx, 0Fh |
xor edi, edx |
lea eax, [eax+ebp+5A827999h] |
and edi, ebx |
mov ebp, ebx |
xor edi, edx |
xor ebp, ecx |
add eax, edi |
mov edi, [esi] |
rol eax, 7 |
and ebp, eax |
lea edx, [edx+edi+5A827999h] |
xor ebp, ecx |
mov edi, eax |
add edx, ebp |
mov ebp, [esi+24h] |
rol edx, 0Ch |
xor edi, ebx |
lea ecx, [ecx+ebp+5A827999h] |
and edi, edx |
mov ebp, edx |
xor edi, ebx |
xor ebp, eax |
add ecx, edi |
mov edi, [esi+14h] |
rol ecx, 0Fh |
and ebp, ecx |
lea ebx, [ebx+edi+5A827999h] |
xor ebp, eax |
mov edi, ecx |
add ebx, ebp |
mov ebp, [esi+8] |
rol ebx, 9 |
xor edi, edx |
lea eax, [eax+ebp+5A827999h] |
and edi, ebx |
mov ebp, ebx |
xor edi, edx |
xor ebp, ecx |
add eax, edi |
mov edi, [esi+38h] |
rol eax, 0Bh |
and ebp, eax |
lea edx, [edx+edi+5A827999h] |
xor ebp, ecx |
mov edi, eax |
add edx, ebp |
mov ebp, [esi+2Ch] |
rol edx, 7 |
xor edi, ebx |
lea ecx, [ecx+ebp+5A827999h] |
and edi, edx |
mov ebp, edx |
xor edi, ebx |
xor ebp, eax |
add ecx, edi |
mov edi, [esi+20h] |
rol ecx, 0Dh |
and ebp, ecx |
lea ebx, [ebx+edi+5A827999h] |
xor ebp, eax |
add ebx, ebp |
mov ebp, [esi+18h] |
rol ebx, 0Ch |
mov [esp], eax |
mov [esp+4], ebx |
mov eax, [esp+10h] |
mov ebx, [esp+14h] |
mov [esp+8], ecx |
mov ecx, [esp+18h] |
mov [esp+0Ch], edx |
mov edx, [esp+1Ch] |
mov edi, ecx |
xor edi, 0FFFFFFFFh |
lea eax, [eax+ebp+5C4DD124h] |
or edi, ebx |
mov ebp, [esi+2Ch] |
xor edi, edx |
add eax, edi |
mov edi, ebx |
rol eax, 9 |
xor edi, 0FFFFFFFFh |
lea edx, [edx+ebp+5C4DD124h] |
or edi, eax |
mov ebp, [esi+0Ch] |
xor edi, ecx |
add edx, edi |
mov edi, eax |
rol edx, 0Dh |
xor edi, 0FFFFFFFFh |
lea ecx, [ecx+ebp+5C4DD124h] |
or edi, edx |
mov ebp, [esi+1Ch] |
xor edi, ebx |
add ecx, edi |
mov edi, edx |
rol ecx, 0Fh |
xor edi, 0FFFFFFFFh |
lea ebx, [ebx+ebp+5C4DD124h] |
or edi, ecx |
mov ebp, [esi] |
xor edi, eax |
add ebx, edi |
mov edi, ecx |
rol ebx, 7 |
xor edi, 0FFFFFFFFh |
lea eax, [eax+ebp+5C4DD124h] |
or edi, ebx |
mov ebp, [esi+34h] |
xor edi, edx |
add eax, edi |
mov edi, ebx |
rol eax, 0Ch |
xor edi, 0FFFFFFFFh |
lea edx, [edx+ebp+5C4DD124h] |
or edi, eax |
mov ebp, [esi+14h] |
xor edi, ecx |
add edx, edi |
mov edi, eax |
rol edx, 8 |
xor edi, 0FFFFFFFFh |
lea ecx, [ecx+ebp+5C4DD124h] |
or edi, edx |
mov ebp, [esi+28h] |
xor edi, ebx |
add ecx, edi |
mov edi, edx |
rol ecx, 9 |
xor edi, 0FFFFFFFFh |
lea ebx, [ebx+ebp+5C4DD124h] |
or edi, ecx |
mov ebp, [esi+38h] |
xor edi, eax |
add ebx, edi |
mov edi, ecx |
rol ebx, 0Bh |
xor edi, 0FFFFFFFFh |
lea eax, [eax+ebp+5C4DD124h] |
or edi, ebx |
mov ebp, [esi+3Ch] |
xor edi, edx |
add eax, edi |
mov edi, ebx |
rol eax, 7 |
xor edi, 0FFFFFFFFh |
lea edx, [edx+ebp+5C4DD124h] |
or edi, eax |
mov ebp, [esi+20h] |
xor edi, ecx |
add edx, edi |
mov edi, eax |
rol edx, 7 |
xor edi, 0FFFFFFFFh |
lea ecx, [ecx+ebp+5C4DD124h] |
or edi, edx |
mov ebp, [esi+30h] |
xor edi, ebx |
add ecx, edi |
mov edi, edx |
rol ecx, 0Ch |
xor edi, 0FFFFFFFFh |
lea ebx, [ebx+ebp+5C4DD124h] |
or edi, ecx |
mov ebp, [esi+10h] |
xor edi, eax |
add ebx, edi |
mov edi, ecx |
rol ebx, 7 |
xor edi, 0FFFFFFFFh |
lea eax, [eax+ebp+5C4DD124h] |
or edi, ebx |
mov ebp, [esi+24h] |
xor edi, edx |
add eax, edi |
mov edi, ebx |
rol eax, 6 |
xor edi, 0FFFFFFFFh |
lea edx, [edx+ebp+5C4DD124h] |
or edi, eax |
mov ebp, [esi+4] |
xor edi, ecx |
add edx, edi |
mov edi, eax |
rol edx, 0Fh |
xor edi, 0FFFFFFFFh |
lea ecx, [ecx+ebp+5C4DD124h] |
or edi, edx |
mov ebp, [esi+8] |
xor edi, ebx |
add ecx, edi |
mov edi, edx |
rol ecx, 0Dh |
xor edi, 0FFFFFFFFh |
lea ebx, [ebx+ebp+5C4DD124h] |
or edi, ecx |
mov ebp, [esi+0Ch] |
xor edi, eax |
add ebx, edi |
rol ebx, 0Bh |
mov [esp+10h], eax |
mov [esp+18h], ecx |
mov eax, [esp] |
mov ecx, [esp+8] |
mov [esp+1Ch], edx |
mov edx, [esp+4] |
mov [esp+14h], edx |
mov edx, [esp+0Ch] |
mov edi, ecx |
xor edi, 0FFFFFFFFh |
lea eax, [eax+ebp+6ED9EBA1h] |
or edi, ebx |
mov ebp, [esi+28h] |
xor edi, edx |
add eax, edi |
mov edi, ebx |
rol eax, 0Bh |
xor edi, 0FFFFFFFFh |
lea edx, [edx+ebp+6ED9EBA1h] |
or edi, eax |
mov ebp, [esi+38h] |
xor edi, ecx |
add edx, edi |
mov edi, eax |
rol edx, 0Dh |
xor edi, 0FFFFFFFFh |
lea ecx, [ecx+ebp+6ED9EBA1h] |
or edi, edx |
mov ebp, [esi+10h] |
xor edi, ebx |
add ecx, edi |
mov edi, edx |
rol ecx, 6 |
xor edi, 0FFFFFFFFh |
lea ebx, [ebx+ebp+6ED9EBA1h] |
or edi, ecx |
mov ebp, [esi+24h] |
xor edi, eax |
add ebx, edi |
mov edi, ecx |
rol ebx, 7 |
xor edi, 0FFFFFFFFh |
lea eax, [eax+ebp+6ED9EBA1h] |
or edi, ebx |
mov ebp, [esi+3Ch] |
xor edi, edx |
add eax, edi |
mov edi, ebx |
rol eax, 0Eh |
xor edi, 0FFFFFFFFh |
lea edx, [edx+ebp+6ED9EBA1h] |
or edi, eax |
mov ebp, [esi+20h] |
xor edi, ecx |
add edx, edi |
mov edi, eax |
rol edx, 9 |
xor edi, 0FFFFFFFFh |
lea ecx, [ecx+ebp+6ED9EBA1h] |
or edi, edx |
mov ebp, [esi+4] |
xor edi, ebx |
add ecx, edi |
mov edi, edx |
rol ecx, 0Dh |
xor edi, 0FFFFFFFFh |
lea ebx, [ebx+ebp+6ED9EBA1h] |
or edi, ecx |
mov ebp, [esi+8] |
xor edi, eax |
add ebx, edi |
mov edi, ecx |
rol ebx, 0Fh |
xor edi, 0FFFFFFFFh |
lea eax, [eax+ebp+6ED9EBA1h] |
or edi, ebx |
mov ebp, [esi+1Ch] |
xor edi, edx |
add eax, edi |
mov edi, ebx |
rol eax, 0Eh |
xor edi, 0FFFFFFFFh |
lea edx, [edx+ebp+6ED9EBA1h] |
or edi, eax |
mov ebp, [esi] |
xor edi, ecx |
add edx, edi |
mov edi, eax |
rol edx, 8 |
xor edi, 0FFFFFFFFh |
lea ecx, [ecx+ebp+6ED9EBA1h] |
or edi, edx |
mov ebp, [esi+18h] |
xor edi, ebx |
add ecx, edi |
mov edi, edx |
rol ecx, 0Dh |
xor edi, 0FFFFFFFFh |
lea ebx, [ebx+ebp+6ED9EBA1h] |
or edi, ecx |
mov ebp, [esi+34h] |
xor edi, eax |
add ebx, edi |
mov edi, ecx |
rol ebx, 6 |
xor edi, 0FFFFFFFFh |
lea eax, [eax+ebp+6ED9EBA1h] |
or edi, ebx |
mov ebp, [esi+2Ch] |
xor edi, edx |
add eax, edi |
mov edi, ebx |
rol eax, 5 |
xor edi, 0FFFFFFFFh |
lea edx, [edx+ebp+6ED9EBA1h] |
or edi, eax |
mov ebp, [esi+14h] |
xor edi, ecx |
add edx, edi |
mov edi, eax |
rol edx, 0Ch |
xor edi, 0FFFFFFFFh |
lea ecx, [ecx+ebp+6ED9EBA1h] |
or edi, edx |
mov ebp, [esi+30h] |
xor edi, ebx |
add ecx, edi |
mov edi, edx |
rol ecx, 7 |
xor edi, 0FFFFFFFFh |
lea ebx, [ebx+ebp+6ED9EBA1h] |
or edi, ecx |
mov ebp, [esi+3Ch] |
xor edi, eax |
add ebx, edi |
rol ebx, 5 |
mov [esp], eax |
mov [esp+4], ebx |
mov eax, [esp+10h] |
mov ebx, [esp+14h] |
mov [esp+8], ecx |
mov ecx, [esp+18h] |
mov [esp+0Ch], edx |
mov edx, [esp+1Ch] |
mov edi, ecx |
xor edi, edx |
lea eax, [eax+ebp+6D703EF3h] |
and edi, ebx |
mov ebp, ebx |
xor edi, edx |
xor ebp, ecx |
add eax, edi |
mov edi, [esi+14h] |
rol eax, 9 |
and ebp, eax |
lea edx, [edx+edi+6D703EF3h] |
xor ebp, ecx |
mov edi, eax |
add edx, ebp |
mov ebp, [esi+4] |
rol edx, 7 |
xor edi, ebx |
lea ecx, [ecx+ebp+6D703EF3h] |
and edi, edx |
mov ebp, edx |
xor edi, ebx |
xor ebp, eax |
add ecx, edi |
mov edi, [esi+0Ch] |
rol ecx, 0Fh |
and ebp, ecx |
lea ebx, [ebx+edi+6D703EF3h] |
xor ebp, eax |
mov edi, ecx |
add ebx, ebp |
mov ebp, [esi+1Ch] |
rol ebx, 0Bh |
xor edi, edx |
lea eax, [eax+ebp+6D703EF3h] |
and edi, ebx |
mov ebp, ebx |
xor edi, edx |
xor ebp, ecx |
add eax, edi |
mov edi, [esi+38h] |
rol eax, 8 |
and ebp, eax |
lea edx, [edx+edi+6D703EF3h] |
xor ebp, ecx |
mov edi, eax |
add edx, ebp |
mov ebp, [esi+18h] |
rol edx, 6 |
xor edi, ebx |
lea ecx, [ecx+ebp+6D703EF3h] |
and edi, edx |
mov ebp, edx |
xor edi, ebx |
xor ebp, eax |
add ecx, edi |
mov edi, [esi+24h] |
rol ecx, 6 |
and ebp, ecx |
lea ebx, [ebx+edi+6D703EF3h] |
xor ebp, eax |
mov edi, ecx |
add ebx, ebp |
mov ebp, [esi+2Ch] |
rol ebx, 0Eh |
xor edi, edx |
lea eax, [eax+ebp+6D703EF3h] |
and edi, ebx |
mov ebp, ebx |
xor edi, edx |
xor ebp, ecx |
add eax, edi |
mov edi, [esi+20h] |
rol eax, 0Ch |
and ebp, eax |
lea edx, [edx+edi+6D703EF3h] |
xor ebp, ecx |
mov edi, eax |
add edx, ebp |
mov ebp, [esi+30h] |
rol edx, 0Dh |
xor edi, ebx |
lea ecx, [ecx+ebp+6D703EF3h] |
and edi, edx |
mov ebp, edx |
xor edi, ebx |
xor ebp, eax |
add ecx, edi |
mov edi, [esi+8] |
rol ecx, 5 |
and ebp, ecx |
lea ebx, [ebx+edi+6D703EF3h] |
xor ebp, eax |
mov edi, ecx |
add ebx, ebp |
mov ebp, [esi+28h] |
rol ebx, 0Eh |
xor edi, edx |
lea eax, [eax+ebp+6D703EF3h] |
and edi, ebx |
mov ebp, ebx |
xor edi, edx |
xor ebp, ecx |
add eax, edi |
mov edi, [esi] |
rol eax, 0Dh |
and ebp, eax |
lea edx, [edx+edi+6D703EF3h] |
xor ebp, ecx |
mov edi, eax |
add edx, ebp |
mov ebp, [esi+10h] |
rol edx, 0Dh |
xor edi, ebx |
lea ecx, [ecx+ebp+6D703EF3h] |
and edi, edx |
mov ebp, edx |
xor edi, ebx |
xor ebp, eax |
add ecx, edi |
mov edi, [esi+34h] |
rol ecx, 7 |
and ebp, ecx |
lea ebx, [ebx+edi+6D703EF3h] |
xor ebp, eax |
add ebx, ebp |
mov ebp, [esi+4] |
rol ebx, 5 |
mov [esp+10h], eax |
mov [esp+14h], ebx |
mov eax, [esp] |
mov ebx, [esp+4] |
mov [esp+1Ch], edx |
mov edx, [esp+8] |
mov [esp+18h], edx |
mov edx, [esp+0Ch] |
mov edi, ecx |
xor edi, ebx |
lea eax, [eax+ebp-70E44324h] |
and edi, edx |
mov ebp, [esi+24h] |
xor edi, ecx |
add eax, edi |
mov edi, ebx |
rol eax, 0Bh |
xor edi, eax |
lea edx, [edx+ebp-70E44324h] |
and edi, ecx |
mov ebp, [esi+2Ch] |
xor edi, ebx |
add edx, edi |
mov edi, eax |
rol edx, 0Ch |
xor edi, edx |
lea ecx, [ecx+ebp-70E44324h] |
and edi, ebx |
mov ebp, [esi+28h] |
xor edi, eax |
add ecx, edi |
mov edi, edx |
rol ecx, 0Eh |
xor edi, ecx |
lea ebx, [ebx+ebp-70E44324h] |
and edi, eax |
mov ebp, [esi] |
xor edi, edx |
add ebx, edi |
mov edi, ecx |
rol ebx, 0Fh |
xor edi, ebx |
lea eax, [eax+ebp-70E44324h] |
and edi, edx |
mov ebp, [esi+20h] |
xor edi, ecx |
add eax, edi |
mov edi, ebx |
rol eax, 0Eh |
xor edi, eax |
lea edx, [edx+ebp-70E44324h] |
and edi, ecx |
mov ebp, [esi+30h] |
xor edi, ebx |
add edx, edi |
mov edi, eax |
rol edx, 0Fh |
xor edi, edx |
lea ecx, [ecx+ebp-70E44324h] |
and edi, ebx |
mov ebp, [esi+10h] |
xor edi, eax |
add ecx, edi |
mov edi, edx |
rol ecx, 9 |
xor edi, ecx |
lea ebx, [ebx+ebp-70E44324h] |
and edi, eax |
mov ebp, [esi+34h] |
xor edi, edx |
add ebx, edi |
mov edi, ecx |
rol ebx, 8 |
xor edi, ebx |
lea eax, [eax+ebp-70E44324h] |
and edi, edx |
mov ebp, [esi+0Ch] |
xor edi, ecx |
add eax, edi |
mov edi, ebx |
rol eax, 9 |
xor edi, eax |
lea edx, [edx+ebp-70E44324h] |
and edi, ecx |
mov ebp, [esi+1Ch] |
xor edi, ebx |
add edx, edi |
mov edi, eax |
rol edx, 0Eh |
xor edi, edx |
lea ecx, [ecx+ebp-70E44324h] |
and edi, ebx |
mov ebp, [esi+3Ch] |
xor edi, eax |
add ecx, edi |
mov edi, edx |
rol ecx, 5 |
xor edi, ecx |
lea ebx, [ebx+ebp-70E44324h] |
and edi, eax |
mov ebp, [esi+38h] |
xor edi, edx |
add ebx, edi |
mov edi, ecx |
rol ebx, 6 |
xor edi, ebx |
lea eax, [eax+ebp-70E44324h] |
and edi, edx |
mov ebp, [esi+14h] |
xor edi, ecx |
add eax, edi |
mov edi, ebx |
rol eax, 8 |
xor edi, eax |
lea edx, [edx+ebp-70E44324h] |
and edi, ecx |
mov ebp, [esi+18h] |
xor edi, ebx |
add edx, edi |
mov edi, eax |
rol edx, 6 |
xor edi, edx |
lea ecx, [ecx+ebp-70E44324h] |
and edi, ebx |
mov ebp, [esi+8] |
xor edi, eax |
add ecx, edi |
mov edi, edx |
rol ecx, 5 |
xor edi, ecx |
lea ebx, [ebx+ebp-70E44324h] |
and edi, eax |
mov ebp, [esi+20h] |
xor edi, edx |
add ebx, edi |
rol ebx, 0Ch |
mov [esp], eax |
mov [esp+4], ebx |
mov eax, [esp+10h] |
mov ebx, [esp+14h] |
mov [esp+8], ecx |
mov ecx, [esp+18h] |
mov edi, ecx |
mov [esp+0Ch], edx |
mov edx, [esp+1Ch] |
xor edi, edx |
mov ebp, [esi+20h] |
xor edi, ebx |
add eax, ebp |
add eax, edi |
mov edi, ebx |
rol eax, 0Fh |
xor edi, ecx |
mov ebp, [esi+18h] |
xor edi, eax |
add edx, ebp |
add edx, edi |
mov edi, eax |
rol edx, 5 |
xor edi, ebx |
mov ebp, [esi+10h] |
xor edi, edx |
add ecx, ebp |
add ecx, edi |
mov edi, edx |
rol ecx, 8 |
xor edi, eax |
mov ebp, [esi+4] |
xor edi, ecx |
add ebx, ebp |
add ebx, edi |
mov edi, ecx |
rol ebx, 0Bh |
xor edi, edx |
mov ebp, [esi+0Ch] |
xor edi, ebx |
add eax, ebp |
add eax, edi |
mov edi, ebx |
rol eax, 0Eh |
xor edi, ecx |
mov ebp, [esi+2Ch] |
xor edi, eax |
add edx, ebp |
add edx, edi |
mov edi, eax |
rol edx, 0Eh |
xor edi, ebx |
mov ebp, [esi+3Ch] |
xor edi, edx |
add ecx, ebp |
add ecx, edi |
mov edi, edx |
rol ecx, 6 |
xor edi, eax |
mov ebp, [esi] |
xor edi, ecx |
add ebx, ebp |
add ebx, edi |
mov edi, ecx |
rol ebx, 0Eh |
xor edi, edx |
mov ebp, [esi+14h] |
xor edi, ebx |
add eax, ebp |
add eax, edi |
mov edi, ebx |
rol eax, 6 |
xor edi, ecx |
mov ebp, [esi+30h] |
xor edi, eax |
add edx, ebp |
add edx, edi |
mov edi, eax |
rol edx, 9 |
xor edi, ebx |
mov ebp, [esi+8] |
xor edi, edx |
add ecx, ebp |
add ecx, edi |
mov edi, edx |
rol ecx, 0Ch |
xor edi, eax |
mov ebp, [esi+34h] |
xor edi, ecx |
add ebx, ebp |
add ebx, edi |
mov edi, ecx |
rol ebx, 9 |
xor edi, edx |
mov ebp, [esi+24h] |
xor edi, ebx |
add eax, ebp |
add eax, edi |
mov edi, ebx |
rol eax, 0Ch |
xor edi, ecx |
mov ebp, [esi+1Ch] |
xor edi, eax |
add edx, ebp |
add edx, edi |
mov edi, eax |
rol edx, 5 |
xor edi, ebx |
mov ebp, [esi+28h] |
xor edi, edx |
add ecx, ebp |
add ecx, edi |
mov edi, edx |
rol ecx, 0Fh |
xor edi, eax |
mov ebp, [esi+38h] |
xor edi, ecx |
add ebx, ebp |
add ebx, edi |
mov edi, ecx |
rol ebx, 8 |
mov edi, [esp+20h] |
add [edi+0Ch], edx |
add [edi+10h], eax |
add [edi+14h], ebx |
mov eax, [esp] |
mov ebx, [esp+4] |
add [edi+18h], ecx |
mov ecx, [esp+8] |
mov edx, [esp+0Ch] |
add [edi], eax |
add esp, 24h |
add [edi+4], ebx |
add [edi+8], ecx |
add [edi+1Ch], edx |
pop ebp |
pop edi |
pop esi |
pop ebx |
end; |
{$ENDIF} |
{$IFDEF THash_RipeMD320_asm} |
procedure THash_RipeMD320.DoTransform(Buffer: PUInt32Array); |
asm |
push ebx |
push esi |
push edi |
lea edi, [eax].THash_RipeMD320.FDigest |
mov esi, edx |
push ebp |
mov eax, [edi] |
mov ebx, [edi+4] |
push edi |
mov ecx, [edi+8] |
mov edx, [edi+0Ch] |
add esp, 0FFFFFFD8h |
mov ebp, [edi+10h] |
mov edi, edx |
xor edi, ecx |
xor edi, ebx |
add eax, [esi] |
rol ecx, 0Ah |
add eax, edi |
mov edi, ecx |
rol eax, 0Bh |
add eax, ebp |
xor edi, ebx |
xor edi, eax |
add ebp, [esi+4] |
rol ebx, 0Ah |
add ebp, edi |
mov edi, ebx |
rol ebp, 0Eh |
add ebp, edx |
xor edi, eax |
xor edi, ebp |
add edx, [esi+8] |
rol eax, 0Ah |
add edx, edi |
mov edi, eax |
rol edx, 0Fh |
add edx, ecx |
xor edi, ebp |
xor edi, edx |
add ecx, [esi+0Ch] |
rol ebp, 0Ah |
add ecx, edi |
mov edi, ebp |
rol ecx, 0Ch |
add ecx, ebx |
xor edi, edx |
xor edi, ecx |
add ebx, [esi+10h] |
rol edx, 0Ah |
add ebx, edi |
mov edi, edx |
rol ebx, 5 |
add ebx, eax |
xor edi, ecx |
xor edi, ebx |
add eax, [esi+14h] |
rol ecx, 0Ah |
add eax, edi |
mov edi, ecx |
rol eax, 8 |
add eax, ebp |
xor edi, ebx |
xor edi, eax |
add ebp, [esi+18h] |
rol ebx, 0Ah |
add ebp, edi |
mov edi, ebx |
rol ebp, 7 |
add ebp, edx |
xor edi, eax |
xor edi, ebp |
add edx, [esi+1Ch] |
rol eax, 0Ah |
add edx, edi |
mov edi, eax |
rol edx, 9 |
add edx, ecx |
xor edi, ebp |
xor edi, edx |
add ecx, [esi+20h] |
rol ebp, 0Ah |
add ecx, edi |
mov edi, ebp |
rol ecx, 0Bh |
add ecx, ebx |
xor edi, edx |
xor edi, ecx |
add ebx, [esi+24h] |
rol edx, 0Ah |
add ebx, edi |
mov edi, edx |
rol ebx, 0Dh |
add ebx, eax |
xor edi, ecx |
xor edi, ebx |
add eax, [esi+28h] |
rol ecx, 0Ah |
add eax, edi |
mov edi, ecx |
rol eax, 0Eh |
add eax, ebp |
xor edi, ebx |
xor edi, eax |
add ebp, [esi+2Ch] |
rol ebx, 0Ah |
add ebp, edi |
mov edi, ebx |
rol ebp, 0Fh |
add ebp, edx |
xor edi, eax |
xor edi, ebp |
add edx, [esi+30h] |
rol eax, 0Ah |
add edx, edi |
mov edi, eax |
rol edx, 6 |
add edx, ecx |
xor edi, ebp |
xor edi, edx |
add ecx, [esi+34h] |
rol ebp, 0Ah |
add ecx, edi |
mov edi, ebp |
rol ecx, 7 |
add ecx, ebx |
xor edi, edx |
xor edi, ecx |
add ebx, [esi+38h] |
rol edx, 0Ah |
add ebx, edi |
mov edi, edx |
rol ebx, 9 |
add ebx, eax |
xor edi, ecx |
xor edi, ebx |
add eax, [esi+3Ch] |
rol ecx, 0Ah |
add eax, edi |
rol eax, 8 |
add eax, ebp |
mov edi, [esp+28h] |
mov [esp], eax |
mov [esp+4], ebx |
mov eax, [edi+14h] |
mov ebx, [edi+18h] |
mov [esp+8], ecx |
mov [esp+0Ch], edx |
mov ecx, [edi+1Ch] |
mov edx, [edi+20h] |
mov [esp+10h], ebp |
mov ebp, [edi+24h] |
mov edi, edx |
xor edi, 0FFFFFFFFh |
or edi, ecx |
add eax, [esi+14h] |
xor edi, ebx |
rol ecx, 0Ah |
lea eax, [eax+edi+50A28BE6h] |
mov edi, ecx |
rol eax, 8 |
add eax, ebp |
xor edi, 0FFFFFFFFh |
or edi, ebx |
add ebp, [esi+38h] |
xor edi, eax |
rol ebx, 0Ah |
lea ebp, [ebp+edi+50A28BE6h] |
mov edi, ebx |
rol ebp, 9 |
add ebp, edx |
xor edi, 0FFFFFFFFh |
or edi, eax |
add edx, [esi+1Ch] |
xor edi, ebp |
rol eax, 0Ah |
lea edx, [edx+edi+50A28BE6h] |
mov edi, eax |
rol edx, 9 |
add edx, ecx |
xor edi, 0FFFFFFFFh |
or edi, ebp |
add ecx, [esi] |
xor edi, edx |
rol ebp, 0Ah |
lea ecx, [ecx+edi+50A28BE6h] |
mov edi, ebp |
rol ecx, 0Bh |
add ecx, ebx |
xor edi, 0FFFFFFFFh |
or edi, edx |
add ebx, [esi+24h] |
xor edi, ecx |
rol edx, 0Ah |
lea ebx, [ebx+edi+50A28BE6h] |
mov edi, edx |
rol ebx, 0Dh |
add ebx, eax |
xor edi, 0FFFFFFFFh |
or edi, ecx |
add eax, [esi+8] |
xor edi, ebx |
rol ecx, 0Ah |
lea eax, [eax+edi+50A28BE6h] |
mov edi, ecx |
rol eax, 0Fh |
add eax, ebp |
xor edi, 0FFFFFFFFh |
or edi, ebx |
add ebp, [esi+2Ch] |
xor edi, eax |
rol ebx, 0Ah |
lea ebp, [ebp+edi+50A28BE6h] |
mov edi, ebx |
rol ebp, 0Fh |
add ebp, edx |
xor edi, 0FFFFFFFFh |
or edi, eax |
add edx, [esi+10h] |
xor edi, ebp |
rol eax, 0Ah |
lea edx, [edx+edi+50A28BE6h] |
mov edi, eax |
rol edx, 5 |
add edx, ecx |
xor edi, 0FFFFFFFFh |
or edi, ebp |
add ecx, [esi+34h] |
xor edi, edx |
rol ebp, 0Ah |
lea ecx, [ecx+edi+50A28BE6h] |
mov edi, ebp |
rol ecx, 7 |
add ecx, ebx |
xor edi, 0FFFFFFFFh |
or edi, edx |
add ebx, [esi+18h] |
xor edi, ecx |
rol edx, 0Ah |
lea ebx, [ebx+edi+50A28BE6h] |
mov edi, edx |
rol ebx, 7 |
add ebx, eax |
xor edi, 0FFFFFFFFh |
or edi, ecx |
add eax, [esi+3Ch] |
xor edi, ebx |
rol ecx, 0Ah |
lea eax, [eax+edi+50A28BE6h] |
mov edi, ecx |
rol eax, 8 |
add eax, ebp |
xor edi, 0FFFFFFFFh |
or edi, ebx |
add ebp, [esi+20h] |
xor edi, eax |
rol ebx, 0Ah |
lea ebp, [ebp+edi+50A28BE6h] |
mov edi, ebx |
rol ebp, 0Bh |
add ebp, edx |
xor edi, 0FFFFFFFFh |
or edi, eax |
add edx, [esi+4] |
xor edi, ebp |
rol eax, 0Ah |
lea edx, [edx+edi+50A28BE6h] |
mov edi, eax |
rol edx, 0Eh |
add edx, ecx |
xor edi, 0FFFFFFFFh |
or edi, ebp |
add ecx, [esi+28h] |
xor edi, edx |
rol ebp, 0Ah |
lea ecx, [ecx+edi+50A28BE6h] |
mov edi, ebp |
rol ecx, 0Eh |
add ecx, ebx |
xor edi, 0FFFFFFFFh |
or edi, edx |
add ebx, [esi+0Ch] |
xor edi, ecx |
rol edx, 0Ah |
lea ebx, [ebx+edi+50A28BE6h] |
mov edi, edx |
rol ebx, 0Ch |
add ebx, eax |
xor edi, 0FFFFFFFFh |
or edi, ecx |
add eax, [esi+30h] |
xor edi, ebx |
rol ecx, 0Ah |
lea eax, [eax+edi+50A28BE6h] |
rol eax, 6 |
add eax, ebp |
mov [esp+18h], ebx |
mov [esp+1Ch], ecx |
mov ebx, [esp+4] |
mov ecx, [esp+8] |
mov [esp+20h], edx |
mov [esp+24h], ebp |
mov edx, [esp+0Ch] |
mov ebp, [esp] |
mov [esp+14h], ebp |
mov ebp, [esp+10h] |
mov edi, ecx |
xor edi, ebx |
add ebp, [esi+1Ch] |
and edi, eax |
xor edi, ecx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+5A827999h] |
mov edi, ebx |
rol ebp, 7 |
add ebp, edx |
xor edi, eax |
add edx, [esi+10h] |
and edi, ebp |
xor edi, ebx |
rol eax, 0Ah |
lea edx, [edx+edi+5A827999h] |
mov edi, eax |
rol edx, 6 |
add edx, ecx |
xor edi, ebp |
add ecx, [esi+34h] |
and edi, edx |
xor edi, eax |
rol ebp, 0Ah |
lea ecx, [ecx+edi+5A827999h] |
mov edi, ebp |
rol ecx, 8 |
add ecx, ebx |
xor edi, edx |
add ebx, [esi+4] |
and edi, ecx |
xor edi, ebp |
rol edx, 0Ah |
lea ebx, [ebx+edi+5A827999h] |
mov edi, edx |
rol ebx, 0Dh |
add ebx, eax |
xor edi, ecx |
add eax, [esi+28h] |
and edi, ebx |
xor edi, edx |
rol ecx, 0Ah |
lea eax, [eax+edi+5A827999h] |
mov edi, ecx |
rol eax, 0Bh |
add eax, ebp |
xor edi, ebx |
add ebp, [esi+18h] |
and edi, eax |
xor edi, ecx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+5A827999h] |
mov edi, ebx |
rol ebp, 9 |
add ebp, edx |
xor edi, eax |
add edx, [esi+3Ch] |
and edi, ebp |
xor edi, ebx |
rol eax, 0Ah |
lea edx, [edx+edi+5A827999h] |
mov edi, eax |
rol edx, 7 |
add edx, ecx |
xor edi, ebp |
add ecx, [esi+0Ch] |
and edi, edx |
xor edi, eax |
rol ebp, 0Ah |
lea ecx, [ecx+edi+5A827999h] |
mov edi, ebp |
rol ecx, 0Fh |
add ecx, ebx |
xor edi, edx |
add ebx, [esi+30h] |
and edi, ecx |
xor edi, ebp |
rol edx, 0Ah |
lea ebx, [ebx+edi+5A827999h] |
mov edi, edx |
rol ebx, 7 |
add ebx, eax |
xor edi, ecx |
add eax, [esi] |
and edi, ebx |
xor edi, edx |
rol ecx, 0Ah |
lea eax, [eax+edi+5A827999h] |
mov edi, ecx |
rol eax, 0Ch |
add eax, ebp |
xor edi, ebx |
add ebp, [esi+24h] |
and edi, eax |
xor edi, ecx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+5A827999h] |
mov edi, ebx |
rol ebp, 0Fh |
add ebp, edx |
xor edi, eax |
add edx, [esi+14h] |
and edi, ebp |
xor edi, ebx |
rol eax, 0Ah |
lea edx, [edx+edi+5A827999h] |
mov edi, eax |
rol edx, 9 |
add edx, ecx |
xor edi, ebp |
add ecx, [esi+8] |
and edi, edx |
xor edi, eax |
rol ebp, 0Ah |
lea ecx, [ecx+edi+5A827999h] |
mov edi, ebp |
rol ecx, 0Bh |
add ecx, ebx |
xor edi, edx |
add ebx, [esi+38h] |
and edi, ecx |
xor edi, ebp |
rol edx, 0Ah |
lea ebx, [ebx+edi+5A827999h] |
mov edi, edx |
rol ebx, 7 |
add ebx, eax |
xor edi, ecx |
add eax, [esi+2Ch] |
and edi, ebx |
xor edi, edx |
rol ecx, 0Ah |
lea eax, [eax+edi+5A827999h] |
mov edi, ecx |
rol eax, 0Dh |
add eax, ebp |
xor edi, ebx |
add ebp, [esi+20h] |
and edi, eax |
xor edi, ecx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+5A827999h] |
rol ebp, 0Ch |
add ebp, edx |
mov [esp], eax |
mov [esp+4], ebx |
mov eax, [esp+14h] |
mov ebx, [esp+18h] |
mov [esp+8], ecx |
mov [esp+0Ch], edx |
mov ecx, [esp+1Ch] |
mov edx, [esp+20h] |
mov [esp+10h], ebp |
mov ebp, [esp+24h] |
mov edi, ebx |
xor edi, eax |
and edi, ecx |
add ebp, [esi+18h] |
xor edi, ebx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+5C4DD124h] |
mov edi, eax |
rol ebp, 9 |
add ebp, edx |
xor edi, ebp |
and edi, ebx |
add edx, [esi+2Ch] |
xor edi, eax |
rol eax, 0Ah |
lea edx, [edx+edi+5C4DD124h] |
mov edi, ebp |
rol edx, 0Dh |
add edx, ecx |
xor edi, edx |
and edi, eax |
add ecx, [esi+0Ch] |
xor edi, ebp |
rol ebp, 0Ah |
lea ecx, [ecx+edi+5C4DD124h] |
mov edi, edx |
rol ecx, 0Fh |
add ecx, ebx |
xor edi, ecx |
and edi, ebp |
add ebx, [esi+1Ch] |
xor edi, edx |
rol edx, 0Ah |
lea ebx, [ebx+edi+5C4DD124h] |
mov edi, ecx |
rol ebx, 7 |
add ebx, eax |
xor edi, ebx |
and edi, edx |
add eax, [esi] |
xor edi, ecx |
rol ecx, 0Ah |
lea eax, [eax+edi+5C4DD124h] |
mov edi, ebx |
rol eax, 0Ch |
add eax, ebp |
xor edi, eax |
and edi, ecx |
add ebp, [esi+34h] |
xor edi, ebx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+5C4DD124h] |
mov edi, eax |
rol ebp, 8 |
add ebp, edx |
xor edi, ebp |
and edi, ebx |
add edx, [esi+14h] |
xor edi, eax |
rol eax, 0Ah |
lea edx, [edx+edi+5C4DD124h] |
mov edi, ebp |
rol edx, 9 |
add edx, ecx |
xor edi, edx |
and edi, eax |
add ecx, [esi+28h] |
xor edi, ebp |
rol ebp, 0Ah |
lea ecx, [ecx+edi+5C4DD124h] |
mov edi, edx |
rol ecx, 0Bh |
add ecx, ebx |
xor edi, ecx |
and edi, ebp |
add ebx, [esi+38h] |
xor edi, edx |
rol edx, 0Ah |
lea ebx, [ebx+edi+5C4DD124h] |
mov edi, ecx |
rol ebx, 7 |
add ebx, eax |
xor edi, ebx |
and edi, edx |
add eax, [esi+3Ch] |
xor edi, ecx |
rol ecx, 0Ah |
lea eax, [eax+edi+5C4DD124h] |
mov edi, ebx |
rol eax, 7 |
add eax, ebp |
xor edi, eax |
and edi, ecx |
add ebp, [esi+20h] |
xor edi, ebx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+5C4DD124h] |
mov edi, eax |
rol ebp, 0Ch |
add ebp, edx |
xor edi, ebp |
and edi, ebx |
add edx, [esi+30h] |
xor edi, eax |
rol eax, 0Ah |
lea edx, [edx+edi+5C4DD124h] |
mov edi, ebp |
rol edx, 7 |
add edx, ecx |
xor edi, edx |
and edi, eax |
add ecx, [esi+10h] |
xor edi, ebp |
rol ebp, 0Ah |
lea ecx, [ecx+edi+5C4DD124h] |
mov edi, edx |
rol ecx, 6 |
add ecx, ebx |
xor edi, ecx |
and edi, ebp |
add ebx, [esi+24h] |
xor edi, edx |
rol edx, 0Ah |
lea ebx, [ebx+edi+5C4DD124h] |
mov edi, ecx |
rol ebx, 0Fh |
add ebx, eax |
xor edi, ebx |
and edi, edx |
add eax, [esi+4] |
xor edi, ecx |
rol ecx, 0Ah |
lea eax, [eax+edi+5C4DD124h] |
mov edi, ebx |
rol eax, 0Dh |
add eax, ebp |
xor edi, eax |
and edi, ecx |
add ebp, [esi+8] |
xor edi, ebx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+5C4DD124h] |
rol ebp, 0Bh |
add ebp, edx |
mov [esp+14h], eax |
mov [esp+1Ch], ecx |
mov eax, [esp] |
mov ecx, [esp+8] |
mov [esp+20h], edx |
mov [esp+24h], ebp |
mov edx, [esp+0Ch] |
mov ebp, [esp+4] |
mov [esp+18h], ebp |
mov ebp, [esp+10h] |
mov edi, eax |
xor edi, 0FFFFFFFFh |
or edi, ebp |
add edx, [esi+0Ch] |
xor edi, ebx |
rol eax, 0Ah |
lea edx, [edx+edi+6ED9EBA1h] |
mov edi, ebp |
rol edx, 0Bh |
add edx, ecx |
xor edi, 0FFFFFFFFh |
or edi, edx |
add ecx, [esi+28h] |
xor edi, eax |
rol ebp, 0Ah |
lea ecx, [ecx+edi+6ED9EBA1h] |
mov edi, edx |
rol ecx, 0Dh |
add ecx, ebx |
xor edi, 0FFFFFFFFh |
or edi, ecx |
add ebx, [esi+38h] |
xor edi, ebp |
rol edx, 0Ah |
lea ebx, [ebx+edi+6ED9EBA1h] |
mov edi, ecx |
rol ebx, 6 |
add ebx, eax |
xor edi, 0FFFFFFFFh |
or edi, ebx |
add eax, [esi+10h] |
xor edi, edx |
rol ecx, 0Ah |
lea eax, [eax+edi+6ED9EBA1h] |
mov edi, ebx |
rol eax, 7 |
add eax, ebp |
xor edi, 0FFFFFFFFh |
or edi, eax |
add ebp, [esi+24h] |
xor edi, ecx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+6ED9EBA1h] |
mov edi, eax |
rol ebp, 0Eh |
add ebp, edx |
xor edi, 0FFFFFFFFh |
or edi, ebp |
add edx, [esi+3Ch] |
xor edi, ebx |
rol eax, 0Ah |
lea edx, [edx+edi+6ED9EBA1h] |
mov edi, ebp |
rol edx, 9 |
add edx, ecx |
xor edi, 0FFFFFFFFh |
or edi, edx |
add ecx, [esi+20h] |
xor edi, eax |
rol ebp, 0Ah |
lea ecx, [ecx+edi+6ED9EBA1h] |
mov edi, edx |
rol ecx, 0Dh |
add ecx, ebx |
xor edi, 0FFFFFFFFh |
or edi, ecx |
add ebx, [esi+4] |
xor edi, ebp |
rol edx, 0Ah |
lea ebx, [ebx+edi+6ED9EBA1h] |
mov edi, ecx |
rol ebx, 0Fh |
add ebx, eax |
xor edi, 0FFFFFFFFh |
or edi, ebx |
add eax, [esi+8] |
xor edi, edx |
rol ecx, 0Ah |
lea eax, [eax+edi+6ED9EBA1h] |
mov edi, ebx |
rol eax, 0Eh |
add eax, ebp |
xor edi, 0FFFFFFFFh |
or edi, eax |
add ebp, [esi+1Ch] |
xor edi, ecx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+6ED9EBA1h] |
mov edi, eax |
rol ebp, 8 |
add ebp, edx |
xor edi, 0FFFFFFFFh |
or edi, ebp |
add edx, [esi] |
xor edi, ebx |
rol eax, 0Ah |
lea edx, [edx+edi+6ED9EBA1h] |
mov edi, ebp |
rol edx, 0Dh |
add edx, ecx |
xor edi, 0FFFFFFFFh |
or edi, edx |
add ecx, [esi+18h] |
xor edi, eax |
rol ebp, 0Ah |
lea ecx, [ecx+edi+6ED9EBA1h] |
mov edi, edx |
rol ecx, 6 |
add ecx, ebx |
xor edi, 0FFFFFFFFh |
or edi, ecx |
add ebx, [esi+34h] |
xor edi, ebp |
rol edx, 0Ah |
lea ebx, [ebx+edi+6ED9EBA1h] |
mov edi, ecx |
rol ebx, 5 |
add ebx, eax |
xor edi, 0FFFFFFFFh |
or edi, ebx |
add eax, [esi+2Ch] |
xor edi, edx |
rol ecx, 0Ah |
lea eax, [eax+edi+6ED9EBA1h] |
mov edi, ebx |
rol eax, 0Ch |
add eax, ebp |
xor edi, 0FFFFFFFFh |
or edi, eax |
add ebp, [esi+14h] |
xor edi, ecx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+6ED9EBA1h] |
mov edi, eax |
rol ebp, 7 |
add ebp, edx |
xor edi, 0FFFFFFFFh |
or edi, ebp |
add edx, [esi+30h] |
xor edi, ebx |
rol eax, 0Ah |
lea edx, [edx+edi+6ED9EBA1h] |
rol edx, 5 |
add edx, ecx |
mov [esp], eax |
mov [esp+4], ebx |
mov eax, [esp+14h] |
mov ebx, [esp+18h] |
mov [esp+8], ecx |
mov [esp+0Ch], edx |
mov ecx, [esp+1Ch] |
mov edx, [esp+20h] |
mov [esp+10h], ebp |
mov ebp, [esp+24h] |
mov edi, eax |
xor edi, 0FFFFFFFFh |
or edi, ebp |
add edx, [esi+3Ch] |
xor edi, ebx |
rol eax, 0Ah |
lea edx, [edx+edi+6D703EF3h] |
mov edi, ebp |
rol edx, 9 |
add edx, ecx |
xor edi, 0FFFFFFFFh |
or edi, edx |
add ecx, [esi+14h] |
xor edi, eax |
rol ebp, 0Ah |
lea ecx, [ecx+edi+6D703EF3h] |
mov edi, edx |
rol ecx, 7 |
add ecx, ebx |
xor edi, 0FFFFFFFFh |
or edi, ecx |
add ebx, [esi+4] |
xor edi, ebp |
rol edx, 0Ah |
lea ebx, [ebx+edi+6D703EF3h] |
mov edi, ecx |
rol ebx, 0Fh |
add ebx, eax |
xor edi, 0FFFFFFFFh |
or edi, ebx |
add eax, [esi+0Ch] |
xor edi, edx |
rol ecx, 0Ah |
lea eax, [eax+edi+6D703EF3h] |
mov edi, ebx |
rol eax, 0Bh |
add eax, ebp |
xor edi, 0FFFFFFFFh |
or edi, eax |
add ebp, [esi+1Ch] |
xor edi, ecx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+6D703EF3h] |
mov edi, eax |
rol ebp, 8 |
add ebp, edx |
xor edi, 0FFFFFFFFh |
or edi, ebp |
add edx, [esi+38h] |
xor edi, ebx |
rol eax, 0Ah |
lea edx, [edx+edi+6D703EF3h] |
mov edi, ebp |
rol edx, 6 |
add edx, ecx |
xor edi, 0FFFFFFFFh |
or edi, edx |
add ecx, [esi+18h] |
xor edi, eax |
rol ebp, 0Ah |
lea ecx, [ecx+edi+6D703EF3h] |
mov edi, edx |
rol ecx, 6 |
add ecx, ebx |
xor edi, 0FFFFFFFFh |
or edi, ecx |
add ebx, [esi+24h] |
xor edi, ebp |
rol edx, 0Ah |
lea ebx, [ebx+edi+6D703EF3h] |
mov edi, ecx |
rol ebx, 0Eh |
add ebx, eax |
xor edi, 0FFFFFFFFh |
or edi, ebx |
add eax, [esi+2Ch] |
xor edi, edx |
rol ecx, 0Ah |
lea eax, [eax+edi+6D703EF3h] |
mov edi, ebx |
rol eax, 0Ch |
add eax, ebp |
xor edi, 0FFFFFFFFh |
or edi, eax |
add ebp, [esi+20h] |
xor edi, ecx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+6D703EF3h] |
mov edi, eax |
rol ebp, 0Dh |
add ebp, edx |
xor edi, 0FFFFFFFFh |
or edi, ebp |
add edx, [esi+30h] |
xor edi, ebx |
rol eax, 0Ah |
lea edx, [edx+edi+6D703EF3h] |
mov edi, ebp |
rol edx, 5 |
add edx, ecx |
xor edi, 0FFFFFFFFh |
or edi, edx |
add ecx, [esi+8] |
xor edi, eax |
rol ebp, 0Ah |
lea ecx, [ecx+edi+6D703EF3h] |
mov edi, edx |
rol ecx, 0Eh |
add ecx, ebx |
xor edi, 0FFFFFFFFh |
or edi, ecx |
add ebx, [esi+28h] |
xor edi, ebp |
rol edx, 0Ah |
lea ebx, [ebx+edi+6D703EF3h] |
mov edi, ecx |
rol ebx, 0Dh |
add ebx, eax |
xor edi, 0FFFFFFFFh |
or edi, ebx |
add eax, [esi] |
xor edi, edx |
rol ecx, 0Ah |
lea eax, [eax+edi+6D703EF3h] |
mov edi, ebx |
rol eax, 0Dh |
add eax, ebp |
xor edi, 0FFFFFFFFh |
or edi, eax |
add ebp, [esi+10h] |
xor edi, ecx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+6D703EF3h] |
mov edi, eax |
rol ebp, 7 |
add ebp, edx |
xor edi, 0FFFFFFFFh |
or edi, ebp |
add edx, [esi+34h] |
xor edi, ebx |
rol eax, 0Ah |
lea edx, [edx+edi+6D703EF3h] |
rol edx, 5 |
add edx, ecx |
mov [esp+14h], eax |
mov [esp+18h], ebx |
mov eax, [esp] |
mov ebx, [esp+4] |
mov [esp+20h], edx |
mov [esp+24h], ebp |
mov edx, [esp+0Ch] |
mov ebp, [esp+8] |
mov [esp+1Ch], ebp |
mov ebp, [esp+10h] |
mov edi, ebp |
xor edi, edx |
and edi, eax |
add ecx, [esi+4] |
xor edi, ebp |
rol ebp, 0Ah |
lea ecx, [ecx+edi-70E44324h] |
mov edi, edx |
rol ecx, 0Bh |
add ecx, ebx |
xor edi, ecx |
and edi, ebp |
add ebx, [esi+24h] |
xor edi, edx |
rol edx, 0Ah |
lea ebx, [ebx+edi-70E44324h] |
mov edi, ecx |
rol ebx, 0Ch |
add ebx, eax |
xor edi, ebx |
and edi, edx |
add eax, [esi+2Ch] |
xor edi, ecx |
rol ecx, 0Ah |
lea eax, [eax+edi-70E44324h] |
mov edi, ebx |
rol eax, 0Eh |
add eax, ebp |
xor edi, eax |
and edi, ecx |
add ebp, [esi+28h] |
xor edi, ebx |
rol ebx, 0Ah |
lea ebp, [ebp+edi-70E44324h] |
mov edi, eax |
rol ebp, 0Fh |
add ebp, edx |
xor edi, ebp |
and edi, ebx |
add edx, [esi] |
xor edi, eax |
rol eax, 0Ah |
lea edx, [edx+edi-70E44324h] |
mov edi, ebp |
rol edx, 0Eh |
add edx, ecx |
xor edi, edx |
and edi, eax |
add ecx, [esi+20h] |
xor edi, ebp |
rol ebp, 0Ah |
lea ecx, [ecx+edi-70E44324h] |
mov edi, edx |
rol ecx, 0Fh |
add ecx, ebx |
xor edi, ecx |
and edi, ebp |
add ebx, [esi+30h] |
xor edi, edx |
rol edx, 0Ah |
lea ebx, [ebx+edi-70E44324h] |
mov edi, ecx |
rol ebx, 9 |
add ebx, eax |
xor edi, ebx |
and edi, edx |
add eax, [esi+10h] |
xor edi, ecx |
rol ecx, 0Ah |
lea eax, [eax+edi-70E44324h] |
mov edi, ebx |
rol eax, 8 |
add eax, ebp |
xor edi, eax |
and edi, ecx |
add ebp, [esi+34h] |
xor edi, ebx |
rol ebx, 0Ah |
lea ebp, [ebp+edi-70E44324h] |
mov edi, eax |
rol ebp, 9 |
add ebp, edx |
xor edi, ebp |
and edi, ebx |
add edx, [esi+0Ch] |
xor edi, eax |
rol eax, 0Ah |
lea edx, [edx+edi-70E44324h] |
mov edi, ebp |
rol edx, 0Eh |
add edx, ecx |
xor edi, edx |
and edi, eax |
add ecx, [esi+1Ch] |
xor edi, ebp |
rol ebp, 0Ah |
lea ecx, [ecx+edi-70E44324h] |
mov edi, edx |
rol ecx, 5 |
add ecx, ebx |
xor edi, ecx |
and edi, ebp |
add ebx, [esi+3Ch] |
xor edi, edx |
rol edx, 0Ah |
lea ebx, [ebx+edi-70E44324h] |
mov edi, ecx |
rol ebx, 6 |
add ebx, eax |
xor edi, ebx |
and edi, edx |
add eax, [esi+38h] |
xor edi, ecx |
rol ecx, 0Ah |
lea eax, [eax+edi-70E44324h] |
mov edi, ebx |
rol eax, 8 |
add eax, ebp |
xor edi, eax |
and edi, ecx |
add ebp, [esi+14h] |
xor edi, ebx |
rol ebx, 0Ah |
lea ebp, [ebp+edi-70E44324h] |
mov edi, eax |
rol ebp, 6 |
add ebp, edx |
xor edi, ebp |
and edi, ebx |
add edx, [esi+18h] |
xor edi, eax |
rol eax, 0Ah |
lea edx, [edx+edi-70E44324h] |
mov edi, ebp |
rol edx, 5 |
add edx, ecx |
xor edi, edx |
and edi, eax |
add ecx, [esi+8] |
xor edi, ebp |
rol ebp, 0Ah |
lea ecx, [ecx+edi-70E44324h] |
rol ecx, 0Ch |
add ecx, ebx |
mov [esp], eax |
mov [esp+4], ebx |
mov eax, [esp+14h] |
mov ebx, [esp+18h] |
mov [esp+8], ecx |
mov [esp+0Ch], edx |
mov ecx, [esp+1Ch] |
mov edx, [esp+20h] |
mov [esp+10h], ebp |
mov ebp, [esp+24h] |
mov edi, eax |
xor edi, ebp |
add ecx, [esi+20h] |
and edi, edx |
xor edi, eax |
rol ebp, 0Ah |
lea ecx, [ecx+edi+7A6D76E9h] |
mov edi, ebp |
rol ecx, 0Fh |
add ecx, ebx |
xor edi, edx |
add ebx, [esi+18h] |
and edi, ecx |
xor edi, ebp |
rol edx, 0Ah |
lea ebx, [ebx+edi+7A6D76E9h] |
mov edi, edx |
rol ebx, 5 |
add ebx, eax |
xor edi, ecx |
add eax, [esi+10h] |
and edi, ebx |
xor edi, edx |
rol ecx, 0Ah |
lea eax, [eax+edi+7A6D76E9h] |
mov edi, ecx |
rol eax, 8 |
add eax, ebp |
xor edi, ebx |
add ebp, [esi+4] |
and edi, eax |
xor edi, ecx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+7A6D76E9h] |
mov edi, ebx |
rol ebp, 0Bh |
add ebp, edx |
xor edi, eax |
add edx, [esi+0Ch] |
and edi, ebp |
xor edi, ebx |
rol eax, 0Ah |
lea edx, [edx+edi+7A6D76E9h] |
mov edi, eax |
rol edx, 0Eh |
add edx, ecx |
xor edi, ebp |
add ecx, [esi+2Ch] |
and edi, edx |
xor edi, eax |
rol ebp, 0Ah |
lea ecx, [ecx+edi+7A6D76E9h] |
mov edi, ebp |
rol ecx, 0Eh |
add ecx, ebx |
xor edi, edx |
add ebx, [esi+3Ch] |
and edi, ecx |
xor edi, ebp |
rol edx, 0Ah |
lea ebx, [ebx+edi+7A6D76E9h] |
mov edi, edx |
rol ebx, 6 |
add ebx, eax |
xor edi, ecx |
add eax, [esi] |
and edi, ebx |
xor edi, edx |
rol ecx, 0Ah |
lea eax, [eax+edi+7A6D76E9h] |
mov edi, ecx |
rol eax, 0Eh |
add eax, ebp |
xor edi, ebx |
add ebp, [esi+14h] |
and edi, eax |
xor edi, ecx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+7A6D76E9h] |
mov edi, ebx |
rol ebp, 6 |
add ebp, edx |
xor edi, eax |
add edx, [esi+30h] |
and edi, ebp |
xor edi, ebx |
rol eax, 0Ah |
lea edx, [edx+edi+7A6D76E9h] |
mov edi, eax |
rol edx, 9 |
add edx, ecx |
xor edi, ebp |
add ecx, [esi+8] |
and edi, edx |
xor edi, eax |
rol ebp, 0Ah |
lea ecx, [ecx+edi+7A6D76E9h] |
mov edi, ebp |
rol ecx, 0Ch |
add ecx, ebx |
xor edi, edx |
add ebx, [esi+34h] |
and edi, ecx |
xor edi, ebp |
rol edx, 0Ah |
lea ebx, [ebx+edi+7A6D76E9h] |
mov edi, edx |
rol ebx, 9 |
add ebx, eax |
xor edi, ecx |
add eax, [esi+24h] |
and edi, ebx |
xor edi, edx |
rol ecx, 0Ah |
lea eax, [eax+edi+7A6D76E9h] |
mov edi, ecx |
rol eax, 0Ch |
add eax, ebp |
xor edi, ebx |
add ebp, [esi+1Ch] |
and edi, eax |
xor edi, ecx |
rol ebx, 0Ah |
lea ebp, [ebp+edi+7A6D76E9h] |
mov edi, ebx |
rol ebp, 5 |
add ebp, edx |
xor edi, eax |
add edx, [esi+28h] |
and edi, ebp |
xor edi, ebx |
rol eax, 0Ah |
lea edx, [edx+edi+7A6D76E9h] |
mov edi, eax |
rol edx, 0Fh |
add edx, ecx |
xor edi, ebp |
add ecx, [esi+38h] |
and edi, edx |
xor edi, eax |
rol ebp, 0Ah |
lea ecx, [ecx+edi+7A6D76E9h] |
rol ecx, 8 |
add ecx, ebx |
mov [esp+14h], eax |
mov [esp+18h], ebx |
mov eax, [esp] |
mov ebx, [esp+4] |
mov [esp+1Ch], ecx |
mov [esp+24h], ebp |
mov ecx, [esp+8] |
mov ebp, [esp+0Ch] |
mov [esp+20h], ebp |
mov ebp, [esp+10h] |
mov edi, ebp |
xor edi, 0FFFFFFFFh |
or edi, edx |
add ebx, [esi+10h] |
xor edi, ecx |
rol edx, 0Ah |
lea ebx, [ebx+edi-56AC02B2h] |
mov edi, edx |
rol ebx, 9 |
add ebx, eax |
xor edi, 0FFFFFFFFh |
or edi, ecx |
add eax, [esi] |
xor edi, ebx |
rol ecx, 0Ah |
lea eax, [eax+edi-56AC02B2h] |
mov edi, ecx |
rol eax, 0Fh |
add eax, ebp |
xor edi, 0FFFFFFFFh |
or edi, ebx |
add ebp, [esi+14h] |
xor edi, eax |
rol ebx, 0Ah |
lea ebp, [ebp+edi-56AC02B2h] |
mov edi, ebx |
rol ebp, 5 |
add ebp, edx |
xor edi, 0FFFFFFFFh |
or edi, eax |
add edx, [esi+24h] |
xor edi, ebp |
rol eax, 0Ah |
lea edx, [edx+edi-56AC02B2h] |
mov edi, eax |
rol edx, 0Bh |
add edx, ecx |
xor edi, 0FFFFFFFFh |
or edi, ebp |
add ecx, [esi+1Ch] |
xor edi, edx |
rol ebp, 0Ah |
lea ecx, [ecx+edi-56AC02B2h] |
mov edi, ebp |
rol ecx, 6 |
add ecx, ebx |
xor edi, 0FFFFFFFFh |
or edi, edx |
add ebx, [esi+30h] |
xor edi, ecx |
rol edx, 0Ah |
lea ebx, [ebx+edi-56AC02B2h] |
mov edi, edx |
rol ebx, 8 |
add ebx, eax |
xor edi, 0FFFFFFFFh |
or edi, ecx |
add eax, [esi+8] |
xor edi, ebx |
rol ecx, 0Ah |
lea eax, [eax+edi-56AC02B2h] |
mov edi, ecx |
rol eax, 0Dh |
add eax, ebp |
xor edi, 0FFFFFFFFh |
or edi, ebx |
add ebp, [esi+28h] |
xor edi, eax |
rol ebx, 0Ah |
lea ebp, [ebp+edi-56AC02B2h] |
mov edi, ebx |
rol ebp, 0Ch |
add ebp, edx |
xor edi, 0FFFFFFFFh |
or edi, eax |
add edx, [esi+38h] |
xor edi, ebp |
rol eax, 0Ah |
lea edx, [edx+edi-56AC02B2h] |
mov edi, eax |
rol edx, 5 |
add edx, ecx |
xor edi, 0FFFFFFFFh |
or edi, ebp |
add ecx, [esi+4] |
xor edi, edx |
rol ebp, 0Ah |
lea ecx, [ecx+edi-56AC02B2h] |
mov edi, ebp |
rol ecx, 0Ch |
add ecx, ebx |
xor edi, 0FFFFFFFFh |
or edi, edx |
add ebx, [esi+0Ch] |
xor edi, ecx |
rol edx, 0Ah |
lea ebx, [ebx+edi-56AC02B2h] |
mov edi, edx |
rol ebx, 0Dh |
add ebx, eax |
xor edi, 0FFFFFFFFh |
or edi, ecx |
add eax, [esi+20h] |
xor edi, ebx |
rol ecx, 0Ah |
lea eax, [eax+edi-56AC02B2h] |
mov edi, ecx |
rol eax, 0Eh |
add eax, ebp |
xor edi, 0FFFFFFFFh |
or edi, ebx |
add ebp, [esi+2Ch] |
xor edi, eax |
rol ebx, 0Ah |
lea ebp, [ebp+edi-56AC02B2h] |
mov edi, ebx |
rol ebp, 0Bh |
add ebp, edx |
xor edi, 0FFFFFFFFh |
or edi, eax |
add edx, [esi+18h] |
xor edi, ebp |
rol eax, 0Ah |
lea edx, [edx+edi-56AC02B2h] |
mov edi, eax |
rol edx, 8 |
add edx, ecx |
xor edi, 0FFFFFFFFh |
or edi, ebp |
add ecx, [esi+3Ch] |
xor edi, edx |
rol ebp, 0Ah |
lea ecx, [ecx+edi-56AC02B2h] |
mov edi, ebp |
rol ecx, 5 |
add ecx, ebx |
xor edi, 0FFFFFFFFh |
or edi, edx |
add ebx, [esi+34h] |
xor edi, ecx |
rol edx, 0Ah |
lea ebx, [ebx+edi-56AC02B2h] |
rol ebx, 6 |
add ebx, eax |
mov [esp], eax |
mov [esp+4], ebx |
mov eax, [esp+14h] |
mov ebx, [esp+18h] |
mov [esp+8], ecx |
mov [esp+0Ch], edx |
mov ecx, [esp+1Ch] |
mov edx, [esp+20h] |
mov [esp+10h], ebp |
mov ebp, [esp+24h] |
mov edi, ebp |
xor edi, edx |
xor edi, ecx |
add ebx, [esi+30h] |
rol edx, 0Ah |
add ebx, edi |
mov edi, edx |
rol ebx, 8 |
add ebx, eax |
xor edi, ecx |
xor edi, ebx |
add eax, [esi+3Ch] |
rol ecx, 0Ah |
add eax, edi |
mov edi, ecx |
rol eax, 5 |
add eax, ebp |
xor edi, ebx |
xor edi, eax |
add ebp, [esi+28h] |
rol ebx, 0Ah |
add ebp, edi |
mov edi, ebx |
rol ebp, 0Ch |
add ebp, edx |
xor edi, eax |
xor edi, ebp |
add edx, [esi+10h] |
rol eax, 0Ah |
add edx, edi |
mov edi, eax |
rol edx, 9 |
add edx, ecx |
xor edi, ebp |
xor edi, edx |
add ecx, [esi+4] |
rol ebp, 0Ah |
add ecx, edi |
mov edi, ebp |
rol ecx, 0Ch |
add ecx, ebx |
xor edi, edx |
xor edi, ecx |
add ebx, [esi+14h] |
rol edx, 0Ah |
add ebx, edi |
mov edi, edx |
rol ebx, 5 |
add ebx, eax |
xor edi, ecx |
xor edi, ebx |
add eax, [esi+20h] |
rol ecx, 0Ah |
add eax, edi |
mov edi, ecx |
rol eax, 0Eh |
add eax, ebp |
xor edi, ebx |
xor edi, eax |
add ebp, [esi+1Ch] |
rol ebx, 0Ah |
add ebp, edi |
mov edi, ebx |
rol ebp, 6 |
add ebp, edx |
xor edi, eax |
xor edi, ebp |
add edx, [esi+18h] |
rol eax, 0Ah |
add edx, edi |
mov edi, eax |
rol edx, 8 |
add edx, ecx |
xor edi, ebp |
xor edi, edx |
add ecx, [esi+8] |
rol ebp, 0Ah |
add ecx, edi |
mov edi, ebp |
rol ecx, 0Dh |
add ecx, ebx |
xor edi, edx |
xor edi, ecx |
add ebx, [esi+34h] |
rol edx, 0Ah |
add ebx, edi |
mov edi, edx |
rol ebx, 6 |
add ebx, eax |
xor edi, ecx |
xor edi, ebx |
add eax, [esi+38h] |
rol ecx, 0Ah |
add eax, edi |
mov edi, ecx |
rol eax, 5 |
add eax, ebp |
xor edi, ebx |
xor edi, eax |
add ebp, [esi] |
rol ebx, 0Ah |
add ebp, edi |
mov edi, ebx |
rol ebp, 0Fh |
add ebp, edx |
xor edi, eax |
xor edi, ebp |
add edx, [esi+0Ch] |
rol eax, 0Ah |
add edx, edi |
mov edi, eax |
rol edx, 0Dh |
add edx, ecx |
xor edi, ebp |
xor edi, edx |
add ecx, [esi+24h] |
rol ebp, 0Ah |
add ecx, edi |
mov edi, ebp |
rol ecx, 0Bh |
add ecx, ebx |
xor edi, edx |
xor edi, ecx |
add ebx, [esi+2Ch] |
rol edx, 0Ah |
add ebx, edi |
rol ebx, 0Bh |
add ebx, eax |
mov edi, [esp+28h] |
add [edi+10h], ebp |
add [edi+14h], eax |
add [edi+18h], ebx |
mov eax, [esp] |
mov ebx, [esp+4] |
add [edi+1Ch], ecx |
mov ebp, [esp+10h] |
add [edi+20h], edx |
mov ecx, [esp+8] |
mov edx, [esp+0Ch] |
add [edi], eax |
add [edi+4], ebx |
add esp, 2Ch |
add [edi+8], ecx |
add [edi+0Ch], edx |
add [edi+24h], ebp |
pop ebp |
pop edi |
pop esi |
pop ebx |
end; |
{$ENDIF} |
{$IFDEF THash_SHA_asm} |
procedure SHABuffer(W,S: PUInt32Array; Rotate: Boolean); |
var |
I: Integer; |
T: UInt32; //LongWord; |
begin |
SwapUInt32Buffer(S[0], W[0], 16); |
if Rotate then |
for I := 16 to 79 do |
begin |
T := W[I - 3] xor W[I - 8] xor W[I - 14] xor W[I - 16]; |
W[I] := T shl 1 or T shr 31; |
end |
else |
for I := 16 to 79 do |
begin |
T := W[I - 3] xor W[I - 8] xor W[I - 14] xor W[I - 16]; |
W[I] := T; |
end |
end; |
procedure THash_SHA0.DoTransform(Buffer: PUInt32Array); |
var |
W: array[0..79] of LongWord; |
begin |
SHABuffer(PUInt32Array(@W), Buffer, ClassType <> THash_SHA0); |
asm |
push ebx |
mov eax, Self |
push esi |
push edi |
lea edi, [eax].THash_SHA0.FDigest |
lea esi, W |
push ebp |
sub esp, 8 |
mov eax, [edi] |
mov ebx, [edi+4] |
mov ecx, [edi+8] |
mov [esp], edi |
mov edx, [edi+0Ch] |
mov ebp, [edi+10h] |
mov [esp+4], esi |
mov edi, ecx |
xor edi, edx |
and edi, ebx |
add ebp, [esi] |
xor edi, edx |
ror ebx, 2 |
lea ebp, [ebp+edi+5A827999h] |
mov edi, eax |
rol edi, 5 |
add ebp, edi |
mov edi, ecx |
xor edi, ebx |
and edi, eax |
add edx, [esi+4] |
xor edi, ecx |
ror eax, 2 |
lea edx, [edx+edi+5A827999h] |
mov edi, ebp |
rol edi, 5 |
add edx, edi |
mov edi, ebx |
xor edi, eax |
and edi, ebp |
add ecx, [esi+8] |
xor edi, ebx |
ror ebp, 2 |
lea ecx, [ecx+edi+5A827999h] |
mov edi, edx |
rol edi, 5 |
add ecx, edi |
mov edi, eax |
xor edi, ebp |
and edi, edx |
add ebx, [esi+0Ch] |
xor edi, eax |
ror edx, 2 |
lea ebx, [ebx+edi+5A827999h] |
mov edi, ecx |
rol edi, 5 |
add ebx, edi |
mov edi, ebp |
xor edi, edx |
and edi, ecx |
add eax, [esi+10h] |
xor edi, ebp |
ror ecx, 2 |
lea eax, [eax+edi+5A827999h] |
mov edi, ebx |
rol edi, 5 |
add eax, edi |
mov edi, edx |
xor edi, ecx |
and edi, ebx |
add ebp, [esi+14h] |
xor edi, edx |
ror ebx, 2 |
lea ebp, [ebp+edi+5A827999h] |
mov edi, eax |
rol edi, 5 |
add ebp, edi |
mov edi, ecx |
xor edi, ebx |
and edi, eax |
add edx, [esi+18h] |
xor edi, ecx |
ror eax, 2 |
lea edx, [edx+edi+5A827999h] |
mov edi, ebp |
rol edi, 5 |
add edx, edi |
mov edi, ebx |
xor edi, eax |
and edi, ebp |
add ecx, [esi+1Ch] |
xor edi, ebx |
ror ebp, 2 |
lea ecx, [ecx+edi+5A827999h] |
mov edi, edx |
rol edi, 5 |
add ecx, edi |
mov edi, eax |
xor edi, ebp |
and edi, edx |
add ebx, [esi+20h] |
xor edi, eax |
ror edx, 2 |
lea ebx, [ebx+edi+5A827999h] |
mov edi, ecx |
rol edi, 5 |
add ebx, edi |
mov edi, ebp |
xor edi, edx |
and edi, ecx |
add eax, [esi+24h] |
xor edi, ebp |
ror ecx, 2 |
lea eax, [eax+edi+5A827999h] |
mov edi, ebx |
rol edi, 5 |
add eax, edi |
mov edi, edx |
xor edi, ecx |
and edi, ebx |
add ebp, [esi+28h] |
xor edi, edx |
ror ebx, 2 |
lea ebp, [ebp+edi+5A827999h] |
mov edi, eax |
rol edi, 5 |
add ebp, edi |
mov edi, ecx |
xor edi, ebx |
and edi, eax |
add edx, [esi+2Ch] |
xor edi, ecx |
ror eax, 2 |
lea edx, [edx+edi+5A827999h] |
mov edi, ebp |
rol edi, 5 |
add edx, edi |
mov edi, ebx |
xor edi, eax |
and edi, ebp |
add ecx, [esi+30h] |
xor edi, ebx |
ror ebp, 2 |
lea ecx, [ecx+edi+5A827999h] |
mov edi, edx |
rol edi, 5 |
add ecx, edi |
mov edi, eax |
xor edi, ebp |
and edi, edx |
add ebx, [esi+34h] |
xor edi, eax |
ror edx, 2 |
lea ebx, [ebx+edi+5A827999h] |
mov edi, ecx |
rol edi, 5 |
add ebx, edi |
mov edi, ebp |
xor edi, edx |
and edi, ecx |
add eax, [esi+38h] |
xor edi, ebp |
ror ecx, 2 |
lea eax, [eax+edi+5A827999h] |
mov edi, ebx |
rol edi, 5 |
add eax, edi |
mov edi, edx |
xor edi, ecx |
and edi, ebx |
add ebp, [esi+3Ch] |
xor edi, edx |
ror ebx, 2 |
lea ebp, [ebp+edi+5A827999h] |
mov edi, eax |
rol edi, 5 |
add ebp, edi |
mov edi, ecx |
xor edi, ebx |
and edi, eax |
add edx, [esi+40h] |
xor edi, ecx |
ror eax, 2 |
lea edx, [edx+edi+5A827999h] |
mov edi, ebp |
rol edi, 5 |
add edx, edi |
mov edi, ebx |
xor edi, eax |
and edi, ebp |
add ecx, [esi+44h] |
xor edi, ebx |
ror ebp, 2 |
lea ecx, [ecx+edi+5A827999h] |
mov edi, edx |
rol edi, 5 |
add ecx, edi |
mov edi, eax |
xor edi, ebp |
and edi, edx |
add ebx, [esi+48h] |
xor edi, eax |
ror edx, 2 |
lea ebx, [ebx+edi+5A827999h] |
mov edi, ecx |
rol edi, 5 |
add ebx, edi |
mov edi, ebp |
xor edi, edx |
and edi, ecx |
add eax, [esi+4Ch] |
xor edi, ebp |
ror ecx, 2 |
lea eax, [eax+edi+5A827999h] |
mov edi, ebx |
rol edi, 5 |
add eax, edi |
mov edi, edx |
xor edi, ecx |
xor edi, ebx |
add ebp, edi |
mov edi, [esi+50h] |
ror ebx, 2 |
lea ebp, [ebp+edi+6ED9EBA1h] |
mov edi, eax |
rol edi, 5 |
add ebp, edi |
mov edi, ecx |
xor edi, ebx |
xor edi, eax |
add edx, edi |
mov edi, [esi+54h] |
ror eax, 2 |
lea edx, [edx+edi+6ED9EBA1h] |
mov edi, ebp |
rol edi, 5 |
add edx, edi |
mov edi, ebx |
xor edi, eax |
xor edi, ebp |
add ecx, edi |
mov edi, [esi+58h] |
ror ebp, 2 |
lea ecx, [ecx+edi+6ED9EBA1h] |
mov edi, edx |
rol edi, 5 |
add ecx, edi |
mov edi, eax |
xor edi, ebp |
xor edi, edx |
add ebx, edi |
mov edi, [esi+5Ch] |
ror edx, 2 |
lea ebx, [ebx+edi+6ED9EBA1h] |
mov edi, ecx |
rol edi, 5 |
add ebx, edi |
mov edi, ebp |
xor edi, edx |
xor edi, ecx |
add eax, edi |
mov edi, [esi+60h] |
ror ecx, 2 |
lea eax, [eax+edi+6ED9EBA1h] |
mov edi, ebx |
rol edi, 5 |
add eax, edi |
mov edi, edx |
xor edi, ecx |
xor edi, ebx |
add ebp, edi |
mov edi, [esi+64h] |
ror ebx, 2 |
lea ebp, [ebp+edi+6ED9EBA1h] |
mov edi, eax |
rol edi, 5 |
add ebp, edi |
mov edi, ecx |
xor edi, ebx |
xor edi, eax |
add edx, edi |
mov edi, [esi+68h] |
ror eax, 2 |
lea edx, [edx+edi+6ED9EBA1h] |
mov edi, ebp |
rol edi, 5 |
add edx, edi |
mov edi, ebx |
xor edi, eax |
xor edi, ebp |
add ecx, edi |
mov edi, [esi+6Ch] |
ror ebp, 2 |
lea ecx, [ecx+edi+6ED9EBA1h] |
mov edi, edx |
rol edi, 5 |
add ecx, edi |
mov edi, eax |
xor edi, ebp |
xor edi, edx |
add ebx, edi |
mov edi, [esi+70h] |
ror edx, 2 |
lea ebx, [ebx+edi+6ED9EBA1h] |
mov edi, ecx |
rol edi, 5 |
add ebx, edi |
mov edi, ebp |
xor edi, edx |
xor edi, ecx |
add eax, edi |
mov edi, [esi+74h] |
ror ecx, 2 |
lea eax, [eax+edi+6ED9EBA1h] |
mov edi, ebx |
rol edi, 5 |
add eax, edi |
mov edi, edx |
xor edi, ecx |
xor edi, ebx |
add ebp, edi |
mov edi, [esi+78h] |
ror ebx, 2 |
lea ebp, [ebp+edi+6ED9EBA1h] |
mov edi, eax |
rol edi, 5 |
add ebp, edi |
mov edi, ecx |
xor edi, ebx |
xor edi, eax |
add edx, edi |
mov edi, [esi+7Ch] |
ror eax, 2 |
lea edx, [edx+edi+6ED9EBA1h] |
mov edi, ebp |
rol edi, 5 |
add edx, edi |
mov edi, ebx |
xor edi, eax |
xor edi, ebp |
add ecx, edi |
mov edi, [esi+80h] |
ror ebp, 2 |
lea ecx, [ecx+edi+6ED9EBA1h] |
mov edi, edx |
rol edi, 5 |
add ecx, edi |
mov edi, eax |
xor edi, ebp |
xor edi, edx |
add ebx, edi |
mov edi, [esi+84h] |
ror edx, 2 |
lea ebx, [ebx+edi+6ED9EBA1h] |
mov edi, ecx |
rol edi, 5 |
add ebx, edi |
mov edi, ebp |
xor edi, edx |
xor edi, ecx |
add eax, edi |
mov edi, [esi+88h] |
ror ecx, 2 |
lea eax, [eax+edi+6ED9EBA1h] |
mov edi, ebx |
rol edi, 5 |
add eax, edi |
mov edi, edx |
xor edi, ecx |
xor edi, ebx |
add ebp, edi |
mov edi, [esi+8Ch] |
ror ebx, 2 |
lea ebp, [ebp+edi+6ED9EBA1h] |
mov edi, eax |
rol edi, 5 |
add ebp, edi |
mov edi, ecx |
xor edi, ebx |
xor edi, eax |
add edx, edi |
mov edi, [esi+90h] |
ror eax, 2 |
lea edx, [edx+edi+6ED9EBA1h] |
mov edi, ebp |
rol edi, 5 |
add edx, edi |
mov edi, ebx |
xor edi, eax |
xor edi, ebp |
add ecx, edi |
mov edi, [esi+94h] |
ror ebp, 2 |
lea ecx, [ecx+edi+6ED9EBA1h] |
mov edi, edx |
rol edi, 5 |
add ecx, edi |
mov edi, eax |
xor edi, ebp |
xor edi, edx |
add ebx, edi |
mov edi, [esi+98h] |
ror edx, 2 |
lea ebx, [ebx+edi+6ED9EBA1h] |
mov edi, ecx |
rol edi, 5 |
add ebx, edi |
mov edi, ebp |
xor edi, edx |
xor edi, ecx |
add eax, edi |
mov edi, [esi+9Ch] |
ror ecx, 2 |
lea eax, [eax+edi+6ED9EBA1h] |
mov edi, ebx |
rol edi, 5 |
add eax, edi |
mov edi, edx |
xor edi, ecx |
mov esi, ecx |
mov edi, ecx |
or esi, edx |
and edi, edx |
and esi, ebx |
or esi, edi |
mov edi, eax |
add ebp, esi |
mov esi, [esp+4] |
rol edi, 5 |
add ebp, edi |
mov edi, [esi+0A0h] |
ror ebx, 2 |
lea ebp, [ebp+edi-70E44324h] |
mov esi, ebx |
mov edi, ebx |
or esi, ecx |
and edi, ecx |
and esi, eax |
or esi, edi |
mov edi, ebp |
add edx, esi |
mov esi, [esp+4] |
rol edi, 5 |
add edx, edi |
mov edi, [esi+0A4h] |
ror eax, 2 |
lea edx, [edx+edi-70E44324h] |
mov esi, eax |
mov edi, eax |
or esi, ebx |
and edi, ebx |
and esi, ebp |
or esi, edi |
mov edi, edx |
add ecx, esi |
mov esi, [esp+4] |
rol edi, 5 |
add ecx, edi |
mov edi, [esi+0A8h] |
ror ebp, 2 |
lea ecx, [ecx+edi-70E44324h] |
mov esi, ebp |
mov edi, ebp |
or esi, eax |
and edi, eax |
and esi, edx |
or esi, edi |
mov edi, ecx |
add ebx, esi |
mov esi, [esp+4] |
rol edi, 5 |
add ebx, edi |
mov edi, [esi+0ACh] |
ror edx, 2 |
lea ebx, [ebx+edi-70E44324h] |
mov esi, edx |
mov edi, edx |
or esi, ebp |
and edi, ebp |
and esi, ecx |
or esi, edi |
mov edi, ebx |
add eax, esi |
mov esi, [esp+4] |
rol edi, 5 |
add eax, edi |
mov edi, [esi+0B0h] |
ror ecx, 2 |
lea eax, [eax+edi-70E44324h] |
mov esi, ecx |
mov edi, ecx |
or esi, edx |
and edi, edx |
and esi, ebx |
or esi, edi |
mov edi, eax |
add ebp, esi |
mov esi, [esp+4] |
rol edi, 5 |
add ebp, edi |
mov edi, [esi+0B4h] |
ror ebx, 2 |
lea ebp, [ebp+edi-70E44324h] |
mov esi, ebx |
mov edi, ebx |
or esi, ecx |
and edi, ecx |
and esi, eax |
or esi, edi |
mov edi, ebp |
add edx, esi |
mov esi, [esp+4] |
rol edi, 5 |
add edx, edi |
mov edi, [esi+0B8h] |
ror eax, 2 |
lea edx, [edx+edi-70E44324h] |
mov esi, eax |
mov edi, eax |
or esi, ebx |
and edi, ebx |
and esi, ebp |
or esi, edi |
mov edi, edx |
add ecx, esi |
mov esi, [esp+4] |
rol edi, 5 |
add ecx, edi |
mov edi, [esi+0BCh] |
ror ebp, 2 |
lea ecx, [ecx+edi-70E44324h] |
mov esi, ebp |
mov edi, ebp |
or esi, eax |
and edi, eax |
and esi, edx |
or esi, edi |
mov edi, ecx |
add ebx, esi |
mov esi, [esp+4] |
rol edi, 5 |
add ebx, edi |
mov edi, [esi+0C0h] |
ror edx, 2 |
lea ebx, [ebx+edi-70E44324h] |
mov esi, edx |
mov edi, edx |
or esi, ebp |
and edi, ebp |
and esi, ecx |
or esi, edi |
mov edi, ebx |
add eax, esi |
mov esi, [esp+4] |
rol edi, 5 |
add eax, edi |
mov edi, [esi+0C4h] |
ror ecx, 2 |
lea eax, [eax+edi-70E44324h] |
mov esi, ecx |
mov edi, ecx |
or esi, edx |
and edi, edx |
and esi, ebx |
or esi, edi |
mov edi, eax |
add ebp, esi |
mov esi, [esp+4] |
rol edi, 5 |
add ebp, edi |
mov edi, [esi+0C8h] |
ror ebx, 2 |
lea ebp, [ebp+edi-70E44324h] |
mov esi, ebx |
mov edi, ebx |
or esi, ecx |
and edi, ecx |
and esi, eax |
or esi, edi |
mov edi, ebp |
add edx, esi |
mov esi, [esp+4] |
rol edi, 5 |
add edx, edi |
mov edi, [esi+0CCh] |
ror eax, 2 |
lea edx, [edx+edi-70E44324h] |
mov esi, eax |
mov edi, eax |
or esi, ebx |
and edi, ebx |
and esi, ebp |
or esi, edi |
mov edi, edx |
add ecx, esi |
mov esi, [esp+4] |
rol edi, 5 |
add ecx, edi |
mov edi, [esi+0D0h] |
ror ebp, 2 |
lea ecx, [ecx+edi-70E44324h] |
mov esi, ebp |
mov edi, ebp |
or esi, eax |
and edi, eax |
and esi, edx |
or esi, edi |
mov edi, ecx |
add ebx, esi |
mov esi, [esp+4] |
rol edi, 5 |
add ebx, edi |
mov edi, [esi+0D4h] |
ror edx, 2 |
lea ebx, [ebx+edi-70E44324h] |
mov esi, edx |
mov edi, edx |
or esi, ebp |
and edi, ebp |
and esi, ecx |
or esi, edi |
mov edi, ebx |
add eax, esi |
mov esi, [esp+4] |
rol edi, 5 |
add eax, edi |
mov edi, [esi+0D8h] |
ror ecx, 2 |
lea eax, [eax+edi-70E44324h] |
mov esi, ecx |
mov edi, ecx |
or esi, edx |
and edi, edx |
and esi, ebx |
or esi, edi |
mov edi, eax |
add ebp, esi |
mov esi, [esp+4] |
rol edi, 5 |
add ebp, edi |
mov edi, [esi+0DCh] |
ror ebx, 2 |
lea ebp, [ebp+edi-70E44324h] |
mov esi, ebx |
mov edi, ebx |
or esi, ecx |
and edi, ecx |
and esi, eax |
or esi, edi |
mov edi, ebp |
add edx, esi |
mov esi, [esp+4] |
rol edi, 5 |
add edx, edi |
mov edi, [esi+0E0h] |
ror eax, 2 |
lea edx, [edx+edi-70E44324h] |
mov esi, eax |
mov edi, eax |
or esi, ebx |
and edi, ebx |
and esi, ebp |
or esi, edi |
mov edi, edx |
add ecx, esi |
mov esi, [esp+4] |
rol edi, 5 |
add ecx, edi |
mov edi, [esi+0E4h] |
ror ebp, 2 |
lea ecx, [ecx+edi-70E44324h] |
mov esi, ebp |
mov edi, ebp |
or esi, eax |
and edi, eax |
and esi, edx |
or esi, edi |
mov edi, ecx |
add ebx, esi |
mov esi, [esp+4] |
rol edi, 5 |
add ebx, edi |
mov edi, [esi+0E8h] |
ror edx, 2 |
lea ebx, [ebx+edi-70E44324h] |
mov esi, edx |
mov edi, edx |
or esi, ebp |
and edi, ebp |
and esi, ecx |
or esi, edi |
mov edi, ebx |
add eax, esi |
mov esi, [esp+4] |
rol edi, 5 |
add eax, edi |
mov edi, [esi+0ECh] |
ror ecx, 2 |
lea eax, [eax+edi-70E44324h] |
mov edi, ecx |
xor edi, edx |
xor edi, ebx |
add ebp, edi |
mov edi, [esi+0F0h] |
ror ebx, 2 |
lea ebp, [ebp+edi-359D3E2Ah] |
mov edi, eax |
rol edi, 5 |
add ebp, edi |
mov edi, ecx |
xor edi, ebx |
xor edi, eax |
add edx, edi |
mov edi, [esi+0F4h] |
ror eax, 2 |
lea edx, [edx+edi-359D3E2Ah] |
mov edi, ebp |
rol edi, 5 |
add edx, edi |
mov edi, ebx |
xor edi, eax |
xor edi, ebp |
add ecx, edi |
mov edi, [esi+0F8h] |
ror ebp, 2 |
lea ecx, [ecx+edi-359D3E2Ah] |
mov edi, edx |
rol edi, 5 |
add ecx, edi |
mov edi, eax |
xor edi, ebp |
xor edi, edx |
add ebx, edi |
mov edi, [esi+0FCh] |
ror edx, 2 |
lea ebx, [ebx+edi-359D3E2Ah] |
mov edi, ecx |
rol edi, 5 |
add ebx, edi |
mov edi, ebp |
xor edi, edx |
xor edi, ecx |
add eax, edi |
mov edi, [esi+100h] |
ror ecx, 2 |
lea eax, [eax+edi-359D3E2Ah] |
mov edi, ebx |
rol edi, 5 |
add eax, edi |
mov edi, edx |
xor edi, ecx |
xor edi, ebx |
add ebp, edi |
mov edi, [esi+104h] |
ror ebx, 2 |
lea ebp, [ebp+edi-359D3E2Ah] |
mov edi, eax |
rol edi, 5 |
add ebp, edi |
mov edi, ecx |
xor edi, ebx |
xor edi, eax |
add edx, edi |
mov edi, [esi+108h] |
ror eax, 2 |
lea edx, [edx+edi-359D3E2Ah] |
mov edi, ebp |
rol edi, 5 |
add edx, edi |
mov edi, ebx |
xor edi, eax |
xor edi, ebp |
add ecx, edi |
mov edi, [esi+10Ch] |
ror ebp, 2 |
lea ecx, [ecx+edi-359D3E2Ah] |
mov edi, edx |
rol edi, 5 |
add ecx, edi |
mov edi, eax |
xor edi, ebp |
xor edi, edx |
add ebx, edi |
mov edi, [esi+110h] |
ror edx, 2 |
lea ebx, [ebx+edi-359D3E2Ah] |
mov edi, ecx |
rol edi, 5 |
add ebx, edi |
mov edi, ebp |
xor edi, edx |
xor edi, ecx |
add eax, edi |
mov edi, [esi+114h] |
ror ecx, 2 |
lea eax, [eax+edi-359D3E2Ah] |
mov edi, ebx |
rol edi, 5 |
add eax, edi |
mov edi, edx |
xor edi, ecx |
xor edi, ebx |
add ebp, edi |
mov edi, [esi+118h] |
ror ebx, 2 |
lea ebp, [ebp+edi-359D3E2Ah] |
mov edi, eax |
rol edi, 5 |
add ebp, edi |
mov edi, ecx |
xor edi, ebx |
xor edi, eax |
add edx, edi |
mov edi, [esi+11Ch] |
ror eax, 2 |
lea edx, [edx+edi-359D3E2Ah] |
mov edi, ebp |
rol edi, 5 |
add edx, edi |
mov edi, ebx |
xor edi, eax |
xor edi, ebp |
add ecx, edi |
mov edi, [esi+120h] |
ror ebp, 2 |
lea ecx, [ecx+edi-359D3E2Ah] |
mov edi, edx |
rol edi, 5 |
add ecx, edi |
mov edi, eax |
xor edi, ebp |
xor edi, edx |
add ebx, edi |
mov edi, [esi+124h] |
ror edx, 2 |
lea ebx, [ebx+edi-359D3E2Ah] |
mov edi, ecx |
rol edi, 5 |
add ebx, edi |
mov edi, ebp |
xor edi, edx |
xor edi, ecx |
add eax, edi |
mov edi, [esi+128h] |
ror ecx, 2 |
lea eax, [eax+edi-359D3E2Ah] |
mov edi, ebx |
rol edi, 5 |
add eax, edi |
mov edi, edx |
xor edi, ecx |
xor edi, ebx |
add ebp, edi |
mov edi, [esi+12Ch] |
ror ebx, 2 |
lea ebp, [ebp+edi-359D3E2Ah] |
mov edi, eax |
rol edi, 5 |
add ebp, edi |
mov edi, ecx |
xor edi, ebx |
xor edi, eax |
add edx, edi |
mov edi, [esi+130h] |
ror eax, 2 |
lea edx, [edx+edi-359D3E2Ah] |
mov edi, ebp |
rol edi, 5 |
add edx, edi |
mov edi, ebx |
xor edi, eax |
xor edi, ebp |
add ecx, edi |
mov edi, [esi+134h] |
ror ebp, 2 |
lea ecx, [ecx+edi-359D3E2Ah] |
mov edi, edx |
rol edi, 5 |
add ecx, edi |
mov edi, eax |
xor edi, ebp |
xor edi, edx |
add ebx, edi |
mov edi, [esi+138h] |
ror edx, 2 |
lea ebx, [ebx+edi-359D3E2Ah] |
mov edi, ecx |
rol edi, 5 |
add ebx, edi |
mov edi, ebp |
xor edi, edx |
xor edi, ecx |
add eax, edi |
mov edi, [esi+13Ch] |
ror ecx, 2 |
lea eax, [eax+edi-359D3E2Ah] |
mov edi, ebx |
rol edi, 5 |
add eax, edi |
mov edi, [esp] |
add esp, 8 |
add [edi], eax |
mov eax, [edi+4] |
mov esi, [edi+8] |
add ebx, eax |
mov eax, [edi+0Ch] |
add ecx, esi |
mov esi, [edi+10h] |
mov [edi+4], ebx |
add edx, eax |
add ebp, esi |
mov [edi+8], ecx |
mov [edi+0Ch], edx |
mov [edi+10h], ebp |
pop ebp |
pop edi |
pop esi |
pop ebx |
end; |
end; |
{$IFDEF OLD_SHA_NAME} |
procedure THash_SHA.DoTransform(Buffer: PUInt32Array); |
var |
W: array[0..79] of LongWord; |
begin |
SHABuffer(PUInt32Array(@W), Buffer, ClassType <> THash_SHA); |
asm |
push ebx |
mov eax, Self |
push esi |
push edi |
lea edi, [eax].THash_SHA.FDigest |
lea esi, W |
push ebp |
sub esp, 8 |
mov eax, [edi] |
mov ebx, [edi+4] |
mov ecx, [edi+8] |
mov [esp], edi |
mov edx, [edi+0Ch] |
mov ebp, [edi+10h] |
mov [esp+4], esi |
mov edi, ecx |
xor edi, edx |
and edi, ebx |
add ebp, [esi] |
xor edi, edx |
ror ebx, 2 |
lea ebp, [ebp+edi+5A827999h] |
mov edi, eax |
rol edi, 5 |
add ebp, edi |
mov edi, ecx |
xor edi, ebx |
and edi, eax |
add edx, [esi+4] |
xor edi, ecx |
ror eax, 2 |
lea edx, [edx+edi+5A827999h] |
mov edi, ebp |
rol edi, 5 |
add edx, edi |
mov edi, ebx |
xor edi, eax |
and edi, ebp |
add ecx, [esi+8] |
xor edi, ebx |
ror ebp, 2 |
lea ecx, [ecx+edi+5A827999h] |
mov edi, edx |
rol edi, 5 |
add ecx, edi |
mov edi, eax |
xor edi, ebp |
and edi, edx |
add ebx, [esi+0Ch] |
xor edi, eax |
ror edx, 2 |
lea ebx, [ebx+edi+5A827999h] |
mov edi, ecx |
rol edi, 5 |
add ebx, edi |
mov edi, ebp |
xor edi, edx |
and edi, ecx |
add eax, [esi+10h] |
xor edi, ebp |
ror ecx, 2 |
lea eax, [eax+edi+5A827999h] |
mov edi, ebx |
rol edi, 5 |
add eax, edi |
mov edi, edx |
xor edi, ecx |
and edi, ebx |
add ebp, [esi+14h] |
xor edi, edx |
ror ebx, 2 |
lea ebp, [ebp+edi+5A827999h] |
mov edi, eax |
rol edi, 5 |
add ebp, edi |
mov edi, ecx |
xor edi, ebx |
and edi, eax |
add edx, [esi+18h] |
xor edi, ecx |
ror eax, 2 |
lea edx, [edx+edi+5A827999h] |
mov edi, ebp |
rol edi, 5 |
add edx, edi |
mov edi, ebx |
xor edi, eax |
and edi, ebp |
add ecx, [esi+1Ch] |
xor edi, ebx |
ror ebp, 2 |
lea ecx, [ecx+edi+5A827999h] |
mov edi, edx |
rol edi, 5 |
add ecx, edi |
mov edi, eax |
xor edi, ebp |
and edi, edx |
add ebx, [esi+20h] |
xor edi, eax |
ror edx, 2 |
lea ebx, [ebx+edi+5A827999h] |
mov edi, ecx |
rol edi, 5 |
add ebx, edi |
mov edi, ebp |
xor edi, edx |
and edi, ecx |
add eax, [esi+24h] |
xor edi, ebp |
ror ecx, 2 |
lea eax, [eax+edi+5A827999h] |
mov edi, ebx |
rol edi, 5 |
add eax, edi |
mov edi, edx |
xor edi, ecx |
and edi, ebx |
add ebp, [esi+28h] |
xor edi, edx |
ror ebx, 2 |
lea ebp, [ebp+edi+5A827999h] |
mov edi, eax |
rol edi, 5 |
add ebp, edi |
mov edi, ecx |
xor edi, ebx |
and edi, eax |
add edx, [esi+2Ch] |
xor edi, ecx |
ror eax, 2 |
lea edx, [edx+edi+5A827999h] |
mov edi, ebp |
rol edi, 5 |
add edx, edi |
mov edi, ebx |
xor edi, eax |
and edi, ebp |
add ecx, [esi+30h] |
xor edi, ebx |
ror ebp, 2 |
lea ecx, [ecx+edi+5A827999h] |
mov edi, edx |
rol edi, 5 |
add ecx, edi |
mov edi, eax |
xor edi, ebp |
and edi, edx |
add ebx, [esi+34h] |
xor edi, eax |
ror edx, 2 |
lea ebx, [ebx+edi+5A827999h] |
mov edi, ecx |
rol edi, 5 |
add ebx, edi |
mov edi, ebp |
xor edi, edx |
and edi, ecx |
add eax, [esi+38h] |
xor edi, ebp |
ror ecx, 2 |
lea eax, [eax+edi+5A827999h] |
mov edi, ebx |
rol edi, 5 |
add eax, edi |
mov edi, edx |
xor edi, ecx |
and edi, ebx |
add ebp, [esi+3Ch] |
xor edi, edx |
ror ebx, 2 |
lea ebp, [ebp+edi+5A827999h] |
mov edi, eax |
rol edi, 5 |
add ebp, edi |
mov edi, ecx |
xor edi, ebx |
and edi, eax |
add edx, [esi+40h] |
xor edi, ecx |
ror eax, 2 |
lea edx, [edx+edi+5A827999h] |
mov edi, ebp |
rol edi, 5 |
add edx, edi |
mov edi, ebx |
xor edi, eax |
and edi, ebp |
add ecx, [esi+44h] |
xor edi, ebx |
ror ebp, 2 |
lea ecx, [ecx+edi+5A827999h] |
mov edi, edx |
rol edi, 5 |
add ecx, edi |
mov edi, eax |
xor edi, ebp |
and edi, edx |
add ebx, [esi+48h] |
xor edi, eax |
ror edx, 2 |
lea ebx, [ebx+edi+5A827999h] |
mov edi, ecx |
rol edi, 5 |
add ebx, edi |
mov edi, ebp |
xor edi, edx |
and edi, ecx |
add eax, [esi+4Ch] |
xor edi, ebp |
ror ecx, 2 |
lea eax, [eax+edi+5A827999h] |
mov edi, ebx |
rol edi, 5 |
add eax, edi |
mov edi, edx |
xor edi, ecx |
xor edi, ebx |
add ebp, edi |
mov edi, [esi+50h] |
ror ebx, 2 |
lea ebp, [ebp+edi+6ED9EBA1h] |
mov edi, eax |
rol edi, 5 |
add ebp, edi |
mov edi, ecx |
xor edi, ebx |
xor edi, eax |
add edx, edi |
mov edi, [esi+54h] |
ror eax, 2 |
lea edx, [edx+edi+6ED9EBA1h] |
mov edi, ebp |
rol edi, 5 |
add edx, edi |
mov edi, ebx |
xor edi, eax |
xor edi, ebp |
add ecx, edi |
mov edi, [esi+58h] |
ror ebp, 2 |
lea ecx, [ecx+edi+6ED9EBA1h] |
mov edi, edx |
rol edi, 5 |
add ecx, edi |
mov edi, eax |
xor edi, ebp |
xor edi, edx |
add ebx, edi |
mov edi, [esi+5Ch] |
ror edx, 2 |
lea ebx, [ebx+edi+6ED9EBA1h] |
mov edi, ecx |
rol edi, 5 |
add ebx, edi |
mov edi, ebp |
xor edi, edx |
xor edi, ecx |
add eax, edi |
mov edi, [esi+60h] |
ror ecx, 2 |
lea eax, [eax+edi+6ED9EBA1h] |
mov edi, ebx |
rol edi, 5 |
add eax, edi |
mov edi, edx |
xor edi, ecx |
xor edi, ebx |
add ebp, edi |
mov edi, [esi+64h] |
ror ebx, 2 |
lea ebp, [ebp+edi+6ED9EBA1h] |
mov edi, eax |
rol edi, 5 |
add ebp, edi |
mov edi, ecx |
xor edi, ebx |
xor edi, eax |
add edx, edi |
mov edi, [esi+68h] |
ror eax, 2 |
lea edx, [edx+edi+6ED9EBA1h] |
mov edi, ebp |
rol edi, 5 |
add edx, edi |
mov edi, ebx |
xor edi, eax |
xor edi, ebp |
add ecx, edi |
mov edi, [esi+6Ch] |
ror ebp, 2 |
lea ecx, [ecx+edi+6ED9EBA1h] |
mov edi, edx |
rol edi, 5 |
add ecx, edi |
mov edi, eax |
xor edi, ebp |
xor edi, edx |
add ebx, edi |
mov edi, [esi+70h] |
ror edx, 2 |
lea ebx, [ebx+edi+6ED9EBA1h] |
mov edi, ecx |
rol edi, 5 |
add ebx, edi |
mov edi, ebp |
xor edi, edx |
xor edi, ecx |
add eax, edi |
mov edi, [esi+74h] |
ror ecx, 2 |
lea eax, [eax+edi+6ED9EBA1h] |
mov edi, ebx |
rol edi, 5 |
add eax, edi |
mov edi, edx |
xor edi, ecx |
xor edi, ebx |
add ebp, edi |
mov edi, [esi+78h] |
ror ebx, 2 |
lea ebp, [ebp+edi+6ED9EBA1h] |
mov edi, eax |
rol edi, 5 |
add ebp, edi |
mov edi, ecx |
xor edi, ebx |
xor edi, eax |
add edx, edi |
mov edi, [esi+7Ch] |
ror eax, 2 |
lea edx, [edx+edi+6ED9EBA1h] |
mov edi, ebp |
rol edi, 5 |
add edx, edi |
mov edi, ebx |
xor edi, eax |
xor edi, ebp |
add ecx, edi |
mov edi, [esi+80h] |
ror ebp, 2 |
lea ecx, [ecx+edi+6ED9EBA1h] |
mov edi, edx |
rol edi, 5 |
add ecx, edi |
mov edi, eax |
xor edi, ebp |
xor edi, edx |
add ebx, edi |
mov edi, [esi+84h] |
ror edx, 2 |
lea ebx, [ebx+edi+6ED9EBA1h] |
mov edi, ecx |
rol edi, 5 |
add ebx, edi |
mov edi, ebp |
xor edi, edx |
xor edi, ecx |
add eax, edi |
mov edi, [esi+88h] |
ror ecx, 2 |
lea eax, [eax+edi+6ED9EBA1h] |
mov edi, ebx |
rol edi, 5 |
add eax, edi |
mov edi, edx |
xor edi, ecx |
xor edi, ebx |
add ebp, edi |
mov edi, [esi+8Ch] |
ror ebx, 2 |
lea ebp, [ebp+edi+6ED9EBA1h] |
mov edi, eax |
rol edi, 5 |
add ebp, edi |
mov edi, ecx |
xor edi, ebx |
xor edi, eax |
add edx, edi |
mov edi, [esi+90h] |
ror eax, 2 |
lea edx, [edx+edi+6ED9EBA1h] |
mov edi, ebp |
rol edi, 5 |
add edx, edi |
mov edi, ebx |
xor edi, eax |
xor edi, ebp |
add ecx, edi |
mov edi, [esi+94h] |
ror ebp, 2 |
lea ecx, [ecx+edi+6ED9EBA1h] |
mov edi, edx |
rol edi, 5 |
add ecx, edi |
mov edi, eax |
xor edi, ebp |
xor edi, edx |
add ebx, edi |
mov edi, [esi+98h] |
ror edx, 2 |
lea ebx, [ebx+edi+6ED9EBA1h] |
mov edi, ecx |
rol edi, 5 |
add ebx, edi |
mov edi, ebp |
xor edi, edx |
xor edi, ecx |
add eax, edi |
mov edi, [esi+9Ch] |
ror ecx, 2 |
lea eax, [eax+edi+6ED9EBA1h] |
mov edi, ebx |
rol edi, 5 |
add eax, edi |
mov edi, edx |
xor edi, ecx |
mov esi, ecx |
mov edi, ecx |
or esi, edx |
and edi, edx |
and esi, ebx |
or esi, edi |
mov edi, eax |
add ebp, esi |
mov esi, [esp+4] |
rol edi, 5 |
add ebp, edi |
mov edi, [esi+0A0h] |
ror ebx, 2 |
lea ebp, [ebp+edi-70E44324h] |
mov esi, ebx |
mov edi, ebx |
or esi, ecx |
and edi, ecx |
and esi, eax |
or esi, edi |
mov edi, ebp |
add edx, esi |
mov esi, [esp+4] |
rol edi, 5 |
add edx, edi |
mov edi, [esi+0A4h] |
ror eax, 2 |
lea edx, [edx+edi-70E44324h] |
mov esi, eax |
mov edi, eax |
or esi, ebx |
and edi, ebx |
and esi, ebp |
or esi, edi |
mov edi, edx |
add ecx, esi |
mov esi, [esp+4] |
rol edi, 5 |
add ecx, edi |
mov edi, [esi+0A8h] |
ror ebp, 2 |
lea ecx, [ecx+edi-70E44324h] |
mov esi, ebp |
mov edi, ebp |
or esi, eax |
and edi, eax |
and esi, edx |
or esi, edi |
mov edi, ecx |
add ebx, esi |
mov esi, [esp+4] |
rol edi, 5 |
add ebx, edi |
mov edi, [esi+0ACh] |
ror edx, 2 |
lea ebx, [ebx+edi-70E44324h] |
mov esi, edx |
mov edi, edx |
or esi, ebp |
and edi, ebp |
and esi, ecx |
or esi, edi |
mov edi, ebx |
add eax, esi |
mov esi, [esp+4] |
rol edi, 5 |
add eax, edi |
mov edi, [esi+0B0h] |
ror ecx, 2 |
lea eax, [eax+edi-70E44324h] |
mov esi, ecx |
mov edi, ecx |
or esi, edx |
and edi, edx |
and esi, ebx |
or esi, edi |
mov edi, eax |
add ebp, esi |
mov esi, [esp+4] |
rol edi, 5 |
add ebp, edi |
mov edi, [esi+0B4h] |
ror ebx, 2 |
lea ebp, [ebp+edi-70E44324h] |
mov esi, ebx |
mov edi, ebx |
or esi, ecx |
and edi, ecx |
and esi, eax |
or esi, edi |
mov edi, ebp |
add edx, esi |
mov esi, [esp+4] |
rol edi, 5 |
add edx, edi |
mov edi, [esi+0B8h] |
ror eax, 2 |
lea edx, [edx+edi-70E44324h] |
mov esi, eax |
mov edi, eax |
or esi, ebx |
and edi, ebx |
and esi, ebp |
or esi, edi |
mov edi, edx |
add ecx, esi |
mov esi, [esp+4] |
rol edi, 5 |
add ecx, edi |
mov edi, [esi+0BCh] |
ror ebp, 2 |
lea ecx, [ecx+edi-70E44324h] |
mov esi, ebp |
mov edi, ebp |
or esi, eax |
and edi, eax |
and esi, edx |
or esi, edi |
mov edi, ecx |
add ebx, esi |
mov esi, [esp+4] |
rol edi, 5 |
add ebx, edi |
mov edi, [esi+0C0h] |
ror edx, 2 |
lea ebx, [ebx+edi-70E44324h] |
mov esi, edx |
mov edi, edx |
or esi, ebp |
and edi, ebp |
and esi, ecx |
or esi, edi |
mov edi, ebx |
add eax, esi |
mov esi, [esp+4] |
rol edi, 5 |
add eax, edi |
mov edi, [esi+0C4h] |
ror ecx, 2 |
lea eax, [eax+edi-70E44324h] |
mov esi, ecx |
mov edi, ecx |
or esi, edx |
and edi, edx |
and esi, ebx |
or esi, edi |
mov edi, eax |
add ebp, esi |
mov esi, [esp+4] |
rol edi, 5 |
add ebp, edi |
mov edi, [esi+0C8h] |
ror ebx, 2 |
lea ebp, [ebp+edi-70E44324h] |
mov esi, ebx |
mov edi, ebx |
or esi, ecx |
and edi, ecx |
and esi, eax |
or esi, edi |
mov edi, ebp |
add edx, esi |
mov esi, [esp+4] |
rol edi, 5 |
add edx, edi |
mov edi, [esi+0CCh] |
ror eax, 2 |
lea edx, [edx+edi-70E44324h] |
mov esi, eax |
mov edi, eax |
or esi, ebx |
and edi, ebx |
and esi, ebp |
or esi, edi |
mov edi, edx |
add ecx, esi |
mov esi, [esp+4] |
rol edi, 5 |
add ecx, edi |
mov edi, [esi+0D0h] |
ror ebp, 2 |
lea ecx, [ecx+edi-70E44324h] |
mov esi, ebp |
mov edi, ebp |
or esi, eax |
and edi, eax |
and esi, edx |
or esi, edi |
mov edi, ecx |
add ebx, esi |
mov esi, [esp+4] |
rol edi, 5 |
add ebx, edi |
mov edi, [esi+0D4h] |
ror edx, 2 |
lea ebx, [ebx+edi-70E44324h] |
mov esi, edx |
mov edi, edx |
or esi, ebp |
and edi, ebp |
and esi, ecx |
or esi, edi |
mov edi, ebx |
add eax, esi |
mov esi, [esp+4] |
rol edi, 5 |
add eax, edi |
mov edi, [esi+0D8h] |
ror ecx, 2 |
lea eax, [eax+edi-70E44324h] |
mov esi, ecx |
mov edi, ecx |
or esi, edx |
and edi, edx |
and esi, ebx |
or esi, edi |
mov edi, eax |
add ebp, esi |
mov esi, [esp+4] |
rol edi, 5 |
add ebp, edi |
mov edi, [esi+0DCh] |
ror ebx, 2 |
lea ebp, [ebp+edi-70E44324h] |
mov esi, ebx |
mov edi, ebx |
or esi, ecx |
and edi, ecx |
and esi, eax |
or esi, edi |
mov edi, ebp |
add edx, esi |
mov esi, [esp+4] |
rol edi, 5 |
add edx, edi |
mov edi, [esi+0E0h] |
ror eax, 2 |
lea edx, [edx+edi-70E44324h] |
mov esi, eax |
mov edi, eax |
or esi, ebx |
and edi, ebx |
and esi, ebp |
or esi, edi |
mov edi, edx |
add ecx, esi |
mov esi, [esp+4] |
rol edi, 5 |
add ecx, edi |
mov edi, [esi+0E4h] |
ror ebp, 2 |
lea ecx, [ecx+edi-70E44324h] |
mov esi, ebp |
mov edi, ebp |
or esi, eax |
and edi, eax |
and esi, edx |
or esi, edi |
mov edi, ecx |
add ebx, esi |
mov esi, [esp+4] |
rol edi, 5 |
add ebx, edi |
mov edi, [esi+0E8h] |
ror edx, 2 |
lea ebx, [ebx+edi-70E44324h] |
mov esi, edx |
mov edi, edx |
or esi, ebp |
and edi, ebp |
and esi, ecx |
or esi, edi |
mov edi, ebx |
add eax, esi |
mov esi, [esp+4] |
rol edi, 5 |
add eax, edi |
mov edi, [esi+0ECh] |
ror ecx, 2 |
lea eax, [eax+edi-70E44324h] |
mov edi, ecx |
xor edi, edx |
xor edi, ebx |
add ebp, edi |
mov edi, [esi+0F0h] |
ror ebx, 2 |
lea ebp, [ebp+edi-359D3E2Ah] |
mov edi, eax |
rol edi, 5 |
add ebp, edi |
mov edi, ecx |
xor edi, ebx |
xor edi, eax |
add edx, edi |
mov edi, [esi+0F4h] |
ror eax, 2 |
lea edx, [edx+edi-359D3E2Ah] |
mov edi, ebp |
rol edi, 5 |
add edx, edi |
mov edi, ebx |
xor edi, eax |
xor edi, ebp |
add ecx, edi |
mov edi, [esi+0F8h] |
ror ebp, 2 |
lea ecx, [ecx+edi-359D3E2Ah] |
mov edi, edx |
rol edi, 5 |
add ecx, edi |
mov edi, eax |
xor edi, ebp |
xor edi, edx |
add ebx, edi |
mov edi, [esi+0FCh] |
ror edx, 2 |
lea ebx, [ebx+edi-359D3E2Ah] |
mov edi, ecx |
rol edi, 5 |
add ebx, edi |
mov edi, ebp |
xor edi, edx |
xor edi, ecx |
add eax, edi |
mov edi, [esi+100h] |
ror ecx, 2 |
lea eax, [eax+edi-359D3E2Ah] |
mov edi, ebx |
rol edi, 5 |
add eax, edi |
mov edi, edx |
xor edi, ecx |
xor edi, ebx |
add ebp, edi |
mov edi, [esi+104h] |
ror ebx, 2 |
lea ebp, [ebp+edi-359D3E2Ah] |
mov edi, eax |
rol edi, 5 |
add ebp, edi |
mov edi, ecx |
xor edi, ebx |
xor edi, eax |
add edx, edi |
mov edi, [esi+108h] |
ror eax, 2 |
lea edx, [edx+edi-359D3E2Ah] |
mov edi, ebp |
rol edi, 5 |
add edx, edi |
mov edi, ebx |
xor edi, eax |
xor edi, ebp |
add ecx, edi |
mov edi, [esi+10Ch] |
ror ebp, 2 |
lea ecx, [ecx+edi-359D3E2Ah] |
mov edi, edx |
rol edi, 5 |
add ecx, edi |
mov edi, eax |
xor edi, ebp |
xor edi, edx |
add ebx, edi |
mov edi, [esi+110h] |
ror edx, 2 |
lea ebx, [ebx+edi-359D3E2Ah] |
mov edi, ecx |
rol edi, 5 |
add ebx, edi |
mov edi, ebp |
xor edi, edx |
xor edi, ecx |
add eax, edi |
mov edi, [esi+114h] |
ror ecx, 2 |
lea eax, [eax+edi-359D3E2Ah] |
mov edi, ebx |
rol edi, 5 |
add eax, edi |
mov edi, edx |
xor edi, ecx |
xor edi, ebx |
add ebp, edi |
mov edi, [esi+118h] |
ror ebx, 2 |
lea ebp, [ebp+edi-359D3E2Ah] |
mov edi, eax |
rol edi, 5 |
add ebp, edi |
mov edi, ecx |
xor edi, ebx |
xor edi, eax |
add edx, edi |
mov edi, [esi+11Ch] |
ror eax, 2 |
lea edx, [edx+edi-359D3E2Ah] |
mov edi, ebp |
rol edi, 5 |
add edx, edi |
mov edi, ebx |
xor edi, eax |
xor edi, ebp |
add ecx, edi |
mov edi, [esi+120h] |
ror ebp, 2 |
lea ecx, [ecx+edi-359D3E2Ah] |
mov edi, edx |
rol edi, 5 |
add ecx, edi |
mov edi, eax |
xor edi, ebp |
xor edi, edx |
add ebx, edi |
mov edi, [esi+124h] |
ror edx, 2 |
lea ebx, [ebx+edi-359D3E2Ah] |
mov edi, ecx |
rol edi, 5 |
add ebx, edi |
mov edi, ebp |
xor edi, edx |
xor edi, ecx |
add eax, edi |
mov edi, [esi+128h] |
ror ecx, 2 |
lea eax, [eax+edi-359D3E2Ah] |
mov edi, ebx |
rol edi, 5 |
add eax, edi |
mov edi, edx |
xor edi, ecx |
xor edi, ebx |
add ebp, edi |
mov edi, [esi+12Ch] |
ror ebx, 2 |
lea ebp, [ebp+edi-359D3E2Ah] |
mov edi, eax |
rol edi, 5 |
add ebp, edi |
mov edi, ecx |
xor edi, ebx |
xor edi, eax |
add edx, edi |
mov edi, [esi+130h] |
ror eax, 2 |
lea edx, [edx+edi-359D3E2Ah] |
mov edi, ebp |
rol edi, 5 |
add edx, edi |
mov edi, ebx |
xor edi, eax |
xor edi, ebp |
add ecx, edi |
mov edi, [esi+134h] |
ror ebp, 2 |
lea ecx, [ecx+edi-359D3E2Ah] |
mov edi, edx |
rol edi, 5 |
add ecx, edi |
mov edi, eax |
xor edi, ebp |
xor edi, edx |
add ebx, edi |
mov edi, [esi+138h] |
ror edx, 2 |
lea ebx, [ebx+edi-359D3E2Ah] |
mov edi, ecx |
rol edi, 5 |
add ebx, edi |
mov edi, ebp |
xor edi, edx |
xor edi, ecx |
add eax, edi |
mov edi, [esi+13Ch] |
ror ecx, 2 |
lea eax, [eax+edi-359D3E2Ah] |
mov edi, ebx |
rol edi, 5 |
add eax, edi |
mov edi, [esp] |
add esp, 8 |
add [edi], eax |
mov eax, [edi+4] |
mov esi, [edi+8] |
add ebx, eax |
mov eax, [edi+0Ch] |
add ecx, esi |
mov esi, [edi+10h] |
mov [edi+4], ebx |
add edx, eax |
add ebp, esi |
mov [edi+8], ecx |
mov [edi+0Ch], edx |
mov [edi+10h], ebp |
pop ebp |
pop edi |
pop esi |
pop ebx |
end; |
end; |
{$ENDIF} // DEFINE OLD_SHA_NAME |
{$ENDIF} |
{$IFDEF THash_SHA256_asm} |
procedure SHA256Buffer(S, D: Pointer); |
asm |
push ebx |
push edi |
mov edi, eax |
push esi |
mov esi, edx |
mov eax, [esi] |
mov ebx, [esi+4] |
bswap eax |
mov ecx, [esi+8] |
mov edx, [esi+0Ch] |
bswap ebx |
bswap ecx |
bswap edx |
mov [edi], eax |
mov [edi+4], ebx |
mov [edi+8], ecx |
mov [edi+0Ch], edx |
mov eax, [esi+10h] |
mov ebx, [esi+14h] |
bswap eax |
mov ecx, [esi+18h] |
mov edx, [esi+1Ch] |
bswap ebx |
bswap ecx |
bswap edx |
mov [edi+10h], eax |
mov [edi+14h], ebx |
mov [edi+18h], ecx |
mov [edi+1Ch], edx |
mov eax, [esi+20h] |
mov ebx, [esi+24h] |
bswap eax |
mov ecx, [esi+28h] |
mov edx, [esi+2Ch] |
bswap ebx |
bswap ecx |
bswap edx |
mov [edi+20h], eax |
mov [edi+24h], ebx |
mov [edi+28h], ecx |
mov [edi+2Ch], edx |
mov eax, [esi+30h] |
mov ebx, [esi+34h] |
bswap eax |
mov ecx, [esi+38h] |
mov edx, [esi+3Ch] |
bswap ebx |
bswap ecx |
bswap edx |
mov [edi+30h], eax |
mov [edi+34h], ebx |
mov [edi+38h], ecx |
mov [edi+3Ch], edx |
pop esi |
pop edi |
pop ebx |
end; |
procedure THash_SHA256.DoTransform(Buffer: PUInt32Array); |
var |
W: array[0..63] of LongWord; |
begin |
// swap first 16 uint32 |
SHA256Buffer(@W, Buffer); |
asm |
push ebx |
push esi |
push edi |
push ebp |
mov eax, Self |
lea edi, [eax].THash_SHA256.FDigest |
lea esi, W |
mov eax, esp |
add esp, 0FFFFFFD4h |
and esp, 0FFFFFFC0h |
mov [esp+20h], esi |
mov [esp+24h], edi |
mov [esp+28h], eax |
mov edi, [esi] |
mov eax, [esi+4] |
mov edx, [esi+24h] |
mov ebx, [esi+38h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+4] |
add edx, eax |
mov eax, [esi+8] |
mov [esi+40h], edx |
mov edx, [esi+28h] |
mov ebx, [esi+3Ch] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+8] |
add edx, eax |
mov eax, [esi+0Ch] |
mov [esi+44h], edx |
mov edx, [esi+2Ch] |
mov ebx, [esi+40h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+0Ch] |
add edx, eax |
mov eax, [esi+10h] |
mov [esi+48h], edx |
mov edx, [esi+30h] |
mov ebx, [esi+44h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+10h] |
add edx, eax |
mov eax, [esi+14h] |
mov [esi+4Ch], edx |
mov edx, [esi+34h] |
mov ebx, [esi+48h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+14h] |
add edx, eax |
mov eax, [esi+18h] |
mov [esi+50h], edx |
mov edx, [esi+38h] |
mov ebx, [esi+4Ch] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+18h] |
add edx, eax |
mov eax, [esi+1Ch] |
mov [esi+54h], edx |
mov edx, [esi+3Ch] |
mov ebx, [esi+50h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+1Ch] |
add edx, eax |
mov eax, [esi+20h] |
mov [esi+58h], edx |
mov edx, [esi+40h] |
mov ebx, [esi+54h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+20h] |
add edx, eax |
mov eax, [esi+24h] |
mov [esi+5Ch], edx |
mov edx, [esi+44h] |
mov ebx, [esi+58h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+24h] |
add edx, eax |
mov eax, [esi+28h] |
mov [esi+60h], edx |
mov edx, [esi+48h] |
mov ebx, [esi+5Ch] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+28h] |
add edx, eax |
mov eax, [esi+2Ch] |
mov [esi+64h], edx |
mov edx, [esi+4Ch] |
mov ebx, [esi+60h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+2Ch] |
add edx, eax |
mov eax, [esi+30h] |
mov [esi+68h], edx |
mov edx, [esi+50h] |
mov ebx, [esi+64h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+30h] |
add edx, eax |
mov eax, [esi+34h] |
mov [esi+6Ch], edx |
mov edx, [esi+54h] |
mov ebx, [esi+68h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+34h] |
add edx, eax |
mov eax, [esi+38h] |
mov [esi+70h], edx |
mov edx, [esi+58h] |
mov ebx, [esi+6Ch] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+38h] |
add edx, eax |
mov eax, [esi+3Ch] |
mov [esi+74h], edx |
mov edx, [esi+5Ch] |
mov ebx, [esi+70h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+3Ch] |
add edx, eax |
mov eax, [esi+40h] |
mov [esi+78h], edx |
mov edx, [esi+60h] |
mov ebx, [esi+74h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+40h] |
add edx, eax |
mov eax, [esi+44h] |
mov [esi+7Ch], edx |
mov edx, [esi+64h] |
mov ebx, [esi+78h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+44h] |
add edx, eax |
mov eax, [esi+48h] |
mov [esi+80h], edx |
mov edx, [esi+68h] |
mov ebx, [esi+7Ch] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+48h] |
add edx, eax |
mov eax, [esi+4Ch] |
mov [esi+84h], edx |
mov edx, [esi+6Ch] |
mov ebx, [esi+80h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+4Ch] |
add edx, eax |
mov eax, [esi+50h] |
mov [esi+88h], edx |
mov edx, [esi+70h] |
mov ebx, [esi+84h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+50h] |
add edx, eax |
mov eax, [esi+54h] |
mov [esi+8Ch], edx |
mov edx, [esi+74h] |
mov ebx, [esi+88h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+54h] |
add edx, eax |
mov eax, [esi+58h] |
mov [esi+90h], edx |
mov edx, [esi+78h] |
mov ebx, [esi+8Ch] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+58h] |
add edx, eax |
mov eax, [esi+5Ch] |
mov [esi+94h], edx |
mov edx, [esi+7Ch] |
mov ebx, [esi+90h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+5Ch] |
add edx, eax |
mov eax, [esi+60h] |
mov [esi+98h], edx |
mov edx, [esi+80h] |
mov ebx, [esi+94h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+60h] |
add edx, eax |
mov eax, [esi+64h] |
mov [esi+9Ch], edx |
mov edx, [esi+84h] |
mov ebx, [esi+98h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+64h] |
add edx, eax |
mov eax, [esi+68h] |
mov [esi+0A0h], edx |
mov edx, [esi+88h] |
mov ebx, [esi+9Ch] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+68h] |
add edx, eax |
mov eax, [esi+6Ch] |
mov [esi+0A4h], edx |
mov edx, [esi+8Ch] |
mov ebx, [esi+0A0h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+6Ch] |
add edx, eax |
mov eax, [esi+70h] |
mov [esi+0A8h], edx |
mov edx, [esi+90h] |
mov ebx, [esi+0A4h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+70h] |
add edx, eax |
mov eax, [esi+74h] |
mov [esi+0ACh], edx |
mov edx, [esi+94h] |
mov ebx, [esi+0A8h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+74h] |
add edx, eax |
mov eax, [esi+78h] |
mov [esi+0B0h], edx |
mov edx, [esi+98h] |
mov ebx, [esi+0ACh] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+78h] |
add edx, eax |
mov eax, [esi+7Ch] |
mov [esi+0B4h], edx |
mov edx, [esi+9Ch] |
mov ebx, [esi+0B0h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+7Ch] |
add edx, eax |
mov eax, [esi+80h] |
mov [esi+0B8h], edx |
mov edx, [esi+0A0h] |
mov ebx, [esi+0B4h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+80h] |
add edx, eax |
mov eax, [esi+84h] |
mov [esi+0BCh], edx |
mov edx, [esi+0A4h] |
mov ebx, [esi+0B8h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+84h] |
add edx, eax |
mov eax, [esi+88h] |
mov [esi+0C0h], edx |
mov edx, [esi+0A8h] |
mov ebx, [esi+0BCh] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+88h] |
add edx, eax |
mov eax, [esi+8Ch] |
mov [esi+0C4h], edx |
mov edx, [esi+0ACh] |
mov ebx, [esi+0C0h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+8Ch] |
add edx, eax |
mov eax, [esi+90h] |
mov [esi+0C8h], edx |
mov edx, [esi+0B0h] |
mov ebx, [esi+0C4h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+90h] |
add edx, eax |
mov eax, [esi+94h] |
mov [esi+0CCh], edx |
mov edx, [esi+0B4h] |
mov ebx, [esi+0C8h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+94h] |
add edx, eax |
mov eax, [esi+98h] |
mov [esi+0D0h], edx |
mov edx, [esi+0B8h] |
mov ebx, [esi+0CCh] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+98h] |
add edx, eax |
mov eax, [esi+9Ch] |
mov [esi+0D4h], edx |
mov edx, [esi+0BCh] |
mov ebx, [esi+0D0h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+9Ch] |
add edx, eax |
mov eax, [esi+0A0h] |
mov [esi+0D8h], edx |
mov edx, [esi+0C0h] |
mov ebx, [esi+0D4h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+0A0h] |
add edx, eax |
mov eax, [esi+0A4h] |
mov [esi+0DCh], edx |
mov edx, [esi+0C4h] |
mov ebx, [esi+0D8h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+0A4h] |
add edx, eax |
mov eax, [esi+0A8h] |
mov [esi+0E0h], edx |
mov edx, [esi+0C8h] |
mov ebx, [esi+0DCh] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+0A8h] |
add edx, eax |
mov eax, [esi+0ACh] |
mov [esi+0E4h], edx |
mov edx, [esi+0CCh] |
mov ebx, [esi+0E0h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+0ACh] |
add edx, eax |
mov eax, [esi+0B0h] |
mov [esi+0E8h], edx |
mov edx, [esi+0D0h] |
mov ebx, [esi+0E4h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+0B0h] |
add edx, eax |
mov eax, [esi+0B4h] |
mov [esi+0ECh], edx |
mov edx, [esi+0D4h] |
mov ebx, [esi+0E8h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+0B4h] |
add edx, eax |
mov eax, [esi+0B8h] |
mov [esi+0F0h], edx |
mov edx, [esi+0D8h] |
mov ebx, [esi+0ECh] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+0B8h] |
add edx, eax |
mov eax, [esi+0BCh] |
mov [esi+0F4h], edx |
mov edx, [esi+0DCh] |
mov ebx, [esi+0F0h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+0BCh] |
add edx, eax |
mov eax, [esi+0C0h] |
mov [esi+0F8h], edx |
mov edx, [esi+0E0h] |
mov ebx, [esi+0F4h] |
mov ecx, eax |
ror ecx, 7 |
shr eax, 3 |
mov ebp, ebx |
shr ebx, 0Ah |
xor eax, ecx |
ror ecx, 0Bh |
rol ebp, 0Fh |
xor eax, ecx |
xor ebx, ebp |
ror ebp, 2 |
xor ebx, ebp |
add edx, edi |
add eax, ebx |
mov edi, [esi+0C0h] |
add edx, eax |
mov eax, [esi+0C4h] |
mov [esi+0FCh], edx |
mov edi, [esp+24h] |
mov eax, [edi] |
mov ebx, [edi+4] |
mov ecx, [edi+8] |
mov edx, [edi+0Ch] |
mov [esp], eax |
mov [esp+4], ebx |
mov [esp+8], ecx |
mov [esp+0Ch], edx |
mov eax, [edi+10h] |
mov ebx, [edi+14h] |
mov ecx, [edi+18h] |
mov edx, [edi+1Ch] |
mov [esp+10h], eax |
mov [esp+14h], ebx |
mov [esp+18h], ecx |
mov [esp+1Ch], edx |
mov ebp, eax |
mov edi, eax |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ebx |
xor ebp, ecx |
and ebp, eax |
lea edx, [edi+edx+428A2F98h] |
mov edi, [esp+4] |
xor ebp, ecx |
add edx, [esi] |
add edx, ebp |
mov ebp, [esp+8] |
mov eax, edi |
and edi, ebp |
or eax, ebp |
mov ebp, [esp] |
and eax, ebp |
ror ebp, 2 |
or eax, edi |
mov edi, ebp |
rol edi, 0Ch |
add eax, edx |
xor ebp, edi |
add edx, [esp+0Ch] |
rol edi, 9 |
xor ebp, edi |
mov [esp+0Ch], edx |
add eax, ebp |
mov [esp+1Ch], eax |
mov eax, [esp+10h] |
mov ebp, edx |
mov edi, edx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, eax |
xor ebp, ebx |
and ebp, edx |
lea ecx, [edi+ecx+71374491h] |
mov edi, [esp] |
xor ebp, ebx |
add ecx, [esi+4] |
add ecx, ebp |
mov ebp, [esp+4] |
mov edx, edi |
and edi, ebp |
or edx, ebp |
mov ebp, [esp+1Ch] |
and edx, ebp |
ror ebp, 2 |
or edx, edi |
mov edi, ebp |
rol edi, 0Ch |
add edx, ecx |
xor ebp, edi |
add ecx, [esp+8] |
rol edi, 9 |
xor ebp, edi |
mov [esp+8], ecx |
add edx, ebp |
mov [esp+18h], edx |
mov edx, [esp+0Ch] |
mov ebp, ecx |
mov edi, ecx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, edx |
xor ebp, eax |
and ebp, ecx |
lea ebx, [edi+ebx-4A3F0431h] |
mov edi, [esp+1Ch] |
xor ebp, eax |
add ebx, [esi+8] |
add ebx, ebp |
mov ebp, [esp] |
mov ecx, edi |
and edi, ebp |
or ecx, ebp |
mov ebp, [esp+18h] |
and ecx, ebp |
ror ebp, 2 |
or ecx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ecx, ebx |
xor ebp, edi |
add ebx, [esp+4] |
rol edi, 9 |
xor ebp, edi |
mov [esp+4], ebx |
add ecx, ebp |
mov [esp+14h], ecx |
mov ecx, [esp+8] |
mov ebp, ebx |
mov edi, ebx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ecx |
xor ebp, edx |
and ebp, ebx |
lea eax, [edi+eax-164A245Bh] |
mov edi, [esp+18h] |
xor ebp, edx |
add eax, [esi+0Ch] |
add eax, ebp |
mov ebp, [esp+1Ch] |
mov ebx, edi |
and edi, ebp |
or ebx, ebp |
mov ebp, [esp+14h] |
and ebx, ebp |
ror ebp, 2 |
or ebx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ebx, eax |
xor ebp, edi |
add eax, [esp] |
rol edi, 9 |
xor ebp, edi |
mov [esp], eax |
add ebx, ebp |
mov [esp+10h], ebx |
mov ebx, [esp+4] |
mov ebp, eax |
mov edi, eax |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ebx |
xor ebp, ecx |
and ebp, eax |
lea edx, [edi+edx+3956C25Bh] |
mov edi, [esp+14h] |
xor ebp, ecx |
add edx, [esi+10h] |
add edx, ebp |
mov ebp, [esp+18h] |
mov eax, edi |
and edi, ebp |
or eax, ebp |
mov ebp, [esp+10h] |
and eax, ebp |
ror ebp, 2 |
or eax, edi |
mov edi, ebp |
rol edi, 0Ch |
add eax, edx |
xor ebp, edi |
add edx, [esp+1Ch] |
rol edi, 9 |
xor ebp, edi |
mov [esp+1Ch], edx |
add eax, ebp |
mov [esp+0Ch], eax |
mov eax, [esp] |
mov ebp, edx |
mov edi, edx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, eax |
xor ebp, ebx |
and ebp, edx |
lea ecx, [edi+ecx+59F111F1h] |
mov edi, [esp+10h] |
xor ebp, ebx |
add ecx, [esi+14h] |
add ecx, ebp |
mov ebp, [esp+14h] |
mov edx, edi |
and edi, ebp |
or edx, ebp |
mov ebp, [esp+0Ch] |
and edx, ebp |
ror ebp, 2 |
or edx, edi |
mov edi, ebp |
rol edi, 0Ch |
add edx, ecx |
xor ebp, edi |
add ecx, [esp+18h] |
rol edi, 9 |
xor ebp, edi |
mov [esp+18h], ecx |
add edx, ebp |
mov [esp+8], edx |
mov edx, [esp+1Ch] |
mov ebp, ecx |
mov edi, ecx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, edx |
xor ebp, eax |
and ebp, ecx |
lea ebx, [edi+ebx-6DC07D5Ch] |
mov edi, [esp+0Ch] |
xor ebp, eax |
add ebx, [esi+18h] |
add ebx, ebp |
mov ebp, [esp+10h] |
mov ecx, edi |
and edi, ebp |
or ecx, ebp |
mov ebp, [esp+8] |
and ecx, ebp |
ror ebp, 2 |
or ecx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ecx, ebx |
xor ebp, edi |
add ebx, [esp+14h] |
rol edi, 9 |
xor ebp, edi |
mov [esp+14h], ebx |
add ecx, ebp |
mov [esp+4], ecx |
mov ecx, [esp+18h] |
mov ebp, ebx |
mov edi, ebx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ecx |
xor ebp, edx |
and ebp, ebx |
lea eax, [edi+eax-54E3A12Bh] |
mov edi, [esp+8] |
xor ebp, edx |
add eax, [esi+1Ch] |
add eax, ebp |
mov ebp, [esp+0Ch] |
mov ebx, edi |
and edi, ebp |
or ebx, ebp |
mov ebp, [esp+4] |
and ebx, ebp |
ror ebp, 2 |
or ebx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ebx, eax |
xor ebp, edi |
add eax, [esp+10h] |
rol edi, 9 |
xor ebp, edi |
mov [esp+10h], eax |
add ebx, ebp |
mov [esp], ebx |
mov ebx, [esp+14h] |
mov ebp, eax |
mov edi, eax |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ebx |
xor ebp, ecx |
and ebp, eax |
lea edx, [edi+edx-27F85568h] |
mov edi, [esp+4] |
xor ebp, ecx |
add edx, [esi+20h] |
add edx, ebp |
mov ebp, [esp+8] |
mov eax, edi |
and edi, ebp |
or eax, ebp |
mov ebp, [esp] |
and eax, ebp |
ror ebp, 2 |
or eax, edi |
mov edi, ebp |
rol edi, 0Ch |
add eax, edx |
xor ebp, edi |
add edx, [esp+0Ch] |
rol edi, 9 |
xor ebp, edi |
mov [esp+0Ch], edx |
add eax, ebp |
mov [esp+1Ch], eax |
mov eax, [esp+10h] |
mov ebp, edx |
mov edi, edx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, eax |
xor ebp, ebx |
and ebp, edx |
lea ecx, [edi+ecx+12835B01h] |
mov edi, [esp] |
xor ebp, ebx |
add ecx, [esi+24h] |
add ecx, ebp |
mov ebp, [esp+4] |
mov edx, edi |
and edi, ebp |
or edx, ebp |
mov ebp, [esp+1Ch] |
and edx, ebp |
ror ebp, 2 |
or edx, edi |
mov edi, ebp |
rol edi, 0Ch |
add edx, ecx |
xor ebp, edi |
add ecx, [esp+8] |
rol edi, 9 |
xor ebp, edi |
mov [esp+8], ecx |
add edx, ebp |
mov [esp+18h], edx |
mov edx, [esp+0Ch] |
mov ebp, ecx |
mov edi, ecx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, edx |
xor ebp, eax |
and ebp, ecx |
lea ebx, [edi+ebx+243185BEh] |
mov edi, [esp+1Ch] |
xor ebp, eax |
add ebx, [esi+28h] |
add ebx, ebp |
mov ebp, [esp] |
mov ecx, edi |
and edi, ebp |
or ecx, ebp |
mov ebp, [esp+18h] |
and ecx, ebp |
ror ebp, 2 |
or ecx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ecx, ebx |
xor ebp, edi |
add ebx, [esp+4] |
rol edi, 9 |
xor ebp, edi |
mov [esp+4], ebx |
add ecx, ebp |
mov [esp+14h], ecx |
mov ecx, [esp+8] |
mov ebp, ebx |
mov edi, ebx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ecx |
xor ebp, edx |
and ebp, ebx |
lea eax, [edi+eax+550C7DC3h] |
mov edi, [esp+18h] |
xor ebp, edx |
add eax, [esi+2Ch] |
add eax, ebp |
mov ebp, [esp+1Ch] |
mov ebx, edi |
and edi, ebp |
or ebx, ebp |
mov ebp, [esp+14h] |
and ebx, ebp |
ror ebp, 2 |
or ebx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ebx, eax |
xor ebp, edi |
add eax, [esp] |
rol edi, 9 |
xor ebp, edi |
mov [esp], eax |
add ebx, ebp |
mov [esp+10h], ebx |
mov ebx, [esp+4] |
mov ebp, eax |
mov edi, eax |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ebx |
xor ebp, ecx |
and ebp, eax |
lea edx, [edi+edx+72BE5D74h] |
mov edi, [esp+14h] |
xor ebp, ecx |
add edx, [esi+30h] |
add edx, ebp |
mov ebp, [esp+18h] |
mov eax, edi |
and edi, ebp |
or eax, ebp |
mov ebp, [esp+10h] |
and eax, ebp |
ror ebp, 2 |
or eax, edi |
mov edi, ebp |
rol edi, 0Ch |
add eax, edx |
xor ebp, edi |
add edx, [esp+1Ch] |
rol edi, 9 |
xor ebp, edi |
mov [esp+1Ch], edx |
add eax, ebp |
mov [esp+0Ch], eax |
mov eax, [esp] |
mov ebp, edx |
mov edi, edx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, eax |
xor ebp, ebx |
and ebp, edx |
lea ecx, [edi+ecx-7F214E02h] |
mov edi, [esp+10h] |
xor ebp, ebx |
add ecx, [esi+34h] |
add ecx, ebp |
mov ebp, [esp+14h] |
mov edx, edi |
and edi, ebp |
or edx, ebp |
mov ebp, [esp+0Ch] |
and edx, ebp |
ror ebp, 2 |
or edx, edi |
mov edi, ebp |
rol edi, 0Ch |
add edx, ecx |
xor ebp, edi |
add ecx, [esp+18h] |
rol edi, 9 |
xor ebp, edi |
mov [esp+18h], ecx |
add edx, ebp |
mov [esp+8], edx |
mov edx, [esp+1Ch] |
mov ebp, ecx |
mov edi, ecx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, edx |
xor ebp, eax |
and ebp, ecx |
lea ebx, [edi+ebx-6423F959h] |
mov edi, [esp+0Ch] |
xor ebp, eax |
add ebx, [esi+38h] |
add ebx, ebp |
mov ebp, [esp+10h] |
mov ecx, edi |
and edi, ebp |
or ecx, ebp |
mov ebp, [esp+8] |
and ecx, ebp |
ror ebp, 2 |
or ecx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ecx, ebx |
xor ebp, edi |
add ebx, [esp+14h] |
rol edi, 9 |
xor ebp, edi |
mov [esp+14h], ebx |
add ecx, ebp |
mov [esp+4], ecx |
mov ecx, [esp+18h] |
mov ebp, ebx |
mov edi, ebx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ecx |
xor ebp, edx |
and ebp, ebx |
lea eax, [edi+eax-3E640E8Ch] |
mov edi, [esp+8] |
xor ebp, edx |
add eax, [esi+3Ch] |
add eax, ebp |
mov ebp, [esp+0Ch] |
mov ebx, edi |
and edi, ebp |
or ebx, ebp |
mov ebp, [esp+4] |
and ebx, ebp |
ror ebp, 2 |
or ebx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ebx, eax |
xor ebp, edi |
add eax, [esp+10h] |
rol edi, 9 |
xor ebp, edi |
mov [esp+10h], eax |
add ebx, ebp |
mov [esp], ebx |
mov ebx, [esp+14h] |
mov ebp, eax |
mov edi, eax |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ebx |
xor ebp, ecx |
and ebp, eax |
lea edx, [edi+edx-1B64963Fh] |
mov edi, [esp+4] |
xor ebp, ecx |
add edx, [esi+40h] |
add edx, ebp |
mov ebp, [esp+8] |
mov eax, edi |
and edi, ebp |
or eax, ebp |
mov ebp, [esp] |
and eax, ebp |
ror ebp, 2 |
or eax, edi |
mov edi, ebp |
rol edi, 0Ch |
add eax, edx |
xor ebp, edi |
add edx, [esp+0Ch] |
rol edi, 9 |
xor ebp, edi |
mov [esp+0Ch], edx |
add eax, ebp |
mov [esp+1Ch], eax |
mov eax, [esp+10h] |
mov ebp, edx |
mov edi, edx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, eax |
xor ebp, ebx |
and ebp, edx |
lea ecx, [edi+ecx-1041B87Ah] |
mov edi, [esp] |
xor ebp, ebx |
add ecx, [esi+44h] |
add ecx, ebp |
mov ebp, [esp+4] |
mov edx, edi |
and edi, ebp |
or edx, ebp |
mov ebp, [esp+1Ch] |
and edx, ebp |
ror ebp, 2 |
or edx, edi |
mov edi, ebp |
rol edi, 0Ch |
add edx, ecx |
xor ebp, edi |
add ecx, [esp+8] |
rol edi, 9 |
xor ebp, edi |
mov [esp+8], ecx |
add edx, ebp |
mov [esp+18h], edx |
mov edx, [esp+0Ch] |
mov ebp, ecx |
mov edi, ecx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, edx |
xor ebp, eax |
and ebp, ecx |
lea ebx, [edi+ebx+0FC19DC6h] |
mov edi, [esp+1Ch] |
xor ebp, eax |
add ebx, [esi+48h] |
add ebx, ebp |
mov ebp, [esp] |
mov ecx, edi |
and edi, ebp |
or ecx, ebp |
mov ebp, [esp+18h] |
and ecx, ebp |
ror ebp, 2 |
or ecx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ecx, ebx |
xor ebp, edi |
add ebx, [esp+4] |
rol edi, 9 |
xor ebp, edi |
mov [esp+4], ebx |
add ecx, ebp |
mov [esp+14h], ecx |
mov ecx, [esp+8] |
mov ebp, ebx |
mov edi, ebx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ecx |
xor ebp, edx |
and ebp, ebx |
lea eax, [edi+eax+240CA1CCh] |
mov edi, [esp+18h] |
xor ebp, edx |
add eax, [esi+4Ch] |
add eax, ebp |
mov ebp, [esp+1Ch] |
mov ebx, edi |
and edi, ebp |
or ebx, ebp |
mov ebp, [esp+14h] |
and ebx, ebp |
ror ebp, 2 |
or ebx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ebx, eax |
xor ebp, edi |
add eax, [esp] |
rol edi, 9 |
xor ebp, edi |
mov [esp], eax |
add ebx, ebp |
mov [esp+10h], ebx |
mov ebx, [esp+4] |
mov ebp, eax |
mov edi, eax |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ebx |
xor ebp, ecx |
and ebp, eax |
lea edx, [edi+edx+2DE92C6Fh] |
mov edi, [esp+14h] |
xor ebp, ecx |
add edx, [esi+50h] |
add edx, ebp |
mov ebp, [esp+18h] |
mov eax, edi |
and edi, ebp |
or eax, ebp |
mov ebp, [esp+10h] |
and eax, ebp |
ror ebp, 2 |
or eax, edi |
mov edi, ebp |
rol edi, 0Ch |
add eax, edx |
xor ebp, edi |
add edx, [esp+1Ch] |
rol edi, 9 |
xor ebp, edi |
mov [esp+1Ch], edx |
add eax, ebp |
mov [esp+0Ch], eax |
mov eax, [esp] |
mov ebp, edx |
mov edi, edx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, eax |
xor ebp, ebx |
and ebp, edx |
lea ecx, [edi+ecx+4A7484AAh] |
mov edi, [esp+10h] |
xor ebp, ebx |
add ecx, [esi+54h] |
add ecx, ebp |
mov ebp, [esp+14h] |
mov edx, edi |
and edi, ebp |
or edx, ebp |
mov ebp, [esp+0Ch] |
and edx, ebp |
ror ebp, 2 |
or edx, edi |
mov edi, ebp |
rol edi, 0Ch |
add edx, ecx |
xor ebp, edi |
add ecx, [esp+18h] |
rol edi, 9 |
xor ebp, edi |
mov [esp+18h], ecx |
add edx, ebp |
mov [esp+8], edx |
mov edx, [esp+1Ch] |
mov ebp, ecx |
mov edi, ecx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, edx |
xor ebp, eax |
and ebp, ecx |
lea ebx, [edi+ebx+5CB0A9DCh] |
mov edi, [esp+0Ch] |
xor ebp, eax |
add ebx, [esi+58h] |
add ebx, ebp |
mov ebp, [esp+10h] |
mov ecx, edi |
and edi, ebp |
or ecx, ebp |
mov ebp, [esp+8] |
and ecx, ebp |
ror ebp, 2 |
or ecx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ecx, ebx |
xor ebp, edi |
add ebx, [esp+14h] |
rol edi, 9 |
xor ebp, edi |
mov [esp+14h], ebx |
add ecx, ebp |
mov [esp+4], ecx |
mov ecx, [esp+18h] |
mov ebp, ebx |
mov edi, ebx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ecx |
xor ebp, edx |
and ebp, ebx |
lea eax, [edi+eax+76F988DAh] |
mov edi, [esp+8] |
xor ebp, edx |
add eax, [esi+5Ch] |
add eax, ebp |
mov ebp, [esp+0Ch] |
mov ebx, edi |
and edi, ebp |
or ebx, ebp |
mov ebp, [esp+4] |
and ebx, ebp |
ror ebp, 2 |
or ebx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ebx, eax |
xor ebp, edi |
add eax, [esp+10h] |
rol edi, 9 |
xor ebp, edi |
mov [esp+10h], eax |
add ebx, ebp |
mov [esp], ebx |
mov ebx, [esp+14h] |
mov ebp, eax |
mov edi, eax |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ebx |
xor ebp, ecx |
and ebp, eax |
lea edx, [edi+edx-67C1AEAEh] |
mov edi, [esp+4] |
xor ebp, ecx |
add edx, [esi+60h] |
add edx, ebp |
mov ebp, [esp+8] |
mov eax, edi |
and edi, ebp |
or eax, ebp |
mov ebp, [esp] |
and eax, ebp |
ror ebp, 2 |
or eax, edi |
mov edi, ebp |
rol edi, 0Ch |
add eax, edx |
xor ebp, edi |
add edx, [esp+0Ch] |
rol edi, 9 |
xor ebp, edi |
mov [esp+0Ch], edx |
add eax, ebp |
mov [esp+1Ch], eax |
mov eax, [esp+10h] |
mov ebp, edx |
mov edi, edx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, eax |
xor ebp, ebx |
and ebp, edx |
lea ecx, [edi+ecx-57CE3993h] |
mov edi, [esp] |
xor ebp, ebx |
add ecx, [esi+64h] |
add ecx, ebp |
mov ebp, [esp+4] |
mov edx, edi |
and edi, ebp |
or edx, ebp |
mov ebp, [esp+1Ch] |
and edx, ebp |
ror ebp, 2 |
or edx, edi |
mov edi, ebp |
rol edi, 0Ch |
add edx, ecx |
xor ebp, edi |
add ecx, [esp+8] |
rol edi, 9 |
xor ebp, edi |
mov [esp+8], ecx |
add edx, ebp |
mov [esp+18h], edx |
mov edx, [esp+0Ch] |
mov ebp, ecx |
mov edi, ecx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, edx |
xor ebp, eax |
and ebp, ecx |
lea ebx, [edi+ebx-4FFCD838h] |
mov edi, [esp+1Ch] |
xor ebp, eax |
add ebx, [esi+68h] |
add ebx, ebp |
mov ebp, [esp] |
mov ecx, edi |
and edi, ebp |
or ecx, ebp |
mov ebp, [esp+18h] |
and ecx, ebp |
ror ebp, 2 |
or ecx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ecx, ebx |
xor ebp, edi |
add ebx, [esp+4] |
rol edi, 9 |
xor ebp, edi |
mov [esp+4], ebx |
add ecx, ebp |
mov [esp+14h], ecx |
mov ecx, [esp+8] |
mov ebp, ebx |
mov edi, ebx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ecx |
xor ebp, edx |
and ebp, ebx |
lea eax, [edi+eax-40A68039h] |
mov edi, [esp+18h] |
xor ebp, edx |
add eax, [esi+6Ch] |
add eax, ebp |
mov ebp, [esp+1Ch] |
mov ebx, edi |
and edi, ebp |
or ebx, ebp |
mov ebp, [esp+14h] |
and ebx, ebp |
ror ebp, 2 |
or ebx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ebx, eax |
xor ebp, edi |
add eax, [esp] |
rol edi, 9 |
xor ebp, edi |
mov [esp], eax |
add ebx, ebp |
mov [esp+10h], ebx |
mov ebx, [esp+4] |
mov ebp, eax |
mov edi, eax |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ebx |
xor ebp, ecx |
and ebp, eax |
lea edx, [edi+edx-391FF40Dh] |
mov edi, [esp+14h] |
xor ebp, ecx |
add edx, [esi+70h] |
add edx, ebp |
mov ebp, [esp+18h] |
mov eax, edi |
and edi, ebp |
or eax, ebp |
mov ebp, [esp+10h] |
and eax, ebp |
ror ebp, 2 |
or eax, edi |
mov edi, ebp |
rol edi, 0Ch |
add eax, edx |
xor ebp, edi |
add edx, [esp+1Ch] |
rol edi, 9 |
xor ebp, edi |
mov [esp+1Ch], edx |
add eax, ebp |
mov [esp+0Ch], eax |
mov eax, [esp] |
mov ebp, edx |
mov edi, edx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, eax |
xor ebp, ebx |
and ebp, edx |
lea ecx, [edi+ecx-2A586EB9h] |
mov edi, [esp+10h] |
xor ebp, ebx |
add ecx, [esi+74h] |
add ecx, ebp |
mov ebp, [esp+14h] |
mov edx, edi |
and edi, ebp |
or edx, ebp |
mov ebp, [esp+0Ch] |
and edx, ebp |
ror ebp, 2 |
or edx, edi |
mov edi, ebp |
rol edi, 0Ch |
add edx, ecx |
xor ebp, edi |
add ecx, [esp+18h] |
rol edi, 9 |
xor ebp, edi |
mov [esp+18h], ecx |
add edx, ebp |
mov [esp+8], edx |
mov edx, [esp+1Ch] |
mov ebp, ecx |
mov edi, ecx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, edx |
xor ebp, eax |
and ebp, ecx |
lea ebx, [edi+ebx+6CA6351h] |
mov edi, [esp+0Ch] |
xor ebp, eax |
add ebx, [esi+78h] |
add ebx, ebp |
mov ebp, [esp+10h] |
mov ecx, edi |
and edi, ebp |
or ecx, ebp |
mov ebp, [esp+8] |
and ecx, ebp |
ror ebp, 2 |
or ecx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ecx, ebx |
xor ebp, edi |
add ebx, [esp+14h] |
rol edi, 9 |
xor ebp, edi |
mov [esp+14h], ebx |
add ecx, ebp |
mov [esp+4], ecx |
mov ecx, [esp+18h] |
mov ebp, ebx |
mov edi, ebx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ecx |
xor ebp, edx |
and ebp, ebx |
lea eax, [edi+eax+14292967h] |
mov edi, [esp+8] |
xor ebp, edx |
add eax, [esi+7Ch] |
add eax, ebp |
mov ebp, [esp+0Ch] |
mov ebx, edi |
and edi, ebp |
or ebx, ebp |
mov ebp, [esp+4] |
and ebx, ebp |
ror ebp, 2 |
or ebx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ebx, eax |
xor ebp, edi |
add eax, [esp+10h] |
rol edi, 9 |
xor ebp, edi |
mov [esp+10h], eax |
add ebx, ebp |
mov [esp], ebx |
mov ebx, [esp+14h] |
mov ebp, eax |
mov edi, eax |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ebx |
xor ebp, ecx |
and ebp, eax |
lea edx, [edi+edx+27B70A85h] |
mov edi, [esp+4] |
xor ebp, ecx |
add edx, [esi+80h] |
add edx, ebp |
mov ebp, [esp+8] |
mov eax, edi |
and edi, ebp |
or eax, ebp |
mov ebp, [esp] |
and eax, ebp |
ror ebp, 2 |
or eax, edi |
mov edi, ebp |
rol edi, 0Ch |
add eax, edx |
xor ebp, edi |
add edx, [esp+0Ch] |
rol edi, 9 |
xor ebp, edi |
mov [esp+0Ch], edx |
add eax, ebp |
mov [esp+1Ch], eax |
mov eax, [esp+10h] |
mov ebp, edx |
mov edi, edx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, eax |
xor ebp, ebx |
and ebp, edx |
lea ecx, [edi+ecx+2E1B2138h] |
mov edi, [esp] |
xor ebp, ebx |
add ecx, [esi+84h] |
add ecx, ebp |
mov ebp, [esp+4] |
mov edx, edi |
and edi, ebp |
or edx, ebp |
mov ebp, [esp+1Ch] |
and edx, ebp |
ror ebp, 2 |
or edx, edi |
mov edi, ebp |
rol edi, 0Ch |
add edx, ecx |
xor ebp, edi |
add ecx, [esp+8] |
rol edi, 9 |
xor ebp, edi |
mov [esp+8], ecx |
add edx, ebp |
mov [esp+18h], edx |
mov edx, [esp+0Ch] |
mov ebp, ecx |
mov edi, ecx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, edx |
xor ebp, eax |
and ebp, ecx |
lea ebx, [edi+ebx+4D2C6DFCh] |
mov edi, [esp+1Ch] |
xor ebp, eax |
add ebx, [esi+88h] |
add ebx, ebp |
mov ebp, [esp] |
mov ecx, edi |
and edi, ebp |
or ecx, ebp |
mov ebp, [esp+18h] |
and ecx, ebp |
ror ebp, 2 |
or ecx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ecx, ebx |
xor ebp, edi |
add ebx, [esp+4] |
rol edi, 9 |
xor ebp, edi |
mov [esp+4], ebx |
add ecx, ebp |
mov [esp+14h], ecx |
mov ecx, [esp+8] |
mov ebp, ebx |
mov edi, ebx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ecx |
xor ebp, edx |
and ebp, ebx |
lea eax, [edi+eax+53380D13h] |
mov edi, [esp+18h] |
xor ebp, edx |
add eax, [esi+8Ch] |
add eax, ebp |
mov ebp, [esp+1Ch] |
mov ebx, edi |
and edi, ebp |
or ebx, ebp |
mov ebp, [esp+14h] |
and ebx, ebp |
ror ebp, 2 |
or ebx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ebx, eax |
xor ebp, edi |
add eax, [esp] |
rol edi, 9 |
xor ebp, edi |
mov [esp], eax |
add ebx, ebp |
mov [esp+10h], ebx |
mov ebx, [esp+4] |
mov ebp, eax |
mov edi, eax |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ebx |
xor ebp, ecx |
and ebp, eax |
lea edx, [edi+edx+650A7354h] |
mov edi, [esp+14h] |
xor ebp, ecx |
add edx, [esi+90h] |
add edx, ebp |
mov ebp, [esp+18h] |
mov eax, edi |
and edi, ebp |
or eax, ebp |
mov ebp, [esp+10h] |
and eax, ebp |
ror ebp, 2 |
or eax, edi |
mov edi, ebp |
rol edi, 0Ch |
add eax, edx |
xor ebp, edi |
add edx, [esp+1Ch] |
rol edi, 9 |
xor ebp, edi |
mov [esp+1Ch], edx |
add eax, ebp |
mov [esp+0Ch], eax |
mov eax, [esp] |
mov ebp, edx |
mov edi, edx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, eax |
xor ebp, ebx |
and ebp, edx |
lea ecx, [edi+ecx+766A0ABBh] |
mov edi, [esp+10h] |
xor ebp, ebx |
add ecx, [esi+94h] |
add ecx, ebp |
mov ebp, [esp+14h] |
mov edx, edi |
and edi, ebp |
or edx, ebp |
mov ebp, [esp+0Ch] |
and edx, ebp |
ror ebp, 2 |
or edx, edi |
mov edi, ebp |
rol edi, 0Ch |
add edx, ecx |
xor ebp, edi |
add ecx, [esp+18h] |
rol edi, 9 |
xor ebp, edi |
mov [esp+18h], ecx |
add edx, ebp |
mov [esp+8], edx |
mov edx, [esp+1Ch] |
mov ebp, ecx |
mov edi, ecx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, edx |
xor ebp, eax |
and ebp, ecx |
lea ebx, [edi+ebx-7E3D36D2h] |
mov edi, [esp+0Ch] |
xor ebp, eax |
add ebx, [esi+98h] |
add ebx, ebp |
mov ebp, [esp+10h] |
mov ecx, edi |
and edi, ebp |
or ecx, ebp |
mov ebp, [esp+8] |
and ecx, ebp |
ror ebp, 2 |
or ecx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ecx, ebx |
xor ebp, edi |
add ebx, [esp+14h] |
rol edi, 9 |
xor ebp, edi |
mov [esp+14h], ebx |
add ecx, ebp |
mov [esp+4], ecx |
mov ecx, [esp+18h] |
mov ebp, ebx |
mov edi, ebx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ecx |
xor ebp, edx |
and ebp, ebx |
lea eax, [edi+eax-6D8DD37Bh] |
mov edi, [esp+8] |
xor ebp, edx |
add eax, [esi+9Ch] |
add eax, ebp |
mov ebp, [esp+0Ch] |
mov ebx, edi |
and edi, ebp |
or ebx, ebp |
mov ebp, [esp+4] |
and ebx, ebp |
ror ebp, 2 |
or ebx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ebx, eax |
xor ebp, edi |
add eax, [esp+10h] |
rol edi, 9 |
xor ebp, edi |
mov [esp+10h], eax |
add ebx, ebp |
mov [esp], ebx |
mov ebx, [esp+14h] |
mov ebp, eax |
mov edi, eax |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ebx |
xor ebp, ecx |
and ebp, eax |
lea edx, [edi+edx-5D40175Fh] |
mov edi, [esp+4] |
xor ebp, ecx |
add edx, [esi+0A0h] |
add edx, ebp |
mov ebp, [esp+8] |
mov eax, edi |
and edi, ebp |
or eax, ebp |
mov ebp, [esp] |
and eax, ebp |
ror ebp, 2 |
or eax, edi |
mov edi, ebp |
rol edi, 0Ch |
add eax, edx |
xor ebp, edi |
add edx, [esp+0Ch] |
rol edi, 9 |
xor ebp, edi |
mov [esp+0Ch], edx |
add eax, ebp |
mov [esp+1Ch], eax |
mov eax, [esp+10h] |
mov ebp, edx |
mov edi, edx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, eax |
xor ebp, ebx |
and ebp, edx |
lea ecx, [edi+ecx-57E599B5h] |
mov edi, [esp] |
xor ebp, ebx |
add ecx, [esi+0A4h] |
add ecx, ebp |
mov ebp, [esp+4] |
mov edx, edi |
and edi, ebp |
or edx, ebp |
mov ebp, [esp+1Ch] |
and edx, ebp |
ror ebp, 2 |
or edx, edi |
mov edi, ebp |
rol edi, 0Ch |
add edx, ecx |
xor ebp, edi |
add ecx, [esp+8] |
rol edi, 9 |
xor ebp, edi |
mov [esp+8], ecx |
add edx, ebp |
mov [esp+18h], edx |
mov edx, [esp+0Ch] |
mov ebp, ecx |
mov edi, ecx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, edx |
xor ebp, eax |
and ebp, ecx |
lea ebx, [edi+ebx-3DB47490h] |
mov edi, [esp+1Ch] |
xor ebp, eax |
add ebx, [esi+0A8h] |
add ebx, ebp |
mov ebp, [esp] |
mov ecx, edi |
and edi, ebp |
or ecx, ebp |
mov ebp, [esp+18h] |
and ecx, ebp |
ror ebp, 2 |
or ecx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ecx, ebx |
xor ebp, edi |
add ebx, [esp+4] |
rol edi, 9 |
xor ebp, edi |
mov [esp+4], ebx |
add ecx, ebp |
mov [esp+14h], ecx |
mov ecx, [esp+8] |
mov ebp, ebx |
mov edi, ebx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ecx |
xor ebp, edx |
and ebp, ebx |
lea eax, [edi+eax-3893AE5Dh] |
mov edi, [esp+18h] |
xor ebp, edx |
add eax, [esi+0ACh] |
add eax, ebp |
mov ebp, [esp+1Ch] |
mov ebx, edi |
and edi, ebp |
or ebx, ebp |
mov ebp, [esp+14h] |
and ebx, ebp |
ror ebp, 2 |
or ebx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ebx, eax |
xor ebp, edi |
add eax, [esp] |
rol edi, 9 |
xor ebp, edi |
mov [esp], eax |
add ebx, ebp |
mov [esp+10h], ebx |
mov ebx, [esp+4] |
mov ebp, eax |
mov edi, eax |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ebx |
xor ebp, ecx |
and ebp, eax |
lea edx, [edi+edx-2E6D17E7h] |
mov edi, [esp+14h] |
xor ebp, ecx |
add edx, [esi+0B0h] |
add edx, ebp |
mov ebp, [esp+18h] |
mov eax, edi |
and edi, ebp |
or eax, ebp |
mov ebp, [esp+10h] |
and eax, ebp |
ror ebp, 2 |
or eax, edi |
mov edi, ebp |
rol edi, 0Ch |
add eax, edx |
xor ebp, edi |
add edx, [esp+1Ch] |
rol edi, 9 |
xor ebp, edi |
mov [esp+1Ch], edx |
add eax, ebp |
mov [esp+0Ch], eax |
mov eax, [esp] |
mov ebp, edx |
mov edi, edx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, eax |
xor ebp, ebx |
and ebp, edx |
lea ecx, [edi+ecx-2966F9DCh] |
mov edi, [esp+10h] |
xor ebp, ebx |
add ecx, [esi+0B4h] |
add ecx, ebp |
mov ebp, [esp+14h] |
mov edx, edi |
and edi, ebp |
or edx, ebp |
mov ebp, [esp+0Ch] |
and edx, ebp |
ror ebp, 2 |
or edx, edi |
mov edi, ebp |
rol edi, 0Ch |
add edx, ecx |
xor ebp, edi |
add ecx, [esp+18h] |
rol edi, 9 |
xor ebp, edi |
mov [esp+18h], ecx |
add edx, ebp |
mov [esp+8], edx |
mov edx, [esp+1Ch] |
mov ebp, ecx |
mov edi, ecx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, edx |
xor ebp, eax |
and ebp, ecx |
lea ebx, [edi+ebx-0BF1CA7Bh] |
mov edi, [esp+0Ch] |
xor ebp, eax |
add ebx, [esi+0B8h] |
add ebx, ebp |
mov ebp, [esp+10h] |
mov ecx, edi |
and edi, ebp |
or ecx, ebp |
mov ebp, [esp+8] |
and ecx, ebp |
ror ebp, 2 |
or ecx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ecx, ebx |
xor ebp, edi |
add ebx, [esp+14h] |
rol edi, 9 |
xor ebp, edi |
mov [esp+14h], ebx |
add ecx, ebp |
mov [esp+4], ecx |
mov ecx, [esp+18h] |
mov ebp, ebx |
mov edi, ebx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ecx |
xor ebp, edx |
and ebp, ebx |
lea eax, [edi+eax+106AA070h] |
mov edi, [esp+8] |
xor ebp, edx |
add eax, [esi+0BCh] |
add eax, ebp |
mov ebp, [esp+0Ch] |
mov ebx, edi |
and edi, ebp |
or ebx, ebp |
mov ebp, [esp+4] |
and ebx, ebp |
ror ebp, 2 |
or ebx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ebx, eax |
xor ebp, edi |
add eax, [esp+10h] |
rol edi, 9 |
xor ebp, edi |
mov [esp+10h], eax |
add ebx, ebp |
mov [esp], ebx |
mov ebx, [esp+14h] |
mov ebp, eax |
mov edi, eax |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ebx |
xor ebp, ecx |
and ebp, eax |
lea edx, [edi+edx+19A4C116h] |
mov edi, [esp+4] |
xor ebp, ecx |
add edx, [esi+0C0h] |
add edx, ebp |
mov ebp, [esp+8] |
mov eax, edi |
and edi, ebp |
or eax, ebp |
mov ebp, [esp] |
and eax, ebp |
ror ebp, 2 |
or eax, edi |
mov edi, ebp |
rol edi, 0Ch |
add eax, edx |
xor ebp, edi |
add edx, [esp+0Ch] |
rol edi, 9 |
xor ebp, edi |
mov [esp+0Ch], edx |
add eax, ebp |
mov [esp+1Ch], eax |
mov eax, [esp+10h] |
mov ebp, edx |
mov edi, edx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, eax |
xor ebp, ebx |
and ebp, edx |
lea ecx, [edi+ecx+1E376C08h] |
mov edi, [esp] |
xor ebp, ebx |
add ecx, [esi+0C4h] |
add ecx, ebp |
mov ebp, [esp+4] |
mov edx, edi |
and edi, ebp |
or edx, ebp |
mov ebp, [esp+1Ch] |
and edx, ebp |
ror ebp, 2 |
or edx, edi |
mov edi, ebp |
rol edi, 0Ch |
add edx, ecx |
xor ebp, edi |
add ecx, [esp+8] |
rol edi, 9 |
xor ebp, edi |
mov [esp+8], ecx |
add edx, ebp |
mov [esp+18h], edx |
mov edx, [esp+0Ch] |
mov ebp, ecx |
mov edi, ecx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, edx |
xor ebp, eax |
and ebp, ecx |
lea ebx, [edi+ebx+2748774Ch] |
mov edi, [esp+1Ch] |
xor ebp, eax |
add ebx, [esi+0C8h] |
add ebx, ebp |
mov ebp, [esp] |
mov ecx, edi |
and edi, ebp |
or ecx, ebp |
mov ebp, [esp+18h] |
and ecx, ebp |
ror ebp, 2 |
or ecx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ecx, ebx |
xor ebp, edi |
add ebx, [esp+4] |
rol edi, 9 |
xor ebp, edi |
mov [esp+4], ebx |
add ecx, ebp |
mov [esp+14h], ecx |
mov ecx, [esp+8] |
mov ebp, ebx |
mov edi, ebx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ecx |
xor ebp, edx |
and ebp, ebx |
lea eax, [edi+eax+34B0BCB5h] |
mov edi, [esp+18h] |
xor ebp, edx |
add eax, [esi+0CCh] |
add eax, ebp |
mov ebp, [esp+1Ch] |
mov ebx, edi |
and edi, ebp |
or ebx, ebp |
mov ebp, [esp+14h] |
and ebx, ebp |
ror ebp, 2 |
or ebx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ebx, eax |
xor ebp, edi |
add eax, [esp] |
rol edi, 9 |
xor ebp, edi |
mov [esp], eax |
add ebx, ebp |
mov [esp+10h], ebx |
mov ebx, [esp+4] |
mov ebp, eax |
mov edi, eax |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ebx |
xor ebp, ecx |
and ebp, eax |
lea edx, [edi+edx+391C0CB3h] |
mov edi, [esp+14h] |
xor ebp, ecx |
add edx, [esi+0D0h] |
add edx, ebp |
mov ebp, [esp+18h] |
mov eax, edi |
and edi, ebp |
or eax, ebp |
mov ebp, [esp+10h] |
and eax, ebp |
ror ebp, 2 |
or eax, edi |
mov edi, ebp |
rol edi, 0Ch |
add eax, edx |
xor ebp, edi |
add edx, [esp+1Ch] |
rol edi, 9 |
xor ebp, edi |
mov [esp+1Ch], edx |
add eax, ebp |
mov [esp+0Ch], eax |
mov eax, [esp] |
mov ebp, edx |
mov edi, edx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, eax |
xor ebp, ebx |
and ebp, edx |
lea ecx, [edi+ecx+4ED8AA4Ah] |
mov edi, [esp+10h] |
xor ebp, ebx |
add ecx, [esi+0D4h] |
add ecx, ebp |
mov ebp, [esp+14h] |
mov edx, edi |
and edi, ebp |
or edx, ebp |
mov ebp, [esp+0Ch] |
and edx, ebp |
ror ebp, 2 |
or edx, edi |
mov edi, ebp |
rol edi, 0Ch |
add edx, ecx |
xor ebp, edi |
add ecx, [esp+18h] |
rol edi, 9 |
xor ebp, edi |
mov [esp+18h], ecx |
add edx, ebp |
mov [esp+8], edx |
mov edx, [esp+1Ch] |
mov ebp, ecx |
mov edi, ecx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, edx |
xor ebp, eax |
and ebp, ecx |
lea ebx, [edi+ebx+5B9CCA4Fh] |
mov edi, [esp+0Ch] |
xor ebp, eax |
add ebx, [esi+0D8h] |
add ebx, ebp |
mov ebp, [esp+10h] |
mov ecx, edi |
and edi, ebp |
or ecx, ebp |
mov ebp, [esp+8] |
and ecx, ebp |
ror ebp, 2 |
or ecx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ecx, ebx |
xor ebp, edi |
add ebx, [esp+14h] |
rol edi, 9 |
xor ebp, edi |
mov [esp+14h], ebx |
add ecx, ebp |
mov [esp+4], ecx |
mov ecx, [esp+18h] |
mov ebp, ebx |
mov edi, ebx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ecx |
xor ebp, edx |
and ebp, ebx |
lea eax, [edi+eax+682E6FF3h] |
mov edi, [esp+8] |
xor ebp, edx |
add eax, [esi+0DCh] |
add eax, ebp |
mov ebp, [esp+0Ch] |
mov ebx, edi |
and edi, ebp |
or ebx, ebp |
mov ebp, [esp+4] |
and ebx, ebp |
ror ebp, 2 |
or ebx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ebx, eax |
xor ebp, edi |
add eax, [esp+10h] |
rol edi, 9 |
xor ebp, edi |
mov [esp+10h], eax |
add ebx, ebp |
mov [esp], ebx |
mov ebx, [esp+14h] |
mov ebp, eax |
mov edi, eax |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ebx |
xor ebp, ecx |
and ebp, eax |
lea edx, [edi+edx+748F82EEh] |
mov edi, [esp+4] |
xor ebp, ecx |
add edx, [esi+0E0h] |
add edx, ebp |
mov ebp, [esp+8] |
mov eax, edi |
and edi, ebp |
or eax, ebp |
mov ebp, [esp] |
and eax, ebp |
ror ebp, 2 |
or eax, edi |
mov edi, ebp |
rol edi, 0Ch |
add eax, edx |
xor ebp, edi |
add edx, [esp+0Ch] |
rol edi, 9 |
xor ebp, edi |
mov [esp+0Ch], edx |
add eax, ebp |
mov [esp+1Ch], eax |
mov eax, [esp+10h] |
mov ebp, edx |
mov edi, edx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, eax |
xor ebp, ebx |
and ebp, edx |
lea ecx, [edi+ecx+78A5636Fh] |
mov edi, [esp] |
xor ebp, ebx |
add ecx, [esi+0E4h] |
add ecx, ebp |
mov ebp, [esp+4] |
mov edx, edi |
and edi, ebp |
or edx, ebp |
mov ebp, [esp+1Ch] |
and edx, ebp |
ror ebp, 2 |
or edx, edi |
mov edi, ebp |
rol edi, 0Ch |
add edx, ecx |
xor ebp, edi |
add ecx, [esp+8] |
rol edi, 9 |
xor ebp, edi |
mov [esp+8], ecx |
add edx, ebp |
mov [esp+18h], edx |
mov edx, [esp+0Ch] |
mov ebp, ecx |
mov edi, ecx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, edx |
xor ebp, eax |
and ebp, ecx |
lea ebx, [edi+ebx-7B3787ECh] |
mov edi, [esp+1Ch] |
xor ebp, eax |
add ebx, [esi+0E8h] |
add ebx, ebp |
mov ebp, [esp] |
mov ecx, edi |
and edi, ebp |
or ecx, ebp |
mov ebp, [esp+18h] |
and ecx, ebp |
ror ebp, 2 |
or ecx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ecx, ebx |
xor ebp, edi |
add ebx, [esp+4] |
rol edi, 9 |
xor ebp, edi |
mov [esp+4], ebx |
add ecx, ebp |
mov [esp+14h], ecx |
mov ecx, [esp+8] |
mov ebp, ebx |
mov edi, ebx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ecx |
xor ebp, edx |
and ebp, ebx |
lea eax, [edi+eax-7338FDF8h] |
mov edi, [esp+18h] |
xor ebp, edx |
add eax, [esi+0ECh] |
add eax, ebp |
mov ebp, [esp+1Ch] |
mov ebx, edi |
and edi, ebp |
or ebx, ebp |
mov ebp, [esp+14h] |
and ebx, ebp |
ror ebp, 2 |
or ebx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ebx, eax |
xor ebp, edi |
add eax, [esp] |
rol edi, 9 |
xor ebp, edi |
mov [esp], eax |
add ebx, ebp |
mov [esp+10h], ebx |
mov ebx, [esp+4] |
mov ebp, eax |
mov edi, eax |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ebx |
xor ebp, ecx |
and ebp, eax |
lea edx, [edi+edx-6F410006h] |
mov edi, [esp+14h] |
xor ebp, ecx |
add edx, [esi+0F0h] |
add edx, ebp |
mov ebp, [esp+18h] |
mov eax, edi |
and edi, ebp |
or eax, ebp |
mov ebp, [esp+10h] |
and eax, ebp |
ror ebp, 2 |
or eax, edi |
mov edi, ebp |
rol edi, 0Ch |
add eax, edx |
xor ebp, edi |
add edx, [esp+1Ch] |
rol edi, 9 |
xor ebp, edi |
mov [esp+1Ch], edx |
add eax, ebp |
mov [esp+0Ch], eax |
mov eax, [esp] |
mov ebp, edx |
mov edi, edx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, eax |
xor ebp, ebx |
and ebp, edx |
lea ecx, [edi+ecx-5BAF9315h] |
mov edi, [esp+10h] |
xor ebp, ebx |
add ecx, [esi+0F4h] |
add ecx, ebp |
mov ebp, [esp+14h] |
mov edx, edi |
and edi, ebp |
or edx, ebp |
mov ebp, [esp+0Ch] |
and edx, ebp |
ror ebp, 2 |
or edx, edi |
mov edi, ebp |
rol edi, 0Ch |
add edx, ecx |
xor ebp, edi |
add ecx, [esp+18h] |
rol edi, 9 |
xor ebp, edi |
mov [esp+18h], ecx |
add edx, ebp |
mov [esp+8], edx |
mov edx, [esp+1Ch] |
mov ebp, ecx |
mov edi, ecx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, edx |
xor ebp, eax |
and ebp, ecx |
lea ebx, [edi+ebx-41065C09h] |
mov edi, [esp+0Ch] |
xor ebp, eax |
add ebx, [esi+0F8h] |
add ebx, ebp |
mov ebp, [esp+10h] |
mov ecx, edi |
and edi, ebp |
or ecx, ebp |
mov ebp, [esp+8] |
and ecx, ebp |
ror ebp, 2 |
or ecx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ecx, ebx |
xor ebp, edi |
add ebx, [esp+14h] |
rol edi, 9 |
xor ebp, edi |
mov [esp+14h], ebx |
add ecx, ebp |
mov [esp+4], ecx |
mov ecx, [esp+18h] |
mov ebp, ebx |
mov edi, ebx |
ror ebp, 6 |
rol edi, 7 |
xor edi, ebp |
ror ebp, 5 |
xor edi, ebp |
mov ebp, ecx |
xor ebp, edx |
and ebp, ebx |
lea eax, [edi+eax-398E870Eh] |
mov edi, [esp+8] |
xor ebp, edx |
add eax, [esi+0FCh] |
add eax, ebp |
mov ebp, [esp+0Ch] |
mov ebx, edi |
and edi, ebp |
or ebx, ebp |
mov ebp, [esp+4] |
and ebx, ebp |
ror ebp, 2 |
or ebx, edi |
mov edi, ebp |
rol edi, 0Ch |
add ebx, eax |
xor ebp, edi |
add eax, [esp+10h] |
rol edi, 9 |
xor ebp, edi |
mov [esp+10h], eax |
add ebx, ebp |
mov [esp], ebx |
mov ebx, [esp+14h] |
mov edi, [esp+24h] |
add [edi+10h], eax |
add [edi+14h], ebx |
add [edi+18h], ecx |
add [edi+1Ch], edx |
mov eax, [esp] |
mov ebx, [esp+4] |
mov ecx, [esp+8] |
mov edx, [esp+0Ch] |
mov ebp, [esp+28h] |
add [edi], eax |
add [edi+4], ebx |
mov esp, ebp |
add [edi+8], ecx |
add [edi+0Ch], edx |
pop ebp |
pop edi |
pop esi |
pop ebx |
end; |
end; |
{$ENDIF} |
{$IFDEF THash_SHA384_asm} |
procedure SHA384Buffer(S, D: Pointer); |
asm |
push ebx |
push edi |
mov edi, eax |
push esi |
mov esi, edx |
mov eax, [esi] |
mov ebx, [esi+4] |
bswap eax |
bswap ebx |
mov ecx, [esi+8] |
mov edx, [esi+0Ch] |
bswap ecx |
bswap edx |
mov [edi], ebx |
mov [edi+4], eax |
mov [edi+8], edx |
mov [edi+0Ch], ecx |
mov eax, [esi+10h] |
mov ebx, [esi+14h] |
bswap eax |
bswap ebx |
mov ecx, [esi+18h] |
mov edx, [esi+1Ch] |
bswap ecx |
bswap edx |
mov [edi+10h], ebx |
mov [edi+14h], eax |
mov [edi+18h], edx |
mov [edi+1Ch], ecx |
mov eax, [esi+20h] |
mov ebx, [esi+24h] |
bswap eax |
bswap ebx |
mov ecx, [esi+28h] |
mov edx, [esi+2Ch] |
bswap ecx |
bswap edx |
mov [edi+20h], ebx |
mov [edi+24h], eax |
mov [edi+28h], edx |
mov [edi+2Ch], ecx |
mov eax, [esi+30h] |
mov ebx, [esi+34h] |
bswap eax |
bswap ebx |
mov ecx, [esi+38h] |
mov edx, [esi+3Ch] |
bswap ecx |
bswap edx |
mov [edi+30h], ebx |
mov [edi+34h], eax |
mov [edi+38h], edx |
mov [edi+3Ch], ecx |
pop esi |
pop edi |
pop ebx |
end; |
procedure THash_SHA384.DoTransform(Buffer: PUInt32Array); |
var |
W: array [0..159] of LongWord; |
begin |
// swap first 16 uint64 |
SHA384Buffer(@W[0], @Buffer[0]); |
SHA384Buffer(Pointer(LongInt(@W[0]) + 16*4), Pointer(LongInt(@Buffer[0]) + 16*4)); |
asm |
push ebx |
push esi |
push edi |
push ebp |
mov eax, Self |
lea edi, [eax].THash_SHA512.FDigest |
lea esi, W |
lea ebp, SHA_512K |
sub esp, 60h |
mov [esp+54h], ebp |
mov [esp+5Ch], edi |
mov [esp+58h], esi |
mov dword ptr [esp+50h], 10h |
@@buffexpand_loop: |
mov ebp, [esi+8] |
mov eax, [esi+0Ch] |
mov ecx, ebp |
mov edi, eax |
shl eax, 18h |
mov edx, edi |
shr ecx, 1 |
mov ebx, eax |
shl edx, 1Fh |
shl ebx, 1 |
or edx, ecx |
shr ecx, 6 |
or ebx, ecx |
shr ecx, 1 |
xor edx, ebx |
shl ebp, 18h |
or eax, ecx |
shr edi, 1 |
mov ecx, ebp |
shl ecx, 7 |
or ecx, edi |
shr edi, 6 |
xor edx, eax |
xor ecx, edi |
mov [esp+40h], edx |
shr edi, 1 |
or ebp, edi |
xor ecx, ebp |
mov ebp, [esi+70h] |
mov edi, [esi+74h] |
mov [esp+44h], ecx |
mov ecx, ebp |
mov edx, edi |
shl ecx, 3 |
mov eax, ebp |
shr edx, 1Dh |
mov ebx, edi |
shr eax, 6 |
or edx, ecx |
shl ebx, 1Ah |
or eax, ebx |
mov ebx, edi |
xor edx, eax |
shr eax, 0Dh |
mov ecx, ebp |
shl ebx, 0Dh |
or eax, ebx |
shr ecx, 1Dh |
xor eax, edx |
mov edx, edi |
shl edx, 3 |
shr edi, 6 |
or edx, ecx |
xor edx, edi |
shr edi, 0Dh |
mov ecx, eax |
shl ebp, 0Dh |
mov eax, [esp+40h] |
or edi, ebp |
mov ebx, [esp+44h] |
xor edx, edi |
mov ebp, [esi] |
mov edi, [esi+4] |
add eax, ecx |
adc ebx, edx |
add eax, ebp |
adc ebx, edi |
mov ebp, [esi+48h] |
mov edi, [esi+4Ch] |
add eax, ebp |
adc ebx, edi |
mov [esi+80h], eax |
mov [esi+84h], ebx |
mov ebp, [esi+10h] |
mov eax, [esi+14h] |
mov ecx, ebp |
mov edi, eax |
shl eax, 18h |
mov edx, edi |
shr ecx, 1 |
mov ebx, eax |
shl edx, 1Fh |
shl ebx, 1 |
or edx, ecx |
shr ecx, 6 |
or ebx, ecx |
shr ecx, 1 |
xor edx, ebx |
shl ebp, 18h |
or eax, ecx |
shr edi, 1 |
mov ecx, ebp |
shl ecx, 7 |
or ecx, edi |
shr edi, 6 |
xor edx, eax |
xor ecx, edi |
mov [esp+40h], edx |
shr edi, 1 |
or ebp, edi |
xor ecx, ebp |
mov ebp, [esi+78h] |
mov edi, [esi+7Ch] |
mov [esp+44h], ecx |
mov ecx, ebp |
mov edx, edi |
shl ecx, 3 |
mov eax, ebp |
shr edx, 1Dh |
mov ebx, edi |
shr eax, 6 |
or edx, ecx |
shl ebx, 1Ah |
or eax, ebx |
mov ebx, edi |
xor edx, eax |
shr eax, 0Dh |
mov ecx, ebp |
shl ebx, 0Dh |
or eax, ebx |
shr ecx, 1Dh |
xor eax, edx |
mov edx, edi |
shl edx, 3 |
shr edi, 6 |
or edx, ecx |
xor edx, edi |
shr edi, 0Dh |
mov ecx, eax |
shl ebp, 0Dh |
mov eax, [esp+40h] |
or edi, ebp |
mov ebx, [esp+44h] |
xor edx, edi |
mov ebp, [esi+8] |
mov edi, [esi+0Ch] |
add eax, ecx |
adc ebx, edx |
add eax, ebp |
adc ebx, edi |
mov ebp, [esi+50h] |
mov edi, [esi+54h] |
add eax, ebp |
adc ebx, edi |
mov [esi+88h], eax |
mov [esi+8Ch], ebx |
add esi, 10h |
add dword ptr [esp+50h], 2 |
cmp dword ptr [esp+50h], 50h |
jnz @@buffexpand_loop |
mov edi, [esp+5Ch] |
mov esi, [esp+58h] |
mov eax, [edi] |
mov ebx, [edi+4] |
mov ecx, [edi+8] |
mov edx, [edi+0Ch] |
mov [esp], eax |
mov [esp+4], ebx |
mov [esp+8], ecx |
mov [esp+0Ch], edx |
mov eax, [edi+10h] |
mov ebx, [edi+14h] |
mov ecx, [edi+18h] |
mov edx, [edi+1Ch] |
mov [esp+10h], eax |
mov [esp+14h], ebx |
mov [esp+18h], ecx |
mov [esp+1Ch], edx |
mov eax, [edi+20h] |
mov ebx, [edi+24h] |
mov ecx, [edi+28h] |
mov edx, [edi+2Ch] |
mov [esp+20h], eax |
mov [esp+24h], ebx |
mov [esp+28h], ecx |
mov [esp+2Ch], edx |
mov eax, [edi+30h] |
mov ebx, [edi+34h] |
mov ecx, [edi+38h] |
mov edx, [edi+3Ch] |
mov [esp+30h], eax |
mov [esp+34h], ebx |
xor eax, eax |
mov [esp+38h], ecx |
mov [esp+3Ch], edx |
mov [esp+50h], eax |
@@body_loop: |
mov eax, [esp+20h] |
mov ebx, [esp+24h] |
mov ecx, eax |
mov edx, ebx |
shr ecx, 0Eh |
mov ebp, eax |
shl edx, 12h |
mov edi, ebx |
shr ebp, 12h |
or ecx, edx |
shl edi, 0Eh |
or ebp, edi |
mov edx, ebx |
xor ebp, ecx |
mov ecx, eax |
shl ecx, 17h |
shr edx, 9 |
or ecx, edx |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
mov [esp+40h], ebp |
shr ecx, 0Eh |
mov ebp, ebx |
shl edx, 12h |
mov edi, eax |
shr ebp, 12h |
or ecx, edx |
shl edi, 0Eh |
or ebp, edi |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
shl ecx, 17h |
shr edx, 9 |
or ecx, edx |
mov edx, [esp+2Ch] |
xor ebp, ecx |
mov ecx, [esp+28h] |
mov [esp+44h], ebp |
mov ebp, [esp+30h] |
mov edi, [esp+34h] |
xor ecx, ebp |
xor edx, edi |
and ecx, eax |
and edx, ebx |
xor ecx, ebp |
xor edx, edi |
add ecx, [esp+40h] |
mov eax, [esp+38h] |
adc edx, [esp+44h] |
mov ebx, [esp+3Ch] |
add ecx, eax |
mov edi, [esp+50h] |
adc edx, ebx |
mov ebp, [esp+54h] |
shl edi, 3 |
add edi, 0 |
shl edi, 3 |
mov eax, [edi+ebp] |
mov ebx, [edi+ebp+4] |
add ecx, eax |
mov eax, [esi+edi] |
adc edx, ebx |
mov ebx, [esi+edi+4] |
add ecx, eax |
mov eax, [esp] |
adc edx, ebx |
mov ebx, [esp+4] |
mov [esp+40h], ecx |
mov [esp+44h], edx |
mov ecx, eax |
mov edx, ebx |
shr ecx, 1Ch |
mov ebp, eax |
shl edx, 4 |
mov edi, ebx |
shl ebp, 1Eh |
or ecx, edx |
shr edi, 2 |
or ebp, edi |
mov edx, ebx |
xor ebp, ecx |
mov ecx, eax |
shr edx, 7 |
shl ecx, 19h |
or ecx, edx |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
mov [esp+48h], ebp |
shr ecx, 1Ch |
mov ebp, ebx |
shl edx, 4 |
mov edi, eax |
shl ebp, 1Eh |
or ecx, edx |
shr edi, 2 |
or ebp, edi |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
shl ecx, 19h |
shr edx, 7 |
or ecx, edx |
mov edx, [esp+0Ch] |
xor ebp, ecx |
mov ecx, [esp+8] |
mov [esp+4Ch], ebp |
mov ebp, [esp+10h] |
mov edi, [esp+14h] |
or ecx, ebp |
or edx, edi |
and eax, ecx |
and ebx, edx |
mov ecx, [esp+8] |
mov edx, [esp+0Ch] |
and ebp, ecx |
and edi, edx |
or eax, ebp |
or ebx, edi |
mov ecx, [esp+48h] |
mov edx, [esp+4Ch] |
add eax, ecx |
mov ebp, [esp+40h] |
adc ebx, edx |
mov ecx, [esp+18h] |
mov edx, [esp+1Ch] |
mov edi, [esp+44h] |
add ecx, ebp |
adc edx, edi |
mov [esp+18h], ecx |
mov [esp+1Ch], edx |
add ebp, eax |
adc edi, ebx |
mov [esp+38h], ebp |
mov [esp+3Ch], edi |
mov eax, [esp+18h] |
mov ebx, [esp+1Ch] |
mov ecx, eax |
mov edx, ebx |
shr ecx, 0Eh |
mov ebp, eax |
shl edx, 12h |
mov edi, ebx |
shr ebp, 12h |
or ecx, edx |
shl edi, 0Eh |
or ebp, edi |
mov edx, ebx |
xor ebp, ecx |
mov ecx, eax |
shl ecx, 17h |
shr edx, 9 |
or ecx, edx |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
mov [esp+40h], ebp |
shr ecx, 0Eh |
mov ebp, ebx |
shl edx, 12h |
mov edi, eax |
shr ebp, 12h |
or ecx, edx |
shl edi, 0Eh |
or ebp, edi |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
shl ecx, 17h |
shr edx, 9 |
or ecx, edx |
mov edx, [esp+24h] |
xor ebp, ecx |
mov ecx, [esp+20h] |
mov [esp+44h], ebp |
mov ebp, [esp+28h] |
mov edi, [esp+2Ch] |
xor ecx, ebp |
xor edx, edi |
and ecx, eax |
and edx, ebx |
xor ecx, ebp |
xor edx, edi |
add ecx, [esp+40h] |
mov eax, [esp+30h] |
adc edx, [esp+44h] |
mov ebx, [esp+34h] |
add ecx, eax |
mov edi, [esp+50h] |
adc edx, ebx |
mov ebp, [esp+54h] |
shl edi, 3 |
add edi, 1 |
shl edi, 3 |
mov eax, [edi+ebp] |
mov ebx, [edi+ebp+4] |
add ecx, eax |
mov eax, [esi+edi] |
adc edx, ebx |
mov ebx, [esi+edi+4] |
add ecx, eax |
mov eax, [esp+38h] |
adc edx, ebx |
mov ebx, [esp+3Ch] |
mov [esp+40h], ecx |
mov [esp+44h], edx |
mov ecx, eax |
mov edx, ebx |
shr ecx, 1Ch |
mov ebp, eax |
shl edx, 4 |
mov edi, ebx |
shl ebp, 1Eh |
or ecx, edx |
shr edi, 2 |
or ebp, edi |
mov edx, ebx |
xor ebp, ecx |
mov ecx, eax |
shr edx, 7 |
shl ecx, 19h |
or ecx, edx |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
mov [esp+48h], ebp |
shr ecx, 1Ch |
mov ebp, ebx |
shl edx, 4 |
mov edi, eax |
shl ebp, 1Eh |
or ecx, edx |
shr edi, 2 |
or ebp, edi |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
shl ecx, 19h |
shr edx, 7 |
or ecx, edx |
mov edx, [esp+4] |
xor ebp, ecx |
mov ecx, [esp] |
mov [esp+4Ch], ebp |
mov ebp, [esp+8] |
mov edi, [esp+0Ch] |
or ecx, ebp |
or edx, edi |
and eax, ecx |
and ebx, edx |
mov ecx, [esp] |
mov edx, [esp+4] |
and ebp, ecx |
and edi, edx |
or eax, ebp |
or ebx, edi |
mov ecx, [esp+48h] |
mov edx, [esp+4Ch] |
add eax, ecx |
mov ebp, [esp+40h] |
adc ebx, edx |
mov ecx, [esp+10h] |
mov edx, [esp+14h] |
mov edi, [esp+44h] |
add ecx, ebp |
adc edx, edi |
mov [esp+10h], ecx |
mov [esp+14h], edx |
add ebp, eax |
adc edi, ebx |
mov [esp+30h], ebp |
mov [esp+34h], edi |
mov eax, [esp+10h] |
mov ebx, [esp+14h] |
mov ecx, eax |
mov edx, ebx |
shr ecx, 0Eh |
mov ebp, eax |
shl edx, 12h |
mov edi, ebx |
shr ebp, 12h |
or ecx, edx |
shl edi, 0Eh |
or ebp, edi |
mov edx, ebx |
xor ebp, ecx |
mov ecx, eax |
shl ecx, 17h |
shr edx, 9 |
or ecx, edx |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
mov [esp+40h], ebp |
shr ecx, 0Eh |
mov ebp, ebx |
shl edx, 12h |
mov edi, eax |
shr ebp, 12h |
or ecx, edx |
shl edi, 0Eh |
or ebp, edi |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
shl ecx, 17h |
shr edx, 9 |
or ecx, edx |
mov edx, [esp+1Ch] |
xor ebp, ecx |
mov ecx, [esp+18h] |
mov [esp+44h], ebp |
mov ebp, [esp+20h] |
mov edi, [esp+24h] |
xor ecx, ebp |
xor edx, edi |
and ecx, eax |
and edx, ebx |
xor ecx, ebp |
xor edx, edi |
add ecx, [esp+40h] |
mov eax, [esp+28h] |
adc edx, [esp+44h] |
mov ebx, [esp+2Ch] |
add ecx, eax |
mov edi, [esp+50h] |
adc edx, ebx |
mov ebp, [esp+54h] |
shl edi, 3 |
add edi, 2 |
shl edi, 3 |
mov eax, [edi+ebp] |
mov ebx, [edi+ebp+4] |
add ecx, eax |
mov eax, [esi+edi] |
adc edx, ebx |
mov ebx, [esi+edi+4] |
add ecx, eax |
mov eax, [esp+30h] |
adc edx, ebx |
mov ebx, [esp+34h] |
mov [esp+40h], ecx |
mov [esp+44h], edx |
mov ecx, eax |
mov edx, ebx |
shr ecx, 1Ch |
mov ebp, eax |
shl edx, 4 |
mov edi, ebx |
shl ebp, 1Eh |
or ecx, edx |
shr edi, 2 |
or ebp, edi |
mov edx, ebx |
xor ebp, ecx |
mov ecx, eax |
shr edx, 7 |
shl ecx, 19h |
or ecx, edx |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
mov [esp+48h], ebp |
shr ecx, 1Ch |
mov ebp, ebx |
shl edx, 4 |
mov edi, eax |
shl ebp, 1Eh |
or ecx, edx |
shr edi, 2 |
or ebp, edi |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
shl ecx, 19h |
shr edx, 7 |
or ecx, edx |
mov edx, [esp+3Ch] |
xor ebp, ecx |
mov ecx, [esp+38h] |
mov [esp+4Ch], ebp |
mov ebp, [esp] |
mov edi, [esp+4] |
or ecx, ebp |
or edx, edi |
and eax, ecx |
and ebx, edx |
mov ecx, [esp+38h] |
mov edx, [esp+3Ch] |
and ebp, ecx |
and edi, edx |
or eax, ebp |
or ebx, edi |
mov ecx, [esp+48h] |
mov edx, [esp+4Ch] |
add eax, ecx |
mov ebp, [esp+40h] |
adc ebx, edx |
mov ecx, [esp+8] |
mov edx, [esp+0Ch] |
mov edi, [esp+44h] |
add ecx, ebp |
adc edx, edi |
mov [esp+8], ecx |
mov [esp+0Ch], edx |
add ebp, eax |
adc edi, ebx |
mov [esp+28h], ebp |
mov [esp+2Ch], edi |
mov eax, [esp+8] |
mov ebx, [esp+0Ch] |
mov ecx, eax |
mov edx, ebx |
shr ecx, 0Eh |
mov ebp, eax |
shl edx, 12h |
mov edi, ebx |
shr ebp, 12h |
or ecx, edx |
shl edi, 0Eh |
or ebp, edi |
mov edx, ebx |
xor ebp, ecx |
mov ecx, eax |
shl ecx, 17h |
shr edx, 9 |
or ecx, edx |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
mov [esp+40h], ebp |
shr ecx, 0Eh |
mov ebp, ebx |
shl edx, 12h |
mov edi, eax |
shr ebp, 12h |
or ecx, edx |
shl edi, 0Eh |
or ebp, edi |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
shl ecx, 17h |
shr edx, 9 |
or ecx, edx |
mov edx, [esp+14h] |
xor ebp, ecx |
mov ecx, [esp+10h] |
mov [esp+44h], ebp |
mov ebp, [esp+18h] |
mov edi, [esp+1Ch] |
xor ecx, ebp |
xor edx, edi |
and ecx, eax |
and edx, ebx |
xor ecx, ebp |
xor edx, edi |
add ecx, [esp+40h] |
mov eax, [esp+20h] |
adc edx, [esp+44h] |
mov ebx, [esp+24h] |
add ecx, eax |
mov edi, [esp+50h] |
adc edx, ebx |
mov ebp, [esp+54h] |
shl edi, 3 |
add edi, 3 |
shl edi, 3 |
mov eax, [edi+ebp] |
mov ebx, [edi+ebp+4] |
add ecx, eax |
mov eax, [esi+edi] |
adc edx, ebx |
mov ebx, [esi+edi+4] |
add ecx, eax |
mov eax, [esp+28h] |
adc edx, ebx |
mov ebx, [esp+2Ch] |
mov [esp+40h], ecx |
mov [esp+44h], edx |
mov ecx, eax |
mov edx, ebx |
shr ecx, 1Ch |
mov ebp, eax |
shl edx, 4 |
mov edi, ebx |
shl ebp, 1Eh |
or ecx, edx |
shr edi, 2 |
or ebp, edi |
mov edx, ebx |
xor ebp, ecx |
mov ecx, eax |
shr edx, 7 |
shl ecx, 19h |
or ecx, edx |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
mov [esp+48h], ebp |
shr ecx, 1Ch |
mov ebp, ebx |
shl edx, 4 |
mov edi, eax |
shl ebp, 1Eh |
or ecx, edx |
shr edi, 2 |
or ebp, edi |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
shl ecx, 19h |
shr edx, 7 |
or ecx, edx |
mov edx, [esp+34h] |
xor ebp, ecx |
mov ecx, [esp+30h] |
mov [esp+4Ch], ebp |
mov ebp, [esp+38h] |
mov edi, [esp+3Ch] |
or ecx, ebp |
or edx, edi |
and eax, ecx |
and ebx, edx |
mov ecx, [esp+30h] |
mov edx, [esp+34h] |
and ebp, ecx |
and edi, edx |
or eax, ebp |
or ebx, edi |
mov ecx, [esp+48h] |
mov edx, [esp+4Ch] |
add eax, ecx |
mov ebp, [esp+40h] |
adc ebx, edx |
mov ecx, [esp] |
mov edx, [esp+4] |
mov edi, [esp+44h] |
add ecx, ebp |
adc edx, edi |
mov [esp], ecx |
mov [esp+4], edx |
add ebp, eax |
adc edi, ebx |
mov [esp+20h], ebp |
mov [esp+24h], edi |
mov eax, [esp] |
mov ebx, [esp+4] |
mov ecx, eax |
mov edx, ebx |
shr ecx, 0Eh |
mov ebp, eax |
shl edx, 12h |
mov edi, ebx |
shr ebp, 12h |
or ecx, edx |
shl edi, 0Eh |
or ebp, edi |
mov edx, ebx |
xor ebp, ecx |
mov ecx, eax |
shl ecx, 17h |
shr edx, 9 |
or ecx, edx |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
mov [esp+40h], ebp |
shr ecx, 0Eh |
mov ebp, ebx |
shl edx, 12h |
mov edi, eax |
shr ebp, 12h |
or ecx, edx |
shl edi, 0Eh |
or ebp, edi |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
shl ecx, 17h |
shr edx, 9 |
or ecx, edx |
mov edx, [esp+0Ch] |
xor ebp, ecx |
mov ecx, [esp+8] |
mov [esp+44h], ebp |
mov ebp, [esp+10h] |
mov edi, [esp+14h] |
xor ecx, ebp |
xor edx, edi |
and ecx, eax |
and edx, ebx |
xor ecx, ebp |
xor edx, edi |
add ecx, [esp+40h] |
mov eax, [esp+18h] |
adc edx, [esp+44h] |
mov ebx, [esp+1Ch] |
add ecx, eax |
mov edi, [esp+50h] |
adc edx, ebx |
mov ebp, [esp+54h] |
shl edi, 3 |
add edi, 4 |
shl edi, 3 |
mov eax, [edi+ebp] |
mov ebx, [edi+ebp+4] |
add ecx, eax |
mov eax, [esi+edi] |
adc edx, ebx |
mov ebx, [esi+edi+4] |
add ecx, eax |
mov eax, [esp+20h] |
adc edx, ebx |
mov ebx, [esp+24h] |
mov [esp+40h], ecx |
mov [esp+44h], edx |
mov ecx, eax |
mov edx, ebx |
shr ecx, 1Ch |
mov ebp, eax |
shl edx, 4 |
mov edi, ebx |
shl ebp, 1Eh |
or ecx, edx |
shr edi, 2 |
or ebp, edi |
mov edx, ebx |
xor ebp, ecx |
mov ecx, eax |
shr edx, 7 |
shl ecx, 19h |
or ecx, edx |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
mov [esp+48h], ebp |
shr ecx, 1Ch |
mov ebp, ebx |
shl edx, 4 |
mov edi, eax |
shl ebp, 1Eh |
or ecx, edx |
shr edi, 2 |
or ebp, edi |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
shl ecx, 19h |
shr edx, 7 |
or ecx, edx |
mov edx, [esp+2Ch] |
xor ebp, ecx |
mov ecx, [esp+28h] |
mov [esp+4Ch], ebp |
mov ebp, [esp+30h] |
mov edi, [esp+34h] |
or ecx, ebp |
or edx, edi |
and eax, ecx |
and ebx, edx |
mov ecx, [esp+28h] |
mov edx, [esp+2Ch] |
and ebp, ecx |
and edi, edx |
or eax, ebp |
or ebx, edi |
mov ecx, [esp+48h] |
mov edx, [esp+4Ch] |
add eax, ecx |
mov ebp, [esp+40h] |
adc ebx, edx |
mov ecx, [esp+38h] |
mov edx, [esp+3Ch] |
mov edi, [esp+44h] |
add ecx, ebp |
adc edx, edi |
mov [esp+38h], ecx |
mov [esp+3Ch], edx |
add ebp, eax |
adc edi, ebx |
mov [esp+18h], ebp |
mov [esp+1Ch], edi |
mov eax, [esp+38h] |
mov ebx, [esp+3Ch] |
mov ecx, eax |
mov edx, ebx |
shr ecx, 0Eh |
mov ebp, eax |
shl edx, 12h |
mov edi, ebx |
shr ebp, 12h |
or ecx, edx |
shl edi, 0Eh |
or ebp, edi |
mov edx, ebx |
xor ebp, ecx |
mov ecx, eax |
shl ecx, 17h |
shr edx, 9 |
or ecx, edx |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
mov [esp+40h], ebp |
shr ecx, 0Eh |
mov ebp, ebx |
shl edx, 12h |
mov edi, eax |
shr ebp, 12h |
or ecx, edx |
shl edi, 0Eh |
or ebp, edi |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
shl ecx, 17h |
shr edx, 9 |
or ecx, edx |
mov edx, [esp+4] |
xor ebp, ecx |
mov ecx, [esp] |
mov [esp+44h], ebp |
mov ebp, [esp+8] |
mov edi, [esp+0Ch] |
xor ecx, ebp |
xor edx, edi |
and ecx, eax |
and edx, ebx |
xor ecx, ebp |
xor edx, edi |
add ecx, [esp+40h] |
mov eax, [esp+10h] |
adc edx, [esp+44h] |
mov ebx, [esp+14h] |
add ecx, eax |
mov edi, [esp+50h] |
adc edx, ebx |
mov ebp, [esp+54h] |
shl edi, 3 |
add edi, 5 |
shl edi, 3 |
mov eax, [edi+ebp] |
mov ebx, [edi+ebp+4] |
add ecx, eax |
mov eax, [esi+edi] |
adc edx, ebx |
mov ebx, [esi+edi+4] |
add ecx, eax |
mov eax, [esp+18h] |
adc edx, ebx |
mov ebx, [esp+1Ch] |
mov [esp+40h], ecx |
mov [esp+44h], edx |
mov ecx, eax |
mov edx, ebx |
shr ecx, 1Ch |
mov ebp, eax |
shl edx, 4 |
mov edi, ebx |
shl ebp, 1Eh |
or ecx, edx |
shr edi, 2 |
or ebp, edi |
mov edx, ebx |
xor ebp, ecx |
mov ecx, eax |
shr edx, 7 |
shl ecx, 19h |
or ecx, edx |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
mov [esp+48h], ebp |
shr ecx, 1Ch |
mov ebp, ebx |
shl edx, 4 |
mov edi, eax |
shl ebp, 1Eh |
or ecx, edx |
shr edi, 2 |
or ebp, edi |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
shl ecx, 19h |
shr edx, 7 |
or ecx, edx |
mov edx, [esp+24h] |
xor ebp, ecx |
mov ecx, [esp+20h] |
mov [esp+4Ch], ebp |
mov ebp, [esp+28h] |
mov edi, [esp+2Ch] |
or ecx, ebp |
or edx, edi |
and eax, ecx |
and ebx, edx |
mov ecx, [esp+20h] |
mov edx, [esp+24h] |
and ebp, ecx |
and edi, edx |
or eax, ebp |
or ebx, edi |
mov ecx, [esp+48h] |
mov edx, [esp+4Ch] |
add eax, ecx |
mov ebp, [esp+40h] |
adc ebx, edx |
mov ecx, [esp+30h] |
mov edx, [esp+34h] |
mov edi, [esp+44h] |
add ecx, ebp |
adc edx, edi |
mov [esp+30h], ecx |
mov [esp+34h], edx |
add ebp, eax |
adc edi, ebx |
mov [esp+10h], ebp |
mov [esp+14h], edi |
mov eax, [esp+30h] |
mov ebx, [esp+34h] |
mov ecx, eax |
mov edx, ebx |
shr ecx, 0Eh |
mov ebp, eax |
shl edx, 12h |
mov edi, ebx |
shr ebp, 12h |
or ecx, edx |
shl edi, 0Eh |
or ebp, edi |
mov edx, ebx |
xor ebp, ecx |
mov ecx, eax |
shl ecx, 17h |
shr edx, 9 |
or ecx, edx |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
mov [esp+40h], ebp |
shr ecx, 0Eh |
mov ebp, ebx |
shl edx, 12h |
mov edi, eax |
shr ebp, 12h |
or ecx, edx |
shl edi, 0Eh |
or ebp, edi |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
shl ecx, 17h |
shr edx, 9 |
or ecx, edx |
mov edx, [esp+3Ch] |
xor ebp, ecx |
mov ecx, [esp+38h] |
mov [esp+44h], ebp |
mov ebp, [esp] |
mov edi, [esp+4] |
xor ecx, ebp |
xor edx, edi |
and ecx, eax |
and edx, ebx |
xor ecx, ebp |
xor edx, edi |
add ecx, [esp+40h] |
mov eax, [esp+8] |
adc edx, [esp+44h] |
mov ebx, [esp+0Ch] |
add ecx, eax |
mov edi, [esp+50h] |
adc edx, ebx |
mov ebp, [esp+54h] |
shl edi, 3 |
add edi, 6 |
shl edi, 3 |
mov eax, [edi+ebp] |
mov ebx, [edi+ebp+4] |
add ecx, eax |
mov eax, [esi+edi] |
adc edx, ebx |
mov ebx, [esi+edi+4] |
add ecx, eax |
mov eax, [esp+10h] |
adc edx, ebx |
mov ebx, [esp+14h] |
mov [esp+40h], ecx |
mov [esp+44h], edx |
mov ecx, eax |
mov edx, ebx |
shr ecx, 1Ch |
mov ebp, eax |
shl edx, 4 |
mov edi, ebx |
shl ebp, 1Eh |
or ecx, edx |
shr edi, 2 |
or ebp, edi |
mov edx, ebx |
xor ebp, ecx |
mov ecx, eax |
shr edx, 7 |
shl ecx, 19h |
or ecx, edx |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
mov [esp+48h], ebp |
shr ecx, 1Ch |
mov ebp, ebx |
shl edx, 4 |
mov edi, eax |
shl ebp, 1Eh |
or ecx, edx |
shr edi, 2 |
or ebp, edi |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
shl ecx, 19h |
shr edx, 7 |
or ecx, edx |
mov edx, [esp+1Ch] |
xor ebp, ecx |
mov ecx, [esp+18h] |
mov [esp+4Ch], ebp |
mov ebp, [esp+20h] |
mov edi, [esp+24h] |
or ecx, ebp |
or edx, edi |
and eax, ecx |
and ebx, edx |
mov ecx, [esp+18h] |
mov edx, [esp+1Ch] |
and ebp, ecx |
and edi, edx |
or eax, ebp |
or ebx, edi |
mov ecx, [esp+48h] |
mov edx, [esp+4Ch] |
add eax, ecx |
mov ebp, [esp+40h] |
adc ebx, edx |
mov ecx, [esp+28h] |
mov edx, [esp+2Ch] |
mov edi, [esp+44h] |
add ecx, ebp |
adc edx, edi |
mov [esp+28h], ecx |
mov [esp+2Ch], edx |
add ebp, eax |
adc edi, ebx |
mov [esp+8], ebp |
mov [esp+0Ch], edi |
mov eax, [esp+28h] |
mov ebx, [esp+2Ch] |
mov ecx, eax |
mov edx, ebx |
shr ecx, 0Eh |
mov ebp, eax |
shl edx, 12h |
mov edi, ebx |
shr ebp, 12h |
or ecx, edx |
shl edi, 0Eh |
or ebp, edi |
mov edx, ebx |
xor ebp, ecx |
mov ecx, eax |
shl ecx, 17h |
shr edx, 9 |
or ecx, edx |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
mov [esp+40h], ebp |
shr ecx, 0Eh |
mov ebp, ebx |
shl edx, 12h |
mov edi, eax |
shr ebp, 12h |
or ecx, edx |
shl edi, 0Eh |
or ebp, edi |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
shl ecx, 17h |
shr edx, 9 |
or ecx, edx |
mov edx, [esp+34h] |
xor ebp, ecx |
mov ecx, [esp+30h] |
mov [esp+44h], ebp |
mov ebp, [esp+38h] |
mov edi, [esp+3Ch] |
xor ecx, ebp |
xor edx, edi |
and ecx, eax |
and edx, ebx |
xor ecx, ebp |
xor edx, edi |
add ecx, [esp+40h] |
mov eax, [esp] |
adc edx, [esp+44h] |
mov ebx, [esp+4] |
add ecx, eax |
mov edi, [esp+50h] |
adc edx, ebx |
mov ebp, [esp+54h] |
shl edi, 3 |
add edi, 7 |
shl edi, 3 |
mov eax, [edi+ebp] |
mov ebx, [edi+ebp+4] |
add ecx, eax |
mov eax, [esi+edi] |
adc edx, ebx |
mov ebx, [esi+edi+4] |
add ecx, eax |
mov eax, [esp+8] |
adc edx, ebx |
mov ebx, [esp+0Ch] |
mov [esp+40h], ecx |
mov [esp+44h], edx |
mov ecx, eax |
mov edx, ebx |
shr ecx, 1Ch |
mov ebp, eax |
shl edx, 4 |
mov edi, ebx |
shl ebp, 1Eh |
or ecx, edx |
shr edi, 2 |
or ebp, edi |
mov edx, ebx |
xor ebp, ecx |
mov ecx, eax |
shr edx, 7 |
shl ecx, 19h |
or ecx, edx |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
mov [esp+48h], ebp |
shr ecx, 1Ch |
mov ebp, ebx |
shl edx, 4 |
mov edi, eax |
shl ebp, 1Eh |
or ecx, edx |
shr edi, 2 |
or ebp, edi |
mov edx, eax |
xor ebp, ecx |
mov ecx, ebx |
shl ecx, 19h |
shr edx, 7 |
or ecx, edx |
mov edx, [esp+14h] |
xor ebp, ecx |
mov ecx, [esp+10h] |
mov [esp+4Ch], ebp |
mov ebp, [esp+18h] |
mov edi, [esp+1Ch] |
or ecx, ebp |
or edx, edi |
and eax, ecx |
and ebx, edx |
mov ecx, [esp+10h] |
mov edx, [esp+14h] |
and ebp, ecx |
and edi, edx |
or eax, ebp |
or ebx, edi |
mov ecx, [esp+48h] |
mov edx, [esp+4Ch] |
add eax, ecx |
mov ebp, [esp+40h] |
adc ebx, edx |
mov ecx, [esp+20h] |
mov edx, [esp+24h] |
mov edi, [esp+44h] |
add ecx, ebp |
adc edx, edi |
mov [esp+20h], ecx |
mov [esp+24h], edx |
add ebp, eax |
adc edi, ebx |
mov [esp], ebp |
mov [esp+4], edi |
inc dword ptr [esp+50h] |
cmp dword ptr [esp+50h], 0Ah |
jnz @@body_loop |
mov edi, [esp+5Ch] |
mov eax, [esp] |
mov ebx, [esp+4] |
mov ecx, [esp+8] |
mov edx, [esp+0Ch] |
add [edi], eax |
adc [edi+4], ebx |
add [edi+8], ecx |
adc [edi+0Ch], edx |
mov eax, [esp+10h] |
mov ebx, [esp+14h] |
mov ecx, [esp+18h] |
mov edx, [esp+1Ch] |
add [edi+10h], eax |
adc [edi+14h], ebx |
add [edi+18h], ecx |
adc [edi+1Ch], edx |
mov eax, [esp+20h] |
mov ebx, [esp+24h] |
mov ecx, [esp+28h] |
mov edx, [esp+2Ch] |
add [edi+20h], eax |
adc [edi+24h], ebx |
add [edi+28h], ecx |
adc [edi+2Ch], edx |
mov eax, [esp+30h] |
mov ebx, [esp+34h] |
mov ecx, [esp+38h] |
mov edx, [esp+3Ch] |
add [edi+30h], eax |
adc [edi+34h], ebx |
add [edi+38h], ecx |
adc [edi+3Ch], edx |
add esp, 60h |
pop ebp |
pop edi |
pop esi |
pop ebx |
end; |
end; |
{$ENDIF} |
{$IFDEF THashBaseHaval_asm} |
procedure THashBaseHaval.DoTransform3(Buffer: PUInt32Array); |
asm |
push ebx |
push esi |
push edi |
lea edi, [eax].THashBaseHaval.FDigest |
mov esi, edx |
push ebp |
mov ebp, esp |
add esp, 0FFFFFFD4h |
and esp, 0FFFFFFC0h |
mov eax, [edi] |
mov ebx, [edi+4] |
mov [esp+20h], esi |
mov [esp+24h], edi |
mov [esp+28h], ebp |
mov [esp], eax |
mov [esp+4], ebx |
mov ecx, [edi+8] |
mov edx, [edi+0Ch] |
mov [esp+8], ecx |
mov [esp+0Ch], edx |
mov eax, [edi+10h] |
mov ebx, [edi+14h] |
mov [esp+10h], eax |
mov [esp+14h], ebx |
mov ecx, [edi+18h] |
mov edx, [edi+1Ch] |
mov [esp+18h], ecx |
mov [esp+1Ch], edx |
mov eax, edx |
mov ebp, [esp] |
mov ebx, [esp+0Ch] |
mov ecx, [esp+10h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+4] |
and ebx, [esp+8] |
and edi, [esp+14h] |
xor ecx, ebx |
and ebp, [esp+18h] |
xor edi, ecx |
mov edx, [esi] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebx, [esp+8] |
mov ecx, [esp+0Ch] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp] |
and ebx, [esp+4] |
and edi, [esp+10h] |
xor ecx, ebx |
and ebp, [esp+14h] |
xor edi, ecx |
mov edx, [esi+4] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebx, [esp+4] |
mov ecx, [esp+8] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+1Ch] |
and ebx, [esp] |
and edi, [esp+0Ch] |
xor ecx, ebx |
and ebp, [esp+10h] |
xor edi, ecx |
mov edx, [esi+8] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebx, [esp] |
mov ecx, [esp+4] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+18h] |
and ebx, [esp+1Ch] |
and edi, [esp+8] |
xor ecx, ebx |
and ebp, [esp+0Ch] |
xor edi, ecx |
mov edx, [esi+0Ch] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebx, [esp+1Ch] |
mov ecx, [esp] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+14h] |
and ebx, [esp+18h] |
and edi, [esp+4] |
xor ecx, ebx |
and ebp, [esp+8] |
xor edi, ecx |
mov edx, [esi+10h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebx, [esp+18h] |
mov ecx, [esp+1Ch] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+10h] |
and ebx, [esp+14h] |
and edi, [esp] |
xor ecx, ebx |
and ebp, [esp+4] |
xor edi, ecx |
mov edx, [esi+14h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebx, [esp+14h] |
mov ecx, [esp+18h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+0Ch] |
and ebx, [esp+10h] |
and edi, [esp+1Ch] |
xor ecx, ebx |
and ebp, [esp] |
xor edi, ecx |
mov edx, [esi+18h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebx, [esp+10h] |
mov ecx, [esp+14h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+8] |
and ebx, [esp+0Ch] |
and edi, [esp+18h] |
xor ecx, ebx |
and ebp, [esp+1Ch] |
xor edi, ecx |
mov edx, [esi+1Ch] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebx, [esp+0Ch] |
mov ecx, [esp+10h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+4] |
and ebx, [esp+8] |
and edi, [esp+14h] |
xor ecx, ebx |
and ebp, [esp+18h] |
xor edi, ecx |
mov edx, [esi+20h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebx, [esp+8] |
mov ecx, [esp+0Ch] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp] |
and ebx, [esp+4] |
and edi, [esp+10h] |
xor ecx, ebx |
and ebp, [esp+14h] |
xor edi, ecx |
mov edx, [esi+24h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebx, [esp+4] |
mov ecx, [esp+8] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+1Ch] |
and ebx, [esp] |
and edi, [esp+0Ch] |
xor ecx, ebx |
and ebp, [esp+10h] |
xor edi, ecx |
mov edx, [esi+28h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebx, [esp] |
mov ecx, [esp+4] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+18h] |
and ebx, [esp+1Ch] |
and edi, [esp+8] |
xor ecx, ebx |
and ebp, [esp+0Ch] |
xor edi, ecx |
mov edx, [esi+2Ch] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebx, [esp+1Ch] |
mov ecx, [esp] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+14h] |
and ebx, [esp+18h] |
and edi, [esp+4] |
xor ecx, ebx |
and ebp, [esp+8] |
xor edi, ecx |
mov edx, [esi+30h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebx, [esp+18h] |
mov ecx, [esp+1Ch] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+10h] |
and ebx, [esp+14h] |
and edi, [esp] |
xor ecx, ebx |
and ebp, [esp+4] |
xor edi, ecx |
mov edx, [esi+34h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebx, [esp+14h] |
mov ecx, [esp+18h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+0Ch] |
and ebx, [esp+10h] |
and edi, [esp+1Ch] |
xor ecx, ebx |
and ebp, [esp] |
xor edi, ecx |
mov edx, [esi+38h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebx, [esp+10h] |
mov ecx, [esp+14h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+8] |
and ebx, [esp+0Ch] |
and edi, [esp+18h] |
xor ecx, ebx |
and ebp, [esp+1Ch] |
xor edi, ecx |
mov edx, [esi+3Ch] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebx, [esp+0Ch] |
mov ecx, [esp+10h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+4] |
and ebx, [esp+8] |
and edi, [esp+14h] |
xor ecx, ebx |
and ebp, [esp+18h] |
xor edi, ecx |
mov edx, [esi+40h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebx, [esp+8] |
mov ecx, [esp+0Ch] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp] |
and ebx, [esp+4] |
and edi, [esp+10h] |
xor ecx, ebx |
and ebp, [esp+14h] |
xor edi, ecx |
mov edx, [esi+44h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebx, [esp+4] |
mov ecx, [esp+8] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+1Ch] |
and ebx, [esp] |
and edi, [esp+0Ch] |
xor ecx, ebx |
and ebp, [esp+10h] |
xor edi, ecx |
mov edx, [esi+48h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebx, [esp] |
mov ecx, [esp+4] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+18h] |
and ebx, [esp+1Ch] |
and edi, [esp+8] |
xor ecx, ebx |
and ebp, [esp+0Ch] |
xor edi, ecx |
mov edx, [esi+4Ch] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebx, [esp+1Ch] |
mov ecx, [esp] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+14h] |
and ebx, [esp+18h] |
and edi, [esp+4] |
xor ecx, ebx |
and ebp, [esp+8] |
xor edi, ecx |
mov edx, [esi+50h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebx, [esp+18h] |
mov ecx, [esp+1Ch] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+10h] |
and ebx, [esp+14h] |
and edi, [esp] |
xor ecx, ebx |
and ebp, [esp+4] |
xor edi, ecx |
mov edx, [esi+54h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebx, [esp+14h] |
mov ecx, [esp+18h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+0Ch] |
and ebx, [esp+10h] |
and edi, [esp+1Ch] |
xor ecx, ebx |
and ebp, [esp] |
xor edi, ecx |
mov edx, [esi+58h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebx, [esp+10h] |
mov ecx, [esp+14h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+8] |
and ebx, [esp+0Ch] |
and edi, [esp+18h] |
xor ecx, ebx |
and ebp, [esp+1Ch] |
xor edi, ecx |
mov edx, [esi+5Ch] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebx, [esp+0Ch] |
mov ecx, [esp+10h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+4] |
and ebx, [esp+8] |
and edi, [esp+14h] |
xor ecx, ebx |
and ebp, [esp+18h] |
xor edi, ecx |
mov edx, [esi+60h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebx, [esp+8] |
mov ecx, [esp+0Ch] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp] |
and ebx, [esp+4] |
and edi, [esp+10h] |
xor ecx, ebx |
and ebp, [esp+14h] |
xor edi, ecx |
mov edx, [esi+64h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebx, [esp+4] |
mov ecx, [esp+8] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+1Ch] |
and ebx, [esp] |
and edi, [esp+0Ch] |
xor ecx, ebx |
and ebp, [esp+10h] |
xor edi, ecx |
mov edx, [esi+68h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebx, [esp] |
mov ecx, [esp+4] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+18h] |
and ebx, [esp+1Ch] |
and edi, [esp+8] |
xor ecx, ebx |
and ebp, [esp+0Ch] |
xor edi, ecx |
mov edx, [esi+6Ch] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebx, [esp+1Ch] |
mov ecx, [esp] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+14h] |
and ebx, [esp+18h] |
and edi, [esp+4] |
xor ecx, ebx |
and ebp, [esp+8] |
xor edi, ecx |
mov edx, [esi+70h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebx, [esp+18h] |
mov ecx, [esp+1Ch] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+10h] |
and ebx, [esp+14h] |
and edi, [esp] |
xor ecx, ebx |
and ebp, [esp+4] |
xor edi, ecx |
mov edx, [esi+74h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebx, [esp+14h] |
mov ecx, [esp+18h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+0Ch] |
and ebx, [esp+10h] |
and edi, [esp+1Ch] |
xor ecx, ebx |
and ebp, [esp] |
xor edi, ecx |
mov edx, [esi+78h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebx, [esp+10h] |
mov ecx, [esp+14h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+8] |
and ebx, [esp+0Ch] |
and edi, [esp+18h] |
xor ecx, ebx |
and ebp, [esp+1Ch] |
xor edi, ecx |
mov edx, [esi+7Ch] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebp, [esp] |
mov ebx, [esp+4] |
mov edi, [esp+8] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+0Ch] |
and ebx, edi |
mov edx, [esp+18h] |
and ebp, ecx |
xor ebx, [esp+10h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+4] |
and ebx, [esp+14h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+14h] |
xor ecx, ebx |
and edi, [esp] |
xor ecx, edi |
lea ebp, [eax+ebp+452821E6h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebx, [esp] |
mov edi, [esp+4] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+8] |
and ebx, edi |
mov edx, [esp+14h] |
and ebp, ecx |
xor ebx, [esp+0Ch] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp] |
and ebx, [esp+10h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+38h] |
xor ecx, ebx |
and edi, [esp+1Ch] |
xor ecx, edi |
lea ebp, [eax+ebp+38D01377h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebx, [esp+1Ch] |
mov edi, [esp] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+4] |
and ebx, edi |
mov edx, [esp+10h] |
and ebp, ecx |
xor ebx, [esp+8] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+1Ch] |
and ebx, [esp+0Ch] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+68h] |
xor ecx, ebx |
and edi, [esp+18h] |
xor ecx, edi |
lea ebp, [eax+ebp-41AB9931h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebx, [esp+18h] |
mov edi, [esp+1Ch] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp] |
and ebx, edi |
mov edx, [esp+0Ch] |
and ebp, ecx |
xor ebx, [esp+4] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+18h] |
and ebx, [esp+8] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+48h] |
xor ecx, ebx |
and edi, [esp+14h] |
xor ecx, edi |
lea ebp, [eax+ebp+34E90C6Ch] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebx, [esp+14h] |
mov edi, [esp+18h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+1Ch] |
and ebx, edi |
mov edx, [esp+8] |
and ebp, ecx |
xor ebx, [esp] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+14h] |
and ebx, [esp+4] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+2Ch] |
xor ecx, ebx |
and edi, [esp+10h] |
xor ecx, edi |
lea ebp, [eax+ebp-3F53D649h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebx, [esp+10h] |
mov edi, [esp+14h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+18h] |
and ebx, edi |
mov edx, [esp+4] |
and ebp, ecx |
xor ebx, [esp+1Ch] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+10h] |
and ebx, [esp] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+70h] |
xor ecx, ebx |
and edi, [esp+0Ch] |
xor ecx, edi |
lea ebp, [eax+ebp-3683AF23h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebx, [esp+0Ch] |
mov edi, [esp+10h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+14h] |
and ebx, edi |
mov edx, [esp] |
and ebp, ecx |
xor ebx, [esp+18h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+0Ch] |
and ebx, [esp+1Ch] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+1Ch] |
xor ecx, ebx |
and edi, [esp+8] |
xor ecx, edi |
lea ebp, [eax+ebp+3F84D5B5h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebx, [esp+8] |
mov edi, [esp+0Ch] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+10h] |
and ebx, edi |
mov edx, [esp+1Ch] |
and ebp, ecx |
xor ebx, [esp+14h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+8] |
and ebx, [esp+18h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+40h] |
xor ecx, ebx |
and edi, [esp+4] |
xor ecx, edi |
lea ebp, [eax+ebp-4AB8F6E9h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebx, [esp+4] |
mov edi, [esp+8] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+0Ch] |
and ebx, edi |
mov edx, [esp+18h] |
and ebp, ecx |
xor ebx, [esp+10h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+4] |
and ebx, [esp+14h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi] |
xor ecx, ebx |
and edi, [esp] |
xor ecx, edi |
lea ebp, [eax+ebp-6DE92A27h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebx, [esp] |
mov edi, [esp+4] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+8] |
and ebx, edi |
mov edx, [esp+14h] |
and ebp, ecx |
xor ebx, [esp+0Ch] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp] |
and ebx, [esp+10h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+5Ch] |
xor ecx, ebx |
and edi, [esp+1Ch] |
xor ecx, edi |
lea ebp, [eax+ebp-768604E5h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebx, [esp+1Ch] |
mov edi, [esp] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+4] |
and ebx, edi |
mov edx, [esp+10h] |
and ebp, ecx |
xor ebx, [esp+8] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+1Ch] |
and ebx, [esp+0Ch] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+50h] |
xor ecx, ebx |
and edi, [esp+18h] |
xor ecx, edi |
lea ebp, [eax+ebp-2ECEF45Ah] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebx, [esp+18h] |
mov edi, [esp+1Ch] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp] |
and ebx, edi |
mov edx, [esp+0Ch] |
and ebp, ecx |
xor ebx, [esp+4] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+18h] |
and ebx, [esp+8] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+58h] |
xor ecx, ebx |
and edi, [esp+14h] |
xor ecx, edi |
lea ebp, [eax+ebp-67204A54h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebx, [esp+14h] |
mov edi, [esp+18h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+1Ch] |
and ebx, edi |
mov edx, [esp+8] |
and ebp, ecx |
xor ebx, [esp] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+14h] |
and ebx, [esp+4] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+4] |
xor ecx, ebx |
and edi, [esp+10h] |
xor ecx, edi |
lea ebp, [eax+ebp+2FFD72DBh] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebx, [esp+10h] |
mov edi, [esp+14h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+18h] |
and ebx, edi |
mov edx, [esp+4] |
and ebp, ecx |
xor ebx, [esp+1Ch] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+10h] |
and ebx, [esp] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+28h] |
xor ecx, ebx |
and edi, [esp+0Ch] |
xor ecx, edi |
lea ebp, [eax+ebp-2FE52049h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebx, [esp+0Ch] |
mov edi, [esp+10h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+14h] |
and ebx, edi |
mov edx, [esp] |
and ebp, ecx |
xor ebx, [esp+18h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+0Ch] |
and ebx, [esp+1Ch] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+10h] |
xor ecx, ebx |
and edi, [esp+8] |
xor ecx, edi |
lea ebp, [eax+ebp-471E5013h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebx, [esp+8] |
mov edi, [esp+0Ch] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+10h] |
and ebx, edi |
mov edx, [esp+1Ch] |
and ebp, ecx |
xor ebx, [esp+14h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+8] |
and ebx, [esp+18h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+20h] |
xor ecx, ebx |
and edi, [esp+4] |
xor ecx, edi |
lea ebp, [eax+ebp+6A267E96h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebx, [esp+4] |
mov edi, [esp+8] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+0Ch] |
and ebx, edi |
mov edx, [esp+18h] |
and ebp, ecx |
xor ebx, [esp+10h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+4] |
and ebx, [esp+14h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+78h] |
xor ecx, ebx |
and edi, [esp] |
xor ecx, edi |
lea ebp, [eax+ebp-45836FBBh] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebx, [esp] |
mov edi, [esp+4] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+8] |
and ebx, edi |
mov edx, [esp+14h] |
and ebp, ecx |
xor ebx, [esp+0Ch] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp] |
and ebx, [esp+10h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+0Ch] |
xor ecx, ebx |
and edi, [esp+1Ch] |
xor ecx, edi |
lea ebp, [eax+ebp-0ED38067h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebx, [esp+1Ch] |
mov edi, [esp] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+4] |
and ebx, edi |
mov edx, [esp+10h] |
and ebp, ecx |
xor ebx, [esp+8] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+1Ch] |
and ebx, [esp+0Ch] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+54h] |
xor ecx, ebx |
and edi, [esp+18h] |
xor ecx, edi |
lea ebp, [eax+ebp+24A19947h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebx, [esp+18h] |
mov edi, [esp+1Ch] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp] |
and ebx, edi |
mov edx, [esp+0Ch] |
and ebp, ecx |
xor ebx, [esp+4] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+18h] |
and ebx, [esp+8] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+24h] |
xor ecx, ebx |
and edi, [esp+14h] |
xor ecx, edi |
lea ebp, [eax+ebp-4C6E9309h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebx, [esp+14h] |
mov edi, [esp+18h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+1Ch] |
and ebx, edi |
mov edx, [esp+8] |
and ebp, ecx |
xor ebx, [esp] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+14h] |
and ebx, [esp+4] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+44h] |
xor ecx, ebx |
and edi, [esp+10h] |
xor ecx, edi |
lea ebp, [eax+ebp+801F2E2h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebx, [esp+10h] |
mov edi, [esp+14h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+18h] |
and ebx, edi |
mov edx, [esp+4] |
and ebp, ecx |
xor ebx, [esp+1Ch] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+10h] |
and ebx, [esp] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+60h] |
xor ecx, ebx |
and edi, [esp+0Ch] |
xor ecx, edi |
lea ebp, [eax+ebp-7A7103EAh] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebx, [esp+0Ch] |
mov edi, [esp+10h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+14h] |
and ebx, edi |
mov edx, [esp] |
and ebp, ecx |
xor ebx, [esp+18h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+0Ch] |
and ebx, [esp+1Ch] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+74h] |
xor ecx, ebx |
and edi, [esp+8] |
xor ecx, edi |
lea ebp, [eax+ebp+636920D8h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebx, [esp+8] |
mov edi, [esp+0Ch] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+10h] |
and ebx, edi |
mov edx, [esp+1Ch] |
and ebp, ecx |
xor ebx, [esp+14h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+8] |
and ebx, [esp+18h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+18h] |
xor ecx, ebx |
and edi, [esp+4] |
xor ecx, edi |
lea ebp, [eax+ebp+71574E69h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebx, [esp+4] |
mov edi, [esp+8] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+0Ch] |
and ebx, edi |
mov edx, [esp+18h] |
and ebp, ecx |
xor ebx, [esp+10h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+4] |
and ebx, [esp+14h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+4Ch] |
xor ecx, ebx |
and edi, [esp] |
xor ecx, edi |
lea ebp, [eax+ebp-5BA7015Dh] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebx, [esp] |
mov edi, [esp+4] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+8] |
and ebx, edi |
mov edx, [esp+14h] |
and ebp, ecx |
xor ebx, [esp+0Ch] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp] |
and ebx, [esp+10h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+30h] |
xor ecx, ebx |
and edi, [esp+1Ch] |
xor ecx, edi |
lea ebp, [eax+ebp-0B6CC282h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebx, [esp+1Ch] |
mov edi, [esp] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+4] |
and ebx, edi |
mov edx, [esp+10h] |
and ebp, ecx |
xor ebx, [esp+8] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+1Ch] |
and ebx, [esp+0Ch] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+3Ch] |
xor ecx, ebx |
and edi, [esp+18h] |
xor ecx, edi |
lea ebp, [eax+ebp+0D95748Fh] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebx, [esp+18h] |
mov edi, [esp+1Ch] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp] |
and ebx, edi |
mov edx, [esp+0Ch] |
and ebp, ecx |
xor ebx, [esp+4] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+18h] |
and ebx, [esp+8] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+34h] |
xor ecx, ebx |
and edi, [esp+14h] |
xor ecx, edi |
lea ebp, [eax+ebp+728EB658h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebx, [esp+14h] |
mov edi, [esp+18h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+1Ch] |
and ebx, edi |
mov edx, [esp+8] |
and ebp, ecx |
xor ebx, [esp] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+14h] |
and ebx, [esp+4] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+8] |
xor ecx, ebx |
and edi, [esp+10h] |
xor ecx, edi |
lea ebp, [eax+ebp+718BCD58h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebx, [esp+10h] |
mov edi, [esp+14h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+18h] |
and ebx, edi |
mov edx, [esp+4] |
and ebp, ecx |
xor ebx, [esp+1Ch] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+10h] |
and ebx, [esp] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+64h] |
xor ecx, ebx |
and edi, [esp+0Ch] |
xor ecx, edi |
lea ebp, [eax+ebp-7DEAB512h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebx, [esp+0Ch] |
mov edi, [esp+10h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+14h] |
and ebx, edi |
mov edx, [esp] |
and ebp, ecx |
xor ebx, [esp+18h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+0Ch] |
and ebx, [esp+1Ch] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+7Ch] |
xor ecx, ebx |
and edi, [esp+8] |
xor ecx, edi |
lea ebp, [eax+ebp+7B54A41Dh] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebx, [esp+8] |
mov edi, [esp+0Ch] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+10h] |
and ebx, edi |
mov edx, [esp+1Ch] |
and ebp, ecx |
xor ebx, [esp+14h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+8] |
and ebx, [esp+18h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+6Ch] |
xor ecx, ebx |
and edi, [esp+4] |
xor ecx, edi |
lea ebp, [eax+ebp-3DA5A64Bh] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebx, [esp+10h] |
mov ecx, [esp+14h] |
mov edi, ebx |
and ebx, [esp+4] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+4Ch] |
xor edi, [esp+18h] |
and ecx, [esp+8] |
and edi, [esp+0Ch] |
xor ecx, ebx |
lea ebp, [eax+ebp-63CF2AC7h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebx, [esp+0Ch] |
mov ecx, [esp+10h] |
mov edi, ebx |
and ebx, [esp] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+24h] |
xor edi, [esp+14h] |
and ecx, [esp+4] |
and edi, [esp+8] |
xor ecx, ebx |
lea ebp, [eax+ebp+2AF26013h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebx, [esp+8] |
mov ecx, [esp+0Ch] |
mov edi, ebx |
and ebx, [esp+1Ch] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+10h] |
xor edi, [esp+10h] |
and ecx, [esp] |
and edi, [esp+4] |
xor ecx, ebx |
lea ebp, [eax+ebp-3A2E4FDDh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebx, [esp+4] |
mov ecx, [esp+8] |
mov edi, ebx |
and ebx, [esp+18h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+50h] |
xor edi, [esp+0Ch] |
and ecx, [esp+1Ch] |
and edi, [esp] |
xor ecx, ebx |
lea ebp, [eax+ebp+286085F0h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebx, [esp] |
mov ecx, [esp+4] |
mov edi, ebx |
and ebx, [esp+14h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+70h] |
xor edi, [esp+8] |
and ecx, [esp+18h] |
and edi, [esp+1Ch] |
xor ecx, ebx |
lea ebp, [eax+ebp-35BE86E8h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebx, [esp+1Ch] |
mov ecx, [esp] |
mov edi, ebx |
and ebx, [esp+10h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+44h] |
xor edi, [esp+4] |
and ecx, [esp+14h] |
and edi, [esp+18h] |
xor ecx, ebx |
lea ebp, [eax+ebp-4724C711h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebx, [esp+18h] |
mov ecx, [esp+1Ch] |
mov edi, ebx |
and ebx, [esp+0Ch] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+20h] |
xor edi, [esp] |
and ecx, [esp+10h] |
and edi, [esp+14h] |
xor ecx, ebx |
lea ebp, [eax+ebp-71862350h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebx, [esp+14h] |
mov ecx, [esp+18h] |
mov edi, ebx |
and ebx, [esp+8] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+58h] |
xor edi, [esp+1Ch] |
and ecx, [esp+0Ch] |
and edi, [esp+10h] |
xor ecx, ebx |
lea ebp, [eax+ebp+603A180Eh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebx, [esp+10h] |
mov ecx, [esp+14h] |
mov edi, ebx |
and ebx, [esp+4] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+74h] |
xor edi, [esp+18h] |
and ecx, [esp+8] |
and edi, [esp+0Ch] |
xor ecx, ebx |
lea ebp, [eax+ebp+6C9E0E8Bh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebx, [esp+0Ch] |
mov ecx, [esp+10h] |
mov edi, ebx |
and ebx, [esp] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+38h] |
xor edi, [esp+14h] |
and ecx, [esp+4] |
and edi, [esp+8] |
xor ecx, ebx |
lea ebp, [eax+ebp-4FE175C2h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebx, [esp+8] |
mov ecx, [esp+0Ch] |
mov edi, ebx |
and ebx, [esp+1Ch] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+64h] |
xor edi, [esp+10h] |
and ecx, [esp] |
and edi, [esp+4] |
xor ecx, ebx |
lea ebp, [eax+ebp-28EA883Fh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebx, [esp+4] |
mov ecx, [esp+8] |
mov edi, ebx |
and ebx, [esp+18h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+30h] |
xor edi, [esp+0Ch] |
and ecx, [esp+1Ch] |
and edi, [esp] |
xor ecx, ebx |
lea ebp, [eax+ebp-42CEB4D9h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebx, [esp] |
mov ecx, [esp+4] |
mov edi, ebx |
and ebx, [esp+14h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+60h] |
xor edi, [esp+8] |
and ecx, [esp+18h] |
and edi, [esp+1Ch] |
xor ecx, ebx |
lea ebp, [eax+ebp+78AF2FDAh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebx, [esp+1Ch] |
mov ecx, [esp] |
mov edi, ebx |
and ebx, [esp+10h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+78h] |
xor edi, [esp+4] |
and ecx, [esp+14h] |
and edi, [esp+18h] |
xor ecx, ebx |
lea ebp, [eax+ebp+55605C60h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebx, [esp+18h] |
mov ecx, [esp+1Ch] |
mov edi, ebx |
and ebx, [esp+0Ch] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+40h] |
xor edi, [esp] |
and ecx, [esp+10h] |
and edi, [esp+14h] |
xor ecx, ebx |
lea ebp, [eax+ebp-19AADA0Dh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebx, [esp+14h] |
mov ecx, [esp+18h] |
mov edi, ebx |
and ebx, [esp+8] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+68h] |
xor edi, [esp+1Ch] |
and ecx, [esp+0Ch] |
and edi, [esp+10h] |
xor ecx, ebx |
lea ebp, [eax+ebp-55AA546Ch] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebx, [esp+10h] |
mov ecx, [esp+14h] |
mov edi, ebx |
and ebx, [esp+4] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+7Ch] |
xor edi, [esp+18h] |
and ecx, [esp+8] |
and edi, [esp+0Ch] |
xor ecx, ebx |
lea ebp, [eax+ebp+57489862h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebx, [esp+0Ch] |
mov ecx, [esp+10h] |
mov edi, ebx |
and ebx, [esp] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+3Ch] |
xor edi, [esp+14h] |
and ecx, [esp+4] |
and edi, [esp+8] |
xor ecx, ebx |
lea ebp, [eax+ebp+63E81440h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebx, [esp+8] |
mov ecx, [esp+0Ch] |
mov edi, ebx |
and ebx, [esp+1Ch] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+1Ch] |
xor edi, [esp+10h] |
and ecx, [esp] |
and edi, [esp+4] |
xor ecx, ebx |
lea ebp, [eax+ebp+55CA396Ah] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebx, [esp+4] |
mov ecx, [esp+8] |
mov edi, ebx |
and ebx, [esp+18h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+0Ch] |
xor edi, [esp+0Ch] |
and ecx, [esp+1Ch] |
and edi, [esp] |
xor ecx, ebx |
lea ebp, [eax+ebp+2AAB10B6h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebx, [esp] |
mov ecx, [esp+4] |
mov edi, ebx |
and ebx, [esp+14h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+4] |
xor edi, [esp+8] |
and ecx, [esp+18h] |
and edi, [esp+1Ch] |
xor ecx, ebx |
lea ebp, [eax+ebp-4B33A3CCh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebx, [esp+1Ch] |
mov ecx, [esp] |
mov edi, ebx |
and ebx, [esp+10h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi] |
xor edi, [esp+4] |
and ecx, [esp+14h] |
and edi, [esp+18h] |
xor ecx, ebx |
lea ebp, [eax+ebp+1141E8CEh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebx, [esp+18h] |
mov ecx, [esp+1Ch] |
mov edi, ebx |
and ebx, [esp+0Ch] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+48h] |
xor edi, [esp] |
and ecx, [esp+10h] |
and edi, [esp+14h] |
xor ecx, ebx |
lea ebp, [eax+ebp-5EAB7951h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebx, [esp+14h] |
mov ecx, [esp+18h] |
mov edi, ebx |
and ebx, [esp+8] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+6Ch] |
xor edi, [esp+1Ch] |
and ecx, [esp+0Ch] |
and edi, [esp+10h] |
xor ecx, ebx |
lea ebp, [eax+ebp+7C72E993h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebx, [esp+10h] |
mov ecx, [esp+14h] |
mov edi, ebx |
and ebx, [esp+4] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+34h] |
xor edi, [esp+18h] |
and ecx, [esp+8] |
and edi, [esp+0Ch] |
xor ecx, ebx |
lea ebp, [eax+ebp-4C11EBEFh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebx, [esp+0Ch] |
mov ecx, [esp+10h] |
mov edi, ebx |
and ebx, [esp] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+18h] |
xor edi, [esp+14h] |
and ecx, [esp+4] |
and edi, [esp+8] |
xor ecx, ebx |
lea ebp, [eax+ebp+636FBC2Ah] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebx, [esp+8] |
mov ecx, [esp+0Ch] |
mov edi, ebx |
and ebx, [esp+1Ch] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+54h] |
xor edi, [esp+10h] |
and ecx, [esp] |
and edi, [esp+4] |
xor ecx, ebx |
lea ebp, [eax+ebp+2BA9C55Dh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebx, [esp+4] |
mov ecx, [esp+8] |
mov edi, ebx |
and ebx, [esp+18h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+28h] |
xor edi, [esp+0Ch] |
and ecx, [esp+1Ch] |
and edi, [esp] |
xor ecx, ebx |
lea ebp, [eax+ebp+741831F6h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebx, [esp] |
mov ecx, [esp+4] |
mov edi, ebx |
and ebx, [esp+14h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+5Ch] |
xor edi, [esp+8] |
and ecx, [esp+18h] |
and edi, [esp+1Ch] |
xor ecx, ebx |
lea ebp, [eax+ebp-31A3C1EAh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebx, [esp+1Ch] |
mov ecx, [esp] |
mov edi, ebx |
and ebx, [esp+10h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+2Ch] |
xor edi, [esp+4] |
and ecx, [esp+14h] |
and edi, [esp+18h] |
xor ecx, ebx |
lea ebp, [eax+ebp-64786CE2h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebx, [esp+18h] |
mov ecx, [esp+1Ch] |
mov edi, ebx |
and ebx, [esp+0Ch] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+14h] |
xor edi, [esp] |
and ecx, [esp+10h] |
and edi, [esp+14h] |
xor ecx, ebx |
lea ebp, [eax+ebp-502945CDh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebx, [esp+14h] |
mov ecx, [esp+18h] |
mov edi, ebx |
and ebx, [esp+8] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+8] |
xor edi, [esp+1Ch] |
and ecx, [esp+0Ch] |
and edi, [esp+10h] |
xor ecx, ebx |
lea ebp, [eax+ebp+6C24CF5Ch] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov edi, [esp+24h] |
mov eax, [esp] |
mov ebx, [esp+4] |
add [edi], eax |
add [edi+4], ebx |
mov ecx, [esp+8] |
mov edx, [esp+0Ch] |
add [edi+8], ecx |
add [edi+0Ch], edx |
mov eax, [esp+10h] |
mov ebx, [esp+14h] |
add [edi+10h], eax |
add [edi+14h], ebx |
mov ebp, [esp+28h] |
mov ecx, [esp+18h] |
mov edx, [esp+1Ch] |
mov esp, ebp |
add [edi+18h], ecx |
add [edi+1Ch], edx |
pop ebp |
pop edi |
pop esi |
pop ebx |
end; |
procedure THashBaseHaval.DoTransform4(Buffer: PUInt32Array); |
asm |
push ebx |
push esi |
push edi |
lea edi, [eax].THashBaseHaval.FDigest |
mov esi, edx |
push ebp |
mov ebp, esp |
add esp, 0FFFFFFD4h |
and esp, 0FFFFFFC0h |
mov eax, [edi] |
mov ebx, [edi+4] |
mov [esp+20h], esi |
mov [esp+24h], edi |
mov [esp+28h], ebp |
mov [esp], eax |
mov [esp+4], ebx |
mov ecx, [edi+8] |
mov edx, [edi+0Ch] |
mov [esp+8], ecx |
mov [esp+0Ch], edx |
mov eax, [edi+10h] |
mov ebx, [edi+14h] |
mov [esp+10h], eax |
mov [esp+14h], ebx |
mov ecx, [edi+18h] |
mov edx, [edi+1Ch] |
mov [esp+18h], ecx |
mov [esp+1Ch], edx |
mov eax, edx |
mov ebp, [esp+18h] |
mov ebx, [esp+4] |
mov ecx, [esp] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+8] |
and ebx, [esp+0Ch] |
and edi, [esp+10h] |
xor ecx, ebx |
and ebp, [esp+14h] |
xor edi, ecx |
mov edx, [esi] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebp, [esp+14h] |
mov ebx, [esp] |
mov ecx, [esp+1Ch] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+4] |
and ebx, [esp+8] |
and edi, [esp+0Ch] |
xor ecx, ebx |
and ebp, [esp+10h] |
xor edi, ecx |
mov edx, [esi+4] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebp, [esp+10h] |
mov ebx, [esp+1Ch] |
mov ecx, [esp+18h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp] |
and ebx, [esp+4] |
and edi, [esp+8] |
xor ecx, ebx |
and ebp, [esp+0Ch] |
xor edi, ecx |
mov edx, [esi+8] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebp, [esp+0Ch] |
mov ebx, [esp+18h] |
mov ecx, [esp+14h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+1Ch] |
and ebx, [esp] |
and edi, [esp+4] |
xor ecx, ebx |
and ebp, [esp+8] |
xor edi, ecx |
mov edx, [esi+0Ch] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebp, [esp+8] |
mov ebx, [esp+14h] |
mov ecx, [esp+10h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+18h] |
and ebx, [esp+1Ch] |
and edi, [esp] |
xor ecx, ebx |
and ebp, [esp+4] |
xor edi, ecx |
mov edx, [esi+10h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebp, [esp+4] |
mov ebx, [esp+10h] |
mov ecx, [esp+0Ch] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+14h] |
and ebx, [esp+18h] |
and edi, [esp+1Ch] |
xor ecx, ebx |
and ebp, [esp] |
xor edi, ecx |
mov edx, [esi+14h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebp, [esp] |
mov ebx, [esp+0Ch] |
mov ecx, [esp+8] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+10h] |
and ebx, [esp+14h] |
and edi, [esp+18h] |
xor ecx, ebx |
and ebp, [esp+1Ch] |
xor edi, ecx |
mov edx, [esi+18h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebp, [esp+1Ch] |
mov ebx, [esp+8] |
mov ecx, [esp+4] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+0Ch] |
and ebx, [esp+10h] |
and edi, [esp+14h] |
xor ecx, ebx |
and ebp, [esp+18h] |
xor edi, ecx |
mov edx, [esi+1Ch] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebp, [esp+18h] |
mov ebx, [esp+4] |
mov ecx, [esp] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+8] |
and ebx, [esp+0Ch] |
and edi, [esp+10h] |
xor ecx, ebx |
and ebp, [esp+14h] |
xor edi, ecx |
mov edx, [esi+20h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebp, [esp+14h] |
mov ebx, [esp] |
mov ecx, [esp+1Ch] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+4] |
and ebx, [esp+8] |
and edi, [esp+0Ch] |
xor ecx, ebx |
and ebp, [esp+10h] |
xor edi, ecx |
mov edx, [esi+24h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebp, [esp+10h] |
mov ebx, [esp+1Ch] |
mov ecx, [esp+18h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp] |
and ebx, [esp+4] |
and edi, [esp+8] |
xor ecx, ebx |
and ebp, [esp+0Ch] |
xor edi, ecx |
mov edx, [esi+28h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebp, [esp+0Ch] |
mov ebx, [esp+18h] |
mov ecx, [esp+14h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+1Ch] |
and ebx, [esp] |
and edi, [esp+4] |
xor ecx, ebx |
and ebp, [esp+8] |
xor edi, ecx |
mov edx, [esi+2Ch] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebp, [esp+8] |
mov ebx, [esp+14h] |
mov ecx, [esp+10h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+18h] |
and ebx, [esp+1Ch] |
and edi, [esp] |
xor ecx, ebx |
and ebp, [esp+4] |
xor edi, ecx |
mov edx, [esi+30h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebp, [esp+4] |
mov ebx, [esp+10h] |
mov ecx, [esp+0Ch] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+14h] |
and ebx, [esp+18h] |
and edi, [esp+1Ch] |
xor ecx, ebx |
and ebp, [esp] |
xor edi, ecx |
mov edx, [esi+34h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebp, [esp] |
mov ebx, [esp+0Ch] |
mov ecx, [esp+8] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+10h] |
and ebx, [esp+14h] |
and edi, [esp+18h] |
xor ecx, ebx |
and ebp, [esp+1Ch] |
xor edi, ecx |
mov edx, [esi+38h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebp, [esp+1Ch] |
mov ebx, [esp+8] |
mov ecx, [esp+4] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+0Ch] |
and ebx, [esp+10h] |
and edi, [esp+14h] |
xor ecx, ebx |
and ebp, [esp+18h] |
xor edi, ecx |
mov edx, [esi+3Ch] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebp, [esp+18h] |
mov ebx, [esp+4] |
mov ecx, [esp] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+8] |
and ebx, [esp+0Ch] |
and edi, [esp+10h] |
xor ecx, ebx |
and ebp, [esp+14h] |
xor edi, ecx |
mov edx, [esi+40h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebp, [esp+14h] |
mov ebx, [esp] |
mov ecx, [esp+1Ch] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+4] |
and ebx, [esp+8] |
and edi, [esp+0Ch] |
xor ecx, ebx |
and ebp, [esp+10h] |
xor edi, ecx |
mov edx, [esi+44h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebp, [esp+10h] |
mov ebx, [esp+1Ch] |
mov ecx, [esp+18h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp] |
and ebx, [esp+4] |
and edi, [esp+8] |
xor ecx, ebx |
and ebp, [esp+0Ch] |
xor edi, ecx |
mov edx, [esi+48h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebp, [esp+0Ch] |
mov ebx, [esp+18h] |
mov ecx, [esp+14h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+1Ch] |
and ebx, [esp] |
and edi, [esp+4] |
xor ecx, ebx |
and ebp, [esp+8] |
xor edi, ecx |
mov edx, [esi+4Ch] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebp, [esp+8] |
mov ebx, [esp+14h] |
mov ecx, [esp+10h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+18h] |
and ebx, [esp+1Ch] |
and edi, [esp] |
xor ecx, ebx |
and ebp, [esp+4] |
xor edi, ecx |
mov edx, [esi+50h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebp, [esp+4] |
mov ebx, [esp+10h] |
mov ecx, [esp+0Ch] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+14h] |
and ebx, [esp+18h] |
and edi, [esp+1Ch] |
xor ecx, ebx |
and ebp, [esp] |
xor edi, ecx |
mov edx, [esi+54h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebp, [esp] |
mov ebx, [esp+0Ch] |
mov ecx, [esp+8] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+10h] |
and ebx, [esp+14h] |
and edi, [esp+18h] |
xor ecx, ebx |
and ebp, [esp+1Ch] |
xor edi, ecx |
mov edx, [esi+58h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebp, [esp+1Ch] |
mov ebx, [esp+8] |
mov ecx, [esp+4] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+0Ch] |
and ebx, [esp+10h] |
and edi, [esp+14h] |
xor ecx, ebx |
and ebp, [esp+18h] |
xor edi, ecx |
mov edx, [esi+5Ch] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebp, [esp+18h] |
mov ebx, [esp+4] |
mov ecx, [esp] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+8] |
and ebx, [esp+0Ch] |
and edi, [esp+10h] |
xor ecx, ebx |
and ebp, [esp+14h] |
xor edi, ecx |
mov edx, [esi+60h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebp, [esp+14h] |
mov ebx, [esp] |
mov ecx, [esp+1Ch] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+4] |
and ebx, [esp+8] |
and edi, [esp+0Ch] |
xor ecx, ebx |
and ebp, [esp+10h] |
xor edi, ecx |
mov edx, [esi+64h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebp, [esp+10h] |
mov ebx, [esp+1Ch] |
mov ecx, [esp+18h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp] |
and ebx, [esp+4] |
and edi, [esp+8] |
xor ecx, ebx |
and ebp, [esp+0Ch] |
xor edi, ecx |
mov edx, [esi+68h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebp, [esp+0Ch] |
mov ebx, [esp+18h] |
mov ecx, [esp+14h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+1Ch] |
and ebx, [esp] |
and edi, [esp+4] |
xor ecx, ebx |
and ebp, [esp+8] |
xor edi, ecx |
mov edx, [esi+6Ch] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebp, [esp+8] |
mov ebx, [esp+14h] |
mov ecx, [esp+10h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+18h] |
and ebx, [esp+1Ch] |
and edi, [esp] |
xor ecx, ebx |
and ebp, [esp+4] |
xor edi, ecx |
mov edx, [esi+70h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebp, [esp+4] |
mov ebx, [esp+10h] |
mov ecx, [esp+0Ch] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+14h] |
and ebx, [esp+18h] |
and edi, [esp+1Ch] |
xor ecx, ebx |
and ebp, [esp] |
xor edi, ecx |
mov edx, [esi+74h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebp, [esp] |
mov ebx, [esp+0Ch] |
mov ecx, [esp+8] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+10h] |
and ebx, [esp+14h] |
and edi, [esp+18h] |
xor ecx, ebx |
and ebp, [esp+1Ch] |
xor edi, ecx |
mov edx, [esi+78h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebp, [esp+1Ch] |
mov ebx, [esp+8] |
mov ecx, [esp+4] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+0Ch] |
and ebx, [esp+10h] |
and edi, [esp+14h] |
xor ecx, ebx |
and ebp, [esp+18h] |
xor edi, ecx |
mov edx, [esi+7Ch] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebp, [esp] |
mov ebx, [esp+8] |
mov edi, [esp+14h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+18h] |
and ebx, edi |
mov edx, [esp+10h] |
and ebp, ecx |
xor ebx, [esp+0Ch] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+8] |
and ebx, [esp+4] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+14h] |
xor ecx, ebx |
and edi, [esp] |
xor ecx, edi |
lea ebp, [eax+ebp+452821E6h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebx, [esp+4] |
mov edi, [esp+10h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+14h] |
and ebx, edi |
mov edx, [esp+0Ch] |
and ebp, ecx |
xor ebx, [esp+8] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+4] |
and ebx, [esp] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+38h] |
xor ecx, ebx |
and edi, [esp+1Ch] |
xor ecx, edi |
lea ebp, [eax+ebp+38D01377h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebx, [esp] |
mov edi, [esp+0Ch] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+10h] |
and ebx, edi |
mov edx, [esp+8] |
and ebp, ecx |
xor ebx, [esp+4] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp] |
and ebx, [esp+1Ch] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+68h] |
xor ecx, ebx |
and edi, [esp+18h] |
xor ecx, edi |
lea ebp, [eax+ebp-41AB9931h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebx, [esp+1Ch] |
mov edi, [esp+8] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+0Ch] |
and ebx, edi |
mov edx, [esp+4] |
and ebp, ecx |
xor ebx, [esp] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+1Ch] |
and ebx, [esp+18h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+48h] |
xor ecx, ebx |
and edi, [esp+14h] |
xor ecx, edi |
lea ebp, [eax+ebp+34E90C6Ch] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebx, [esp+18h] |
mov edi, [esp+4] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+8] |
and ebx, edi |
mov edx, [esp] |
and ebp, ecx |
xor ebx, [esp+1Ch] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+18h] |
and ebx, [esp+14h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+2Ch] |
xor ecx, ebx |
and edi, [esp+10h] |
xor ecx, edi |
lea ebp, [eax+ebp-3F53D649h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebx, [esp+14h] |
mov edi, [esp] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+4] |
and ebx, edi |
mov edx, [esp+1Ch] |
and ebp, ecx |
xor ebx, [esp+18h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+14h] |
and ebx, [esp+10h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+70h] |
xor ecx, ebx |
and edi, [esp+0Ch] |
xor ecx, edi |
lea ebp, [eax+ebp-3683AF23h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebx, [esp+10h] |
mov edi, [esp+1Ch] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp] |
and ebx, edi |
mov edx, [esp+18h] |
and ebp, ecx |
xor ebx, [esp+14h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+10h] |
and ebx, [esp+0Ch] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+1Ch] |
xor ecx, ebx |
and edi, [esp+8] |
xor ecx, edi |
lea ebp, [eax+ebp+3F84D5B5h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebx, [esp+0Ch] |
mov edi, [esp+18h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+1Ch] |
and ebx, edi |
mov edx, [esp+14h] |
and ebp, ecx |
xor ebx, [esp+10h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+0Ch] |
and ebx, [esp+8] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+40h] |
xor ecx, ebx |
and edi, [esp+4] |
xor ecx, edi |
lea ebp, [eax+ebp-4AB8F6E9h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebx, [esp+8] |
mov edi, [esp+14h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+18h] |
and ebx, edi |
mov edx, [esp+10h] |
and ebp, ecx |
xor ebx, [esp+0Ch] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+8] |
and ebx, [esp+4] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi] |
xor ecx, ebx |
and edi, [esp] |
xor ecx, edi |
lea ebp, [eax+ebp-6DE92A27h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebx, [esp+4] |
mov edi, [esp+10h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+14h] |
and ebx, edi |
mov edx, [esp+0Ch] |
and ebp, ecx |
xor ebx, [esp+8] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+4] |
and ebx, [esp] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+5Ch] |
xor ecx, ebx |
and edi, [esp+1Ch] |
xor ecx, edi |
lea ebp, [eax+ebp-768604E5h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebx, [esp] |
mov edi, [esp+0Ch] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+10h] |
and ebx, edi |
mov edx, [esp+8] |
and ebp, ecx |
xor ebx, [esp+4] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp] |
and ebx, [esp+1Ch] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+50h] |
xor ecx, ebx |
and edi, [esp+18h] |
xor ecx, edi |
lea ebp, [eax+ebp-2ECEF45Ah] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebx, [esp+1Ch] |
mov edi, [esp+8] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+0Ch] |
and ebx, edi |
mov edx, [esp+4] |
and ebp, ecx |
xor ebx, [esp] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+1Ch] |
and ebx, [esp+18h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+58h] |
xor ecx, ebx |
and edi, [esp+14h] |
xor ecx, edi |
lea ebp, [eax+ebp-67204A54h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebx, [esp+18h] |
mov edi, [esp+4] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+8] |
and ebx, edi |
mov edx, [esp] |
and ebp, ecx |
xor ebx, [esp+1Ch] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+18h] |
and ebx, [esp+14h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+4] |
xor ecx, ebx |
and edi, [esp+10h] |
xor ecx, edi |
lea ebp, [eax+ebp+2FFD72DBh] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebx, [esp+14h] |
mov edi, [esp] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+4] |
and ebx, edi |
mov edx, [esp+1Ch] |
and ebp, ecx |
xor ebx, [esp+18h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+14h] |
and ebx, [esp+10h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+28h] |
xor ecx, ebx |
and edi, [esp+0Ch] |
xor ecx, edi |
lea ebp, [eax+ebp-2FE52049h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebx, [esp+10h] |
mov edi, [esp+1Ch] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp] |
and ebx, edi |
mov edx, [esp+18h] |
and ebp, ecx |
xor ebx, [esp+14h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+10h] |
and ebx, [esp+0Ch] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+10h] |
xor ecx, ebx |
and edi, [esp+8] |
xor ecx, edi |
lea ebp, [eax+ebp-471E5013h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebx, [esp+0Ch] |
mov edi, [esp+18h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+1Ch] |
and ebx, edi |
mov edx, [esp+14h] |
and ebp, ecx |
xor ebx, [esp+10h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+0Ch] |
and ebx, [esp+8] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+20h] |
xor ecx, ebx |
and edi, [esp+4] |
xor ecx, edi |
lea ebp, [eax+ebp+6A267E96h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebx, [esp+8] |
mov edi, [esp+14h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+18h] |
and ebx, edi |
mov edx, [esp+10h] |
and ebp, ecx |
xor ebx, [esp+0Ch] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+8] |
and ebx, [esp+4] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+78h] |
xor ecx, ebx |
and edi, [esp] |
xor ecx, edi |
lea ebp, [eax+ebp-45836FBBh] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebx, [esp+4] |
mov edi, [esp+10h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+14h] |
and ebx, edi |
mov edx, [esp+0Ch] |
and ebp, ecx |
xor ebx, [esp+8] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+4] |
and ebx, [esp] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+0Ch] |
xor ecx, ebx |
and edi, [esp+1Ch] |
xor ecx, edi |
lea ebp, [eax+ebp-0ED38067h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebx, [esp] |
mov edi, [esp+0Ch] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+10h] |
and ebx, edi |
mov edx, [esp+8] |
and ebp, ecx |
xor ebx, [esp+4] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp] |
and ebx, [esp+1Ch] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+54h] |
xor ecx, ebx |
and edi, [esp+18h] |
xor ecx, edi |
lea ebp, [eax+ebp+24A19947h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebx, [esp+1Ch] |
mov edi, [esp+8] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+0Ch] |
and ebx, edi |
mov edx, [esp+4] |
and ebp, ecx |
xor ebx, [esp] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+1Ch] |
and ebx, [esp+18h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+24h] |
xor ecx, ebx |
and edi, [esp+14h] |
xor ecx, edi |
lea ebp, [eax+ebp-4C6E9309h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebx, [esp+18h] |
mov edi, [esp+4] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+8] |
and ebx, edi |
mov edx, [esp] |
and ebp, ecx |
xor ebx, [esp+1Ch] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+18h] |
and ebx, [esp+14h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+44h] |
xor ecx, ebx |
and edi, [esp+10h] |
xor ecx, edi |
lea ebp, [eax+ebp+801F2E2h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebx, [esp+14h] |
mov edi, [esp] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+4] |
and ebx, edi |
mov edx, [esp+1Ch] |
and ebp, ecx |
xor ebx, [esp+18h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+14h] |
and ebx, [esp+10h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+60h] |
xor ecx, ebx |
and edi, [esp+0Ch] |
xor ecx, edi |
lea ebp, [eax+ebp-7A7103EAh] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebx, [esp+10h] |
mov edi, [esp+1Ch] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp] |
and ebx, edi |
mov edx, [esp+18h] |
and ebp, ecx |
xor ebx, [esp+14h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+10h] |
and ebx, [esp+0Ch] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+74h] |
xor ecx, ebx |
and edi, [esp+8] |
xor ecx, edi |
lea ebp, [eax+ebp+636920D8h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebx, [esp+0Ch] |
mov edi, [esp+18h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+1Ch] |
and ebx, edi |
mov edx, [esp+14h] |
and ebp, ecx |
xor ebx, [esp+10h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+0Ch] |
and ebx, [esp+8] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+18h] |
xor ecx, ebx |
and edi, [esp+4] |
xor ecx, edi |
lea ebp, [eax+ebp+71574E69h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebx, [esp+8] |
mov edi, [esp+14h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+18h] |
and ebx, edi |
mov edx, [esp+10h] |
and ebp, ecx |
xor ebx, [esp+0Ch] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+8] |
and ebx, [esp+4] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+4Ch] |
xor ecx, ebx |
and edi, [esp] |
xor ecx, edi |
lea ebp, [eax+ebp-5BA7015Dh] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebx, [esp+4] |
mov edi, [esp+10h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+14h] |
and ebx, edi |
mov edx, [esp+0Ch] |
and ebp, ecx |
xor ebx, [esp+8] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+4] |
and ebx, [esp] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+30h] |
xor ecx, ebx |
and edi, [esp+1Ch] |
xor ecx, edi |
lea ebp, [eax+ebp-0B6CC282h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebx, [esp] |
mov edi, [esp+0Ch] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+10h] |
and ebx, edi |
mov edx, [esp+8] |
and ebp, ecx |
xor ebx, [esp+4] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp] |
and ebx, [esp+1Ch] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+3Ch] |
xor ecx, ebx |
and edi, [esp+18h] |
xor ecx, edi |
lea ebp, [eax+ebp+0D95748Fh] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebx, [esp+1Ch] |
mov edi, [esp+8] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+0Ch] |
and ebx, edi |
mov edx, [esp+4] |
and ebp, ecx |
xor ebx, [esp] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+1Ch] |
and ebx, [esp+18h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+34h] |
xor ecx, ebx |
and edi, [esp+14h] |
xor ecx, edi |
lea ebp, [eax+ebp+728EB658h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebx, [esp+18h] |
mov edi, [esp+4] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+8] |
and ebx, edi |
mov edx, [esp] |
and ebp, ecx |
xor ebx, [esp+1Ch] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+18h] |
and ebx, [esp+14h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+8] |
xor ecx, ebx |
and edi, [esp+10h] |
xor ecx, edi |
lea ebp, [eax+ebp+718BCD58h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebx, [esp+14h] |
mov edi, [esp] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+4] |
and ebx, edi |
mov edx, [esp+1Ch] |
and ebp, ecx |
xor ebx, [esp+18h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+14h] |
and ebx, [esp+10h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+64h] |
xor ecx, ebx |
and edi, [esp+0Ch] |
xor ecx, edi |
lea ebp, [eax+ebp-7DEAB512h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebx, [esp+10h] |
mov edi, [esp+1Ch] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp] |
and ebx, edi |
mov edx, [esp+18h] |
and ebp, ecx |
xor ebx, [esp+14h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+10h] |
and ebx, [esp+0Ch] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+7Ch] |
xor ecx, ebx |
and edi, [esp+8] |
xor ecx, edi |
lea ebp, [eax+ebp+7B54A41Dh] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebx, [esp+0Ch] |
mov edi, [esp+18h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+1Ch] |
and ebx, edi |
mov edx, [esp+14h] |
and ebp, ecx |
xor ebx, [esp+10h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+0Ch] |
and ebx, [esp+8] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+6Ch] |
xor ecx, ebx |
and edi, [esp+4] |
xor ecx, edi |
lea ebp, [eax+ebp-3DA5A64Bh] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebp, [esp+14h] |
mov ebx, [esp] |
mov ecx, [esp+8] |
mov edi, ebx |
and ebx, [esp+10h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+4Ch] |
xor edi, [esp+4] |
and ecx, [esp+0Ch] |
and edi, [esp+18h] |
xor ecx, ebx |
lea ebp, [eax+ebp-63CF2AC7h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebp, [esp+10h] |
mov ebx, [esp+1Ch] |
mov ecx, [esp+4] |
mov edi, ebx |
and ebx, [esp+0Ch] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+24h] |
xor edi, [esp] |
and ecx, [esp+8] |
and edi, [esp+14h] |
xor ecx, ebx |
lea ebp, [eax+ebp+2AF26013h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebp, [esp+0Ch] |
mov ebx, [esp+18h] |
mov ecx, [esp] |
mov edi, ebx |
and ebx, [esp+8] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+10h] |
xor edi, [esp+1Ch] |
and ecx, [esp+4] |
and edi, [esp+10h] |
xor ecx, ebx |
lea ebp, [eax+ebp-3A2E4FDDh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebp, [esp+8] |
mov ebx, [esp+14h] |
mov ecx, [esp+1Ch] |
mov edi, ebx |
and ebx, [esp+4] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+50h] |
xor edi, [esp+18h] |
and ecx, [esp] |
and edi, [esp+0Ch] |
xor ecx, ebx |
lea ebp, [eax+ebp+286085F0h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebp, [esp+4] |
mov ebx, [esp+10h] |
mov ecx, [esp+18h] |
mov edi, ebx |
and ebx, [esp] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+70h] |
xor edi, [esp+14h] |
and ecx, [esp+1Ch] |
and edi, [esp+8] |
xor ecx, ebx |
lea ebp, [eax+ebp-35BE86E8h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebp, [esp] |
mov ebx, [esp+0Ch] |
mov ecx, [esp+14h] |
mov edi, ebx |
and ebx, [esp+1Ch] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+44h] |
xor edi, [esp+10h] |
and ecx, [esp+18h] |
and edi, [esp+4] |
xor ecx, ebx |
lea ebp, [eax+ebp-4724C711h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebp, [esp+1Ch] |
mov ebx, [esp+8] |
mov ecx, [esp+10h] |
mov edi, ebx |
and ebx, [esp+18h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+20h] |
xor edi, [esp+0Ch] |
and ecx, [esp+14h] |
and edi, [esp] |
xor ecx, ebx |
lea ebp, [eax+ebp-71862350h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebp, [esp+18h] |
mov ebx, [esp+4] |
mov ecx, [esp+0Ch] |
mov edi, ebx |
and ebx, [esp+14h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+58h] |
xor edi, [esp+8] |
and ecx, [esp+10h] |
and edi, [esp+1Ch] |
xor ecx, ebx |
lea ebp, [eax+ebp+603A180Eh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebp, [esp+14h] |
mov ebx, [esp] |
mov ecx, [esp+8] |
mov edi, ebx |
and ebx, [esp+10h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+74h] |
xor edi, [esp+4] |
and ecx, [esp+0Ch] |
and edi, [esp+18h] |
xor ecx, ebx |
lea ebp, [eax+ebp+6C9E0E8Bh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebp, [esp+10h] |
mov ebx, [esp+1Ch] |
mov ecx, [esp+4] |
mov edi, ebx |
and ebx, [esp+0Ch] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+38h] |
xor edi, [esp] |
and ecx, [esp+8] |
and edi, [esp+14h] |
xor ecx, ebx |
lea ebp, [eax+ebp-4FE175C2h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebp, [esp+0Ch] |
mov ebx, [esp+18h] |
mov ecx, [esp] |
mov edi, ebx |
and ebx, [esp+8] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+64h] |
xor edi, [esp+1Ch] |
and ecx, [esp+4] |
and edi, [esp+10h] |
xor ecx, ebx |
lea ebp, [eax+ebp-28EA883Fh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebp, [esp+8] |
mov ebx, [esp+14h] |
mov ecx, [esp+1Ch] |
mov edi, ebx |
and ebx, [esp+4] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+30h] |
xor edi, [esp+18h] |
and ecx, [esp] |
and edi, [esp+0Ch] |
xor ecx, ebx |
lea ebp, [eax+ebp-42CEB4D9h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebp, [esp+4] |
mov ebx, [esp+10h] |
mov ecx, [esp+18h] |
mov edi, ebx |
and ebx, [esp] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+60h] |
xor edi, [esp+14h] |
and ecx, [esp+1Ch] |
and edi, [esp+8] |
xor ecx, ebx |
lea ebp, [eax+ebp+78AF2FDAh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebp, [esp] |
mov ebx, [esp+0Ch] |
mov ecx, [esp+14h] |
mov edi, ebx |
and ebx, [esp+1Ch] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+78h] |
xor edi, [esp+10h] |
and ecx, [esp+18h] |
and edi, [esp+4] |
xor ecx, ebx |
lea ebp, [eax+ebp+55605C60h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebp, [esp+1Ch] |
mov ebx, [esp+8] |
mov ecx, [esp+10h] |
mov edi, ebx |
and ebx, [esp+18h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+40h] |
xor edi, [esp+0Ch] |
and ecx, [esp+14h] |
and edi, [esp] |
xor ecx, ebx |
lea ebp, [eax+ebp-19AADA0Dh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebp, [esp+18h] |
mov ebx, [esp+4] |
mov ecx, [esp+0Ch] |
mov edi, ebx |
and ebx, [esp+14h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+68h] |
xor edi, [esp+8] |
and ecx, [esp+10h] |
and edi, [esp+1Ch] |
xor ecx, ebx |
lea ebp, [eax+ebp-55AA546Ch] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebp, [esp+14h] |
mov ebx, [esp] |
mov ecx, [esp+8] |
mov edi, ebx |
and ebx, [esp+10h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+7Ch] |
xor edi, [esp+4] |
and ecx, [esp+0Ch] |
and edi, [esp+18h] |
xor ecx, ebx |
lea ebp, [eax+ebp+57489862h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebp, [esp+10h] |
mov ebx, [esp+1Ch] |
mov ecx, [esp+4] |
mov edi, ebx |
and ebx, [esp+0Ch] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+3Ch] |
xor edi, [esp] |
and ecx, [esp+8] |
and edi, [esp+14h] |
xor ecx, ebx |
lea ebp, [eax+ebp+63E81440h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebp, [esp+0Ch] |
mov ebx, [esp+18h] |
mov ecx, [esp] |
mov edi, ebx |
and ebx, [esp+8] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+1Ch] |
xor edi, [esp+1Ch] |
and ecx, [esp+4] |
and edi, [esp+10h] |
xor ecx, ebx |
lea ebp, [eax+ebp+55CA396Ah] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebp, [esp+8] |
mov ebx, [esp+14h] |
mov ecx, [esp+1Ch] |
mov edi, ebx |
and ebx, [esp+4] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+0Ch] |
xor edi, [esp+18h] |
and ecx, [esp] |
and edi, [esp+0Ch] |
xor ecx, ebx |
lea ebp, [eax+ebp+2AAB10B6h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebp, [esp+4] |
mov ebx, [esp+10h] |
mov ecx, [esp+18h] |
mov edi, ebx |
and ebx, [esp] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+4] |
xor edi, [esp+14h] |
and ecx, [esp+1Ch] |
and edi, [esp+8] |
xor ecx, ebx |
lea ebp, [eax+ebp-4B33A3CCh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebp, [esp] |
mov ebx, [esp+0Ch] |
mov ecx, [esp+14h] |
mov edi, ebx |
and ebx, [esp+1Ch] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi] |
xor edi, [esp+10h] |
and ecx, [esp+18h] |
and edi, [esp+4] |
xor ecx, ebx |
lea ebp, [eax+ebp+1141E8CEh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebp, [esp+1Ch] |
mov ebx, [esp+8] |
mov ecx, [esp+10h] |
mov edi, ebx |
and ebx, [esp+18h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+48h] |
xor edi, [esp+0Ch] |
and ecx, [esp+14h] |
and edi, [esp] |
xor ecx, ebx |
lea ebp, [eax+ebp-5EAB7951h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebp, [esp+18h] |
mov ebx, [esp+4] |
mov ecx, [esp+0Ch] |
mov edi, ebx |
and ebx, [esp+14h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+6Ch] |
xor edi, [esp+8] |
and ecx, [esp+10h] |
and edi, [esp+1Ch] |
xor ecx, ebx |
lea ebp, [eax+ebp+7C72E993h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebp, [esp+14h] |
mov ebx, [esp] |
mov ecx, [esp+8] |
mov edi, ebx |
and ebx, [esp+10h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+34h] |
xor edi, [esp+4] |
and ecx, [esp+0Ch] |
and edi, [esp+18h] |
xor ecx, ebx |
lea ebp, [eax+ebp-4C11EBEFh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebp, [esp+10h] |
mov ebx, [esp+1Ch] |
mov ecx, [esp+4] |
mov edi, ebx |
and ebx, [esp+0Ch] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+18h] |
xor edi, [esp] |
and ecx, [esp+8] |
and edi, [esp+14h] |
xor ecx, ebx |
lea ebp, [eax+ebp+636FBC2Ah] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebp, [esp+0Ch] |
mov ebx, [esp+18h] |
mov ecx, [esp] |
mov edi, ebx |
and ebx, [esp+8] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+54h] |
xor edi, [esp+1Ch] |
and ecx, [esp+4] |
and edi, [esp+10h] |
xor ecx, ebx |
lea ebp, [eax+ebp+2BA9C55Dh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebp, [esp+8] |
mov ebx, [esp+14h] |
mov ecx, [esp+1Ch] |
mov edi, ebx |
and ebx, [esp+4] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+28h] |
xor edi, [esp+18h] |
and ecx, [esp] |
and edi, [esp+0Ch] |
xor ecx, ebx |
lea ebp, [eax+ebp+741831F6h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebp, [esp+4] |
mov ebx, [esp+10h] |
mov ecx, [esp+18h] |
mov edi, ebx |
and ebx, [esp] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+5Ch] |
xor edi, [esp+14h] |
and ecx, [esp+1Ch] |
and edi, [esp+8] |
xor ecx, ebx |
lea ebp, [eax+ebp-31A3C1EAh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebp, [esp] |
mov ebx, [esp+0Ch] |
mov ecx, [esp+14h] |
mov edi, ebx |
and ebx, [esp+1Ch] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+2Ch] |
xor edi, [esp+10h] |
and ecx, [esp+18h] |
and edi, [esp+4] |
xor ecx, ebx |
lea ebp, [eax+ebp-64786CE2h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebp, [esp+1Ch] |
mov ebx, [esp+8] |
mov ecx, [esp+10h] |
mov edi, ebx |
and ebx, [esp+18h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+14h] |
xor edi, [esp+0Ch] |
and ecx, [esp+14h] |
and edi, [esp] |
xor ecx, ebx |
lea ebp, [eax+ebp-502945CDh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebp, [esp+18h] |
mov ebx, [esp+4] |
mov ecx, [esp+0Ch] |
mov edi, ebx |
and ebx, [esp+14h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+8] |
xor edi, [esp+8] |
and ecx, [esp+10h] |
and edi, [esp+1Ch] |
xor ecx, ebx |
lea ebp, [eax+ebp+6C24CF5Ch] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebp, [esp+8] |
mov ecx, [esp+10h] |
mov edx, [esp+18h] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+14h] |
xor ebp, [esp+4] |
xor ebx, edx |
xor ebp, [esp+0Ch] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp] |
and ebp, [esp+4] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+0Ch] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+60h] |
and ebp, [esp+14h] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+7A325381h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebp, [esp+4] |
mov ecx, [esp+0Ch] |
mov edx, [esp+14h] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+10h] |
xor ebp, [esp] |
xor ebx, edx |
xor ebp, [esp+8] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+1Ch] |
and ebp, [esp] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+8] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+10h] |
and ebp, [esp+10h] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+28958677h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebp, [esp] |
mov ecx, [esp+8] |
mov edx, [esp+10h] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+0Ch] |
xor ebp, [esp+1Ch] |
xor ebx, edx |
xor ebp, [esp+4] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+18h] |
and ebp, [esp+1Ch] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+4] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi] |
and ebp, [esp+0Ch] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+3B8F4898h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebp, [esp+1Ch] |
mov ecx, [esp+4] |
mov edx, [esp+0Ch] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+8] |
xor ebp, [esp+18h] |
xor ebx, edx |
xor ebp, [esp] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+14h] |
and ebp, [esp+18h] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+38h] |
and ebp, [esp+8] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+6B4BB9AFh] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebp, [esp+18h] |
mov ecx, [esp] |
mov edx, [esp+8] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+4] |
xor ebp, [esp+14h] |
xor ebx, edx |
xor ebp, [esp+1Ch] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+10h] |
and ebp, [esp+14h] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+1Ch] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+8] |
and ebp, [esp+4] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx-3B4017E5h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebp, [esp+14h] |
mov ecx, [esp+1Ch] |
mov edx, [esp+4] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp] |
xor ebp, [esp+10h] |
xor ebx, edx |
xor ebp, [esp+18h] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+0Ch] |
and ebp, [esp+10h] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+18h] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+1Ch] |
and ebp, [esp] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+66282193h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebp, [esp+10h] |
mov ecx, [esp+18h] |
mov edx, [esp] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+1Ch] |
xor ebp, [esp+0Ch] |
xor ebx, edx |
xor ebp, [esp+14h] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+8] |
and ebp, [esp+0Ch] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+14h] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+70h] |
and ebp, [esp+1Ch] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+61D809CCh] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebp, [esp+0Ch] |
mov ecx, [esp+14h] |
mov edx, [esp+1Ch] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+18h] |
xor ebp, [esp+8] |
xor ebx, edx |
xor ebp, [esp+10h] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+4] |
and ebp, [esp+8] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+10h] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+5Ch] |
and ebp, [esp+18h] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx-4DE566Fh] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebp, [esp+8] |
mov ecx, [esp+10h] |
mov edx, [esp+18h] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+14h] |
xor ebp, [esp+4] |
xor ebx, edx |
xor ebp, [esp+0Ch] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp] |
and ebp, [esp+4] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+0Ch] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+68h] |
and ebp, [esp+14h] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+487CAC60h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebp, [esp+4] |
mov ecx, [esp+0Ch] |
mov edx, [esp+14h] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+10h] |
xor ebp, [esp] |
xor ebx, edx |
xor ebp, [esp+8] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+1Ch] |
and ebp, [esp] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+8] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+18h] |
and ebp, [esp+10h] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+5DEC8032h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebp, [esp] |
mov ecx, [esp+8] |
mov edx, [esp+10h] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+0Ch] |
xor ebp, [esp+1Ch] |
xor ebx, edx |
xor ebp, [esp+4] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+18h] |
and ebp, [esp+1Ch] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+4] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+78h] |
and ebp, [esp+0Ch] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx-107BA2A3h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebp, [esp+1Ch] |
mov ecx, [esp+4] |
mov edx, [esp+0Ch] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+8] |
xor ebp, [esp+18h] |
xor ebx, edx |
xor ebp, [esp] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+14h] |
and ebp, [esp+18h] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+50h] |
and ebp, [esp+8] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx-167A8A4Fh] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebp, [esp+18h] |
mov ecx, [esp] |
mov edx, [esp+8] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+4] |
xor ebp, [esp+14h] |
xor ebx, edx |
xor ebp, [esp+1Ch] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+10h] |
and ebp, [esp+14h] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+1Ch] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+48h] |
and ebp, [esp+4] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx-23D9DCFEh] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebp, [esp+14h] |
mov ecx, [esp+1Ch] |
mov edx, [esp+4] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp] |
xor ebp, [esp+10h] |
xor ebx, edx |
xor ebp, [esp+18h] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+0Ch] |
and ebp, [esp+10h] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+18h] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+64h] |
and ebp, [esp] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx-149AE478h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebp, [esp+10h] |
mov ecx, [esp+18h] |
mov edx, [esp] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+1Ch] |
xor ebp, [esp+0Ch] |
xor ebx, edx |
xor ebp, [esp+14h] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+8] |
and ebp, [esp+0Ch] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+14h] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+4Ch] |
and ebp, [esp+1Ch] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+23893E81h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebp, [esp+0Ch] |
mov ecx, [esp+14h] |
mov edx, [esp+1Ch] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+18h] |
xor ebp, [esp+8] |
xor ebx, edx |
xor ebp, [esp+10h] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+4] |
and ebp, [esp+8] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+10h] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+0Ch] |
and ebp, [esp+18h] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx-2C69533Bh] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebp, [esp+8] |
mov ecx, [esp+10h] |
mov edx, [esp+18h] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+14h] |
xor ebp, [esp+4] |
xor ebx, edx |
xor ebp, [esp+0Ch] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp] |
and ebp, [esp+4] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+0Ch] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+58h] |
and ebp, [esp+14h] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+0F6D6FF3h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebp, [esp+4] |
mov ecx, [esp+0Ch] |
mov edx, [esp+14h] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+10h] |
xor ebp, [esp] |
xor ebx, edx |
xor ebp, [esp+8] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+1Ch] |
and ebp, [esp] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+8] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+2Ch] |
and ebp, [esp+10h] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx-7C0BBDC7h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebp, [esp] |
mov ecx, [esp+8] |
mov edx, [esp+10h] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+0Ch] |
xor ebp, [esp+1Ch] |
xor ebx, edx |
xor ebp, [esp+4] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+18h] |
and ebp, [esp+1Ch] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+4] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+7Ch] |
and ebp, [esp+0Ch] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+2E0B4482h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebp, [esp+1Ch] |
mov ecx, [esp+4] |
mov edx, [esp+0Ch] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+8] |
xor ebp, [esp+18h] |
xor ebx, edx |
xor ebp, [esp] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+14h] |
and ebp, [esp+18h] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+54h] |
and ebp, [esp+8] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx-5B7BDFFCh] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebp, [esp+18h] |
mov ecx, [esp] |
mov edx, [esp+8] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+4] |
xor ebp, [esp+14h] |
xor ebx, edx |
xor ebp, [esp+1Ch] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+10h] |
and ebp, [esp+14h] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+1Ch] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+20h] |
and ebp, [esp+4] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+69C8F04Ah] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebp, [esp+14h] |
mov ecx, [esp+1Ch] |
mov edx, [esp+4] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp] |
xor ebp, [esp+10h] |
xor ebx, edx |
xor ebp, [esp+18h] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+0Ch] |
and ebp, [esp+10h] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+18h] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+6Ch] |
and ebp, [esp] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx-61E064A2h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebp, [esp+10h] |
mov ecx, [esp+18h] |
mov edx, [esp] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+1Ch] |
xor ebp, [esp+0Ch] |
xor ebx, edx |
xor ebp, [esp+14h] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+8] |
and ebp, [esp+0Ch] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+14h] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+30h] |
and ebp, [esp+1Ch] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+21C66842h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebp, [esp+0Ch] |
mov ecx, [esp+14h] |
mov edx, [esp+1Ch] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+18h] |
xor ebp, [esp+8] |
xor ebx, edx |
xor ebp, [esp+10h] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+4] |
and ebp, [esp+8] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+10h] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+24h] |
and ebp, [esp+18h] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx-9169366h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebp, [esp+8] |
mov ecx, [esp+10h] |
mov edx, [esp+18h] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+14h] |
xor ebp, [esp+4] |
xor ebx, edx |
xor ebp, [esp+0Ch] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp] |
and ebp, [esp+4] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+0Ch] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+4] |
and ebp, [esp+14h] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+670C9C61h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebp, [esp+4] |
mov ecx, [esp+0Ch] |
mov edx, [esp+14h] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+10h] |
xor ebp, [esp] |
xor ebx, edx |
xor ebp, [esp+8] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+1Ch] |
and ebp, [esp] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+8] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+74h] |
and ebp, [esp+10h] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx-542C7710h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebp, [esp] |
mov ecx, [esp+8] |
mov edx, [esp+10h] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+0Ch] |
xor ebp, [esp+1Ch] |
xor ebx, edx |
xor ebp, [esp+4] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+18h] |
and ebp, [esp+1Ch] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+4] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+14h] |
and ebp, [esp+0Ch] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+6A51A0D2h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebp, [esp+1Ch] |
mov ecx, [esp+4] |
mov edx, [esp+0Ch] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+8] |
xor ebp, [esp+18h] |
xor ebx, edx |
xor ebp, [esp] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+14h] |
and ebp, [esp+18h] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+3Ch] |
and ebp, [esp+8] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx-27ABD098h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebp, [esp+18h] |
mov ecx, [esp] |
mov edx, [esp+8] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+4] |
xor ebp, [esp+14h] |
xor ebx, edx |
xor ebp, [esp+1Ch] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+10h] |
and ebp, [esp+14h] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+1Ch] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+44h] |
and ebp, [esp+4] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx-69F058D8h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebp, [esp+14h] |
mov ecx, [esp+1Ch] |
mov edx, [esp+4] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp] |
xor ebp, [esp+10h] |
xor ebx, edx |
xor ebp, [esp+18h] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+0Ch] |
and ebp, [esp+10h] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+18h] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+28h] |
and ebp, [esp] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx-54AECC5Dh] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebp, [esp+10h] |
mov ecx, [esp+18h] |
mov edx, [esp] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+1Ch] |
xor ebp, [esp+0Ch] |
xor ebx, edx |
xor ebp, [esp+14h] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+8] |
and ebp, [esp+0Ch] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+14h] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+40h] |
and ebp, [esp+1Ch] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+6EEF0B6Ch] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebp, [esp+0Ch] |
mov ecx, [esp+14h] |
mov edx, [esp+1Ch] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+18h] |
xor ebp, [esp+8] |
xor ebx, edx |
xor ebp, [esp+10h] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+4] |
and ebp, [esp+8] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+10h] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+34h] |
and ebp, [esp+18h] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+137A3BE4h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov edi, [esp+24h] |
mov eax, [esp] |
mov ebx, [esp+4] |
add [edi], eax |
add [edi+4], ebx |
mov ecx, [esp+8] |
mov edx, [esp+0Ch] |
add [edi+8], ecx |
add [edi+0Ch], edx |
mov eax, [esp+10h] |
mov ebx, [esp+14h] |
add [edi+10h], eax |
add [edi+14h], ebx |
mov ebp, [esp+28h] |
mov ecx, [esp+18h] |
mov edx, [esp+1Ch] |
mov esp, ebp |
add [edi+18h], ecx |
add [edi+1Ch], edx |
pop ebp |
pop edi |
pop esi |
pop ebx |
end; |
procedure THashBaseHaval.DoTransform5(Buffer: PUInt32Array); |
asm |
push ebx |
push esi |
push edi |
lea edi, [eax].THashBaseHaval.FDigest |
mov esi, edx |
push ebp |
mov ebp, esp |
add esp, 0FFFFFFD4h |
and esp, 0FFFFFFC0h |
mov eax, [edi] |
mov ebx, [edi+4] |
mov [esp+20h], esi |
mov [esp+24h], edi |
mov [esp+28h], ebp |
mov [esp], eax |
mov [esp+4], ebx |
mov ecx, [edi+8] |
mov edx, [edi+0Ch] |
mov [esp+8], ecx |
mov [esp+0Ch], edx |
mov eax, [edi+10h] |
mov ebx, [edi+14h] |
mov [esp+10h], eax |
mov [esp+14h], ebx |
mov ecx, [edi+18h] |
mov edx, [edi+1Ch] |
mov [esp+18h], ecx |
mov [esp+1Ch], edx |
mov eax, edx |
mov ebp, [esp+10h] |
mov ebx, [esp+4] |
mov ecx, [esp+18h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+0Ch] |
and ebx, [esp+8] |
and edi, [esp] |
xor ecx, ebx |
and ebp, [esp+14h] |
xor edi, ecx |
mov edx, [esi] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebp, [esp+0Ch] |
mov ebx, [esp] |
mov ecx, [esp+14h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+8] |
and ebx, [esp+4] |
and edi, [esp+1Ch] |
xor ecx, ebx |
and ebp, [esp+10h] |
xor edi, ecx |
mov edx, [esi+4] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebp, [esp+8] |
mov ebx, [esp+1Ch] |
mov ecx, [esp+10h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+4] |
and ebx, [esp] |
and edi, [esp+18h] |
xor ecx, ebx |
and ebp, [esp+0Ch] |
xor edi, ecx |
mov edx, [esi+8] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebp, [esp+4] |
mov ebx, [esp+18h] |
mov ecx, [esp+0Ch] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp] |
and ebx, [esp+1Ch] |
and edi, [esp+14h] |
xor ecx, ebx |
and ebp, [esp+8] |
xor edi, ecx |
mov edx, [esi+0Ch] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebp, [esp] |
mov ebx, [esp+14h] |
mov ecx, [esp+8] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+1Ch] |
and ebx, [esp+18h] |
and edi, [esp+10h] |
xor ecx, ebx |
and ebp, [esp+4] |
xor edi, ecx |
mov edx, [esi+10h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebp, [esp+1Ch] |
mov ebx, [esp+10h] |
mov ecx, [esp+4] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+18h] |
and ebx, [esp+14h] |
and edi, [esp+0Ch] |
xor ecx, ebx |
and ebp, [esp] |
xor edi, ecx |
mov edx, [esi+14h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebp, [esp+18h] |
mov ebx, [esp+0Ch] |
mov ecx, [esp] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+14h] |
and ebx, [esp+10h] |
and edi, [esp+8] |
xor ecx, ebx |
and ebp, [esp+1Ch] |
xor edi, ecx |
mov edx, [esi+18h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebp, [esp+14h] |
mov ebx, [esp+8] |
mov ecx, [esp+1Ch] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+10h] |
and ebx, [esp+0Ch] |
and edi, [esp+4] |
xor ecx, ebx |
and ebp, [esp+18h] |
xor edi, ecx |
mov edx, [esi+1Ch] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebp, [esp+10h] |
mov ebx, [esp+4] |
mov ecx, [esp+18h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+0Ch] |
and ebx, [esp+8] |
and edi, [esp] |
xor ecx, ebx |
and ebp, [esp+14h] |
xor edi, ecx |
mov edx, [esi+20h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebp, [esp+0Ch] |
mov ebx, [esp] |
mov ecx, [esp+14h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+8] |
and ebx, [esp+4] |
and edi, [esp+1Ch] |
xor ecx, ebx |
and ebp, [esp+10h] |
xor edi, ecx |
mov edx, [esi+24h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebp, [esp+8] |
mov ebx, [esp+1Ch] |
mov ecx, [esp+10h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+4] |
and ebx, [esp] |
and edi, [esp+18h] |
xor ecx, ebx |
and ebp, [esp+0Ch] |
xor edi, ecx |
mov edx, [esi+28h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebp, [esp+4] |
mov ebx, [esp+18h] |
mov ecx, [esp+0Ch] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp] |
and ebx, [esp+1Ch] |
and edi, [esp+14h] |
xor ecx, ebx |
and ebp, [esp+8] |
xor edi, ecx |
mov edx, [esi+2Ch] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebp, [esp] |
mov ebx, [esp+14h] |
mov ecx, [esp+8] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+1Ch] |
and ebx, [esp+18h] |
and edi, [esp+10h] |
xor ecx, ebx |
and ebp, [esp+4] |
xor edi, ecx |
mov edx, [esi+30h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebp, [esp+1Ch] |
mov ebx, [esp+10h] |
mov ecx, [esp+4] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+18h] |
and ebx, [esp+14h] |
and edi, [esp+0Ch] |
xor ecx, ebx |
and ebp, [esp] |
xor edi, ecx |
mov edx, [esi+34h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebp, [esp+18h] |
mov ebx, [esp+0Ch] |
mov ecx, [esp] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+14h] |
and ebx, [esp+10h] |
and edi, [esp+8] |
xor ecx, ebx |
and ebp, [esp+1Ch] |
xor edi, ecx |
mov edx, [esi+38h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebp, [esp+14h] |
mov ebx, [esp+8] |
mov ecx, [esp+1Ch] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+10h] |
and ebx, [esp+0Ch] |
and edi, [esp+4] |
xor ecx, ebx |
and ebp, [esp+18h] |
xor edi, ecx |
mov edx, [esi+3Ch] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebp, [esp+10h] |
mov ebx, [esp+4] |
mov ecx, [esp+18h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+0Ch] |
and ebx, [esp+8] |
and edi, [esp] |
xor ecx, ebx |
and ebp, [esp+14h] |
xor edi, ecx |
mov edx, [esi+40h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebp, [esp+0Ch] |
mov ebx, [esp] |
mov ecx, [esp+14h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+8] |
and ebx, [esp+4] |
and edi, [esp+1Ch] |
xor ecx, ebx |
and ebp, [esp+10h] |
xor edi, ecx |
mov edx, [esi+44h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebp, [esp+8] |
mov ebx, [esp+1Ch] |
mov ecx, [esp+10h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+4] |
and ebx, [esp] |
and edi, [esp+18h] |
xor ecx, ebx |
and ebp, [esp+0Ch] |
xor edi, ecx |
mov edx, [esi+48h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebp, [esp+4] |
mov ebx, [esp+18h] |
mov ecx, [esp+0Ch] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp] |
and ebx, [esp+1Ch] |
and edi, [esp+14h] |
xor ecx, ebx |
and ebp, [esp+8] |
xor edi, ecx |
mov edx, [esi+4Ch] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebp, [esp] |
mov ebx, [esp+14h] |
mov ecx, [esp+8] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+1Ch] |
and ebx, [esp+18h] |
and edi, [esp+10h] |
xor ecx, ebx |
and ebp, [esp+4] |
xor edi, ecx |
mov edx, [esi+50h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebp, [esp+1Ch] |
mov ebx, [esp+10h] |
mov ecx, [esp+4] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+18h] |
and ebx, [esp+14h] |
and edi, [esp+0Ch] |
xor ecx, ebx |
and ebp, [esp] |
xor edi, ecx |
mov edx, [esi+54h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebp, [esp+18h] |
mov ebx, [esp+0Ch] |
mov ecx, [esp] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+14h] |
and ebx, [esp+10h] |
and edi, [esp+8] |
xor ecx, ebx |
and ebp, [esp+1Ch] |
xor edi, ecx |
mov edx, [esi+58h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebp, [esp+14h] |
mov ebx, [esp+8] |
mov ecx, [esp+1Ch] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+10h] |
and ebx, [esp+0Ch] |
and edi, [esp+4] |
xor ecx, ebx |
and ebp, [esp+18h] |
xor edi, ecx |
mov edx, [esi+5Ch] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebp, [esp+10h] |
mov ebx, [esp+4] |
mov ecx, [esp+18h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+0Ch] |
and ebx, [esp+8] |
and edi, [esp] |
xor ecx, ebx |
and ebp, [esp+14h] |
xor edi, ecx |
mov edx, [esi+60h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebp, [esp+0Ch] |
mov ebx, [esp] |
mov ecx, [esp+14h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+8] |
and ebx, [esp+4] |
and edi, [esp+1Ch] |
xor ecx, ebx |
and ebp, [esp+10h] |
xor edi, ecx |
mov edx, [esi+64h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebp, [esp+8] |
mov ebx, [esp+1Ch] |
mov ecx, [esp+10h] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+4] |
and ebx, [esp] |
and edi, [esp+18h] |
xor ecx, ebx |
and ebp, [esp+0Ch] |
xor edi, ecx |
mov edx, [esi+68h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebp, [esp+4] |
mov ebx, [esp+18h] |
mov ecx, [esp+0Ch] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp] |
and ebx, [esp+1Ch] |
and edi, [esp+14h] |
xor ecx, ebx |
and ebp, [esp+8] |
xor edi, ecx |
mov edx, [esi+6Ch] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebp, [esp] |
mov ebx, [esp+14h] |
mov ecx, [esp+8] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+1Ch] |
and ebx, [esp+18h] |
and edi, [esp+10h] |
xor ecx, ebx |
and ebp, [esp+4] |
xor edi, ecx |
mov edx, [esi+70h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebp, [esp+1Ch] |
mov ebx, [esp+10h] |
mov ecx, [esp+4] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+18h] |
and ebx, [esp+14h] |
and edi, [esp+0Ch] |
xor ecx, ebx |
and ebp, [esp] |
xor edi, ecx |
mov edx, [esi+74h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebp, [esp+18h] |
mov ebx, [esp+0Ch] |
mov ecx, [esp] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+14h] |
and ebx, [esp+10h] |
and edi, [esp+8] |
xor ecx, ebx |
and ebp, [esp+1Ch] |
xor edi, ecx |
mov edx, [esi+78h] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebp, [esp+14h] |
mov ebx, [esp+8] |
mov ecx, [esp+1Ch] |
ror eax, 0Bh |
xor ebx, ecx |
mov edi, [esp+10h] |
and ebx, [esp+0Ch] |
and edi, [esp+4] |
xor ecx, ebx |
and ebp, [esp+18h] |
xor edi, ecx |
mov edx, [esi+7Ch] |
xor ebp, edi |
add eax, edx |
ror ebp, 7 |
add ebp, eax |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebp, [esp] |
mov ebx, [esp+4] |
mov edi, [esp+8] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+10h] |
and ebx, edi |
mov edx, [esp+14h] |
and ebp, ecx |
xor ebx, [esp+18h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+4] |
and ebx, [esp+0Ch] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+14h] |
xor ecx, ebx |
and edi, [esp] |
xor ecx, edi |
lea ebp, [eax+ebp+452821E6h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebx, [esp] |
mov edi, [esp+4] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+0Ch] |
and ebx, edi |
mov edx, [esp+10h] |
and ebp, ecx |
xor ebx, [esp+14h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp] |
and ebx, [esp+8] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+38h] |
xor ecx, ebx |
and edi, [esp+1Ch] |
xor ecx, edi |
lea ebp, [eax+ebp+38D01377h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebx, [esp+1Ch] |
mov edi, [esp] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+8] |
and ebx, edi |
mov edx, [esp+0Ch] |
and ebp, ecx |
xor ebx, [esp+10h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+1Ch] |
and ebx, [esp+4] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+68h] |
xor ecx, ebx |
and edi, [esp+18h] |
xor ecx, edi |
lea ebp, [eax+ebp-41AB9931h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebx, [esp+18h] |
mov edi, [esp+1Ch] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+4] |
and ebx, edi |
mov edx, [esp+8] |
and ebp, ecx |
xor ebx, [esp+0Ch] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+18h] |
and ebx, [esp] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+48h] |
xor ecx, ebx |
and edi, [esp+14h] |
xor ecx, edi |
lea ebp, [eax+ebp+34E90C6Ch] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebx, [esp+14h] |
mov edi, [esp+18h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp] |
and ebx, edi |
mov edx, [esp+4] |
and ebp, ecx |
xor ebx, [esp+8] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+14h] |
and ebx, [esp+1Ch] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+2Ch] |
xor ecx, ebx |
and edi, [esp+10h] |
xor ecx, edi |
lea ebp, [eax+ebp-3F53D649h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebx, [esp+10h] |
mov edi, [esp+14h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+1Ch] |
and ebx, edi |
mov edx, [esp] |
and ebp, ecx |
xor ebx, [esp+4] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+10h] |
and ebx, [esp+18h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+70h] |
xor ecx, ebx |
and edi, [esp+0Ch] |
xor ecx, edi |
lea ebp, [eax+ebp-3683AF23h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebx, [esp+0Ch] |
mov edi, [esp+10h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+18h] |
and ebx, edi |
mov edx, [esp+1Ch] |
and ebp, ecx |
xor ebx, [esp] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+0Ch] |
and ebx, [esp+14h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+1Ch] |
xor ecx, ebx |
and edi, [esp+8] |
xor ecx, edi |
lea ebp, [eax+ebp+3F84D5B5h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebx, [esp+8] |
mov edi, [esp+0Ch] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+14h] |
and ebx, edi |
mov edx, [esp+18h] |
and ebp, ecx |
xor ebx, [esp+1Ch] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+8] |
and ebx, [esp+10h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+40h] |
xor ecx, ebx |
and edi, [esp+4] |
xor ecx, edi |
lea ebp, [eax+ebp-4AB8F6E9h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebx, [esp+4] |
mov edi, [esp+8] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+10h] |
and ebx, edi |
mov edx, [esp+14h] |
and ebp, ecx |
xor ebx, [esp+18h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+4] |
and ebx, [esp+0Ch] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi] |
xor ecx, ebx |
and edi, [esp] |
xor ecx, edi |
lea ebp, [eax+ebp-6DE92A27h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebx, [esp] |
mov edi, [esp+4] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+0Ch] |
and ebx, edi |
mov edx, [esp+10h] |
and ebp, ecx |
xor ebx, [esp+14h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp] |
and ebx, [esp+8] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+5Ch] |
xor ecx, ebx |
and edi, [esp+1Ch] |
xor ecx, edi |
lea ebp, [eax+ebp-768604E5h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebx, [esp+1Ch] |
mov edi, [esp] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+8] |
and ebx, edi |
mov edx, [esp+0Ch] |
and ebp, ecx |
xor ebx, [esp+10h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+1Ch] |
and ebx, [esp+4] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+50h] |
xor ecx, ebx |
and edi, [esp+18h] |
xor ecx, edi |
lea ebp, [eax+ebp-2ECEF45Ah] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebx, [esp+18h] |
mov edi, [esp+1Ch] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+4] |
and ebx, edi |
mov edx, [esp+8] |
and ebp, ecx |
xor ebx, [esp+0Ch] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+18h] |
and ebx, [esp] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+58h] |
xor ecx, ebx |
and edi, [esp+14h] |
xor ecx, edi |
lea ebp, [eax+ebp-67204A54h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebx, [esp+14h] |
mov edi, [esp+18h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp] |
and ebx, edi |
mov edx, [esp+4] |
and ebp, ecx |
xor ebx, [esp+8] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+14h] |
and ebx, [esp+1Ch] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+4] |
xor ecx, ebx |
and edi, [esp+10h] |
xor ecx, edi |
lea ebp, [eax+ebp+2FFD72DBh] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebx, [esp+10h] |
mov edi, [esp+14h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+1Ch] |
and ebx, edi |
mov edx, [esp] |
and ebp, ecx |
xor ebx, [esp+4] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+10h] |
and ebx, [esp+18h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+28h] |
xor ecx, ebx |
and edi, [esp+0Ch] |
xor ecx, edi |
lea ebp, [eax+ebp-2FE52049h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebx, [esp+0Ch] |
mov edi, [esp+10h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+18h] |
and ebx, edi |
mov edx, [esp+1Ch] |
and ebp, ecx |
xor ebx, [esp] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+0Ch] |
and ebx, [esp+14h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+10h] |
xor ecx, ebx |
and edi, [esp+8] |
xor ecx, edi |
lea ebp, [eax+ebp-471E5013h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebx, [esp+8] |
mov edi, [esp+0Ch] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+14h] |
and ebx, edi |
mov edx, [esp+18h] |
and ebp, ecx |
xor ebx, [esp+1Ch] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+8] |
and ebx, [esp+10h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+20h] |
xor ecx, ebx |
and edi, [esp+4] |
xor ecx, edi |
lea ebp, [eax+ebp+6A267E96h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebx, [esp+4] |
mov edi, [esp+8] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+10h] |
and ebx, edi |
mov edx, [esp+14h] |
and ebp, ecx |
xor ebx, [esp+18h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+4] |
and ebx, [esp+0Ch] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+78h] |
xor ecx, ebx |
and edi, [esp] |
xor ecx, edi |
lea ebp, [eax+ebp-45836FBBh] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebx, [esp] |
mov edi, [esp+4] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+0Ch] |
and ebx, edi |
mov edx, [esp+10h] |
and ebp, ecx |
xor ebx, [esp+14h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp] |
and ebx, [esp+8] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+0Ch] |
xor ecx, ebx |
and edi, [esp+1Ch] |
xor ecx, edi |
lea ebp, [eax+ebp-0ED38067h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebx, [esp+1Ch] |
mov edi, [esp] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+8] |
and ebx, edi |
mov edx, [esp+0Ch] |
and ebp, ecx |
xor ebx, [esp+10h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+1Ch] |
and ebx, [esp+4] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+54h] |
xor ecx, ebx |
and edi, [esp+18h] |
xor ecx, edi |
lea ebp, [eax+ebp+24A19947h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebx, [esp+18h] |
mov edi, [esp+1Ch] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+4] |
and ebx, edi |
mov edx, [esp+8] |
and ebp, ecx |
xor ebx, [esp+0Ch] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+18h] |
and ebx, [esp] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+24h] |
xor ecx, ebx |
and edi, [esp+14h] |
xor ecx, edi |
lea ebp, [eax+ebp-4C6E9309h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebx, [esp+14h] |
mov edi, [esp+18h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp] |
and ebx, edi |
mov edx, [esp+4] |
and ebp, ecx |
xor ebx, [esp+8] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+14h] |
and ebx, [esp+1Ch] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+44h] |
xor ecx, ebx |
and edi, [esp+10h] |
xor ecx, edi |
lea ebp, [eax+ebp+801F2E2h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebx, [esp+10h] |
mov edi, [esp+14h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+1Ch] |
and ebx, edi |
mov edx, [esp] |
and ebp, ecx |
xor ebx, [esp+4] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+10h] |
and ebx, [esp+18h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+60h] |
xor ecx, ebx |
and edi, [esp+0Ch] |
xor ecx, edi |
lea ebp, [eax+ebp-7A7103EAh] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebx, [esp+0Ch] |
mov edi, [esp+10h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+18h] |
and ebx, edi |
mov edx, [esp+1Ch] |
and ebp, ecx |
xor ebx, [esp] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+0Ch] |
and ebx, [esp+14h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+74h] |
xor ecx, ebx |
and edi, [esp+8] |
xor ecx, edi |
lea ebp, [eax+ebp+636920D8h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebx, [esp+8] |
mov edi, [esp+0Ch] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+14h] |
and ebx, edi |
mov edx, [esp+18h] |
and ebp, ecx |
xor ebx, [esp+1Ch] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+8] |
and ebx, [esp+10h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+18h] |
xor ecx, ebx |
and edi, [esp+4] |
xor ecx, edi |
lea ebp, [eax+ebp+71574E69h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebx, [esp+4] |
mov edi, [esp+8] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+10h] |
and ebx, edi |
mov edx, [esp+14h] |
and ebp, ecx |
xor ebx, [esp+18h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+4] |
and ebx, [esp+0Ch] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+4Ch] |
xor ecx, ebx |
and edi, [esp] |
xor ecx, edi |
lea ebp, [eax+ebp-5BA7015Dh] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebx, [esp] |
mov edi, [esp+4] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+0Ch] |
and ebx, edi |
mov edx, [esp+10h] |
and ebp, ecx |
xor ebx, [esp+14h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp] |
and ebx, [esp+8] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+30h] |
xor ecx, ebx |
and edi, [esp+1Ch] |
xor ecx, edi |
lea ebp, [eax+ebp-0B6CC282h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebx, [esp+1Ch] |
mov edi, [esp] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+8] |
and ebx, edi |
mov edx, [esp+0Ch] |
and ebp, ecx |
xor ebx, [esp+10h] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+1Ch] |
and ebx, [esp+4] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+3Ch] |
xor ecx, ebx |
and edi, [esp+18h] |
xor ecx, edi |
lea ebp, [eax+ebp+0D95748Fh] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebx, [esp+18h] |
mov edi, [esp+1Ch] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+4] |
and ebx, edi |
mov edx, [esp+8] |
and ebp, ecx |
xor ebx, [esp+0Ch] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+18h] |
and ebx, [esp] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+34h] |
xor ecx, ebx |
and edi, [esp+14h] |
xor ecx, edi |
lea ebp, [eax+ebp+728EB658h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebx, [esp+14h] |
mov edi, [esp+18h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp] |
and ebx, edi |
mov edx, [esp+4] |
and ebp, ecx |
xor ebx, [esp+8] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+14h] |
and ebx, [esp+1Ch] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+8] |
xor ecx, ebx |
and edi, [esp+10h] |
xor ecx, edi |
lea ebp, [eax+ebp+718BCD58h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebx, [esp+10h] |
mov edi, [esp+14h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+1Ch] |
and ebx, edi |
mov edx, [esp] |
and ebp, ecx |
xor ebx, [esp+4] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+10h] |
and ebx, [esp+18h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+64h] |
xor ecx, ebx |
and edi, [esp+0Ch] |
xor ecx, edi |
lea ebp, [eax+ebp-7DEAB512h] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebx, [esp+0Ch] |
mov edi, [esp+10h] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+18h] |
and ebx, edi |
mov edx, [esp+1Ch] |
and ebp, ecx |
xor ebx, [esp] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+0Ch] |
and ebx, [esp+14h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+7Ch] |
xor ecx, ebx |
and edi, [esp+8] |
xor ecx, edi |
lea ebp, [eax+ebp+7B54A41Dh] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebx, [esp+8] |
mov edi, [esp+0Ch] |
xor ebp, 0FFFFFFFFh |
mov ecx, [esp+14h] |
and ebx, edi |
mov edx, [esp+18h] |
and ebp, ecx |
xor ebx, [esp+1Ch] |
xor ebp, edx |
xor ecx, edi |
xor ebx, ebp |
and ecx, [esp+8] |
and ebx, [esp+10h] |
ror eax, 0Bh |
xor ecx, edx |
mov ebp, [esi+6Ch] |
xor ecx, ebx |
and edi, [esp+4] |
xor ecx, edi |
lea ebp, [eax+ebp-3DA5A64Bh] |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebp, [esp+14h] |
mov ebx, [esp+0Ch] |
mov ecx, [esp+4] |
mov edi, ebx |
and ebx, [esp+18h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+4Ch] |
xor edi, [esp+8] |
and ecx, [esp] |
and edi, [esp+10h] |
xor ecx, ebx |
lea ebp, [eax+ebp-63CF2AC7h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebp, [esp+10h] |
mov ebx, [esp+8] |
mov ecx, [esp] |
mov edi, ebx |
and ebx, [esp+14h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+24h] |
xor edi, [esp+4] |
and ecx, [esp+1Ch] |
and edi, [esp+0Ch] |
xor ecx, ebx |
lea ebp, [eax+ebp+2AF26013h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebp, [esp+0Ch] |
mov ebx, [esp+4] |
mov ecx, [esp+1Ch] |
mov edi, ebx |
and ebx, [esp+10h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+10h] |
xor edi, [esp] |
and ecx, [esp+18h] |
and edi, [esp+8] |
xor ecx, ebx |
lea ebp, [eax+ebp-3A2E4FDDh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebp, [esp+8] |
mov ebx, [esp] |
mov ecx, [esp+18h] |
mov edi, ebx |
and ebx, [esp+0Ch] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+50h] |
xor edi, [esp+1Ch] |
and ecx, [esp+14h] |
and edi, [esp+4] |
xor ecx, ebx |
lea ebp, [eax+ebp+286085F0h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebp, [esp+4] |
mov ebx, [esp+1Ch] |
mov ecx, [esp+14h] |
mov edi, ebx |
and ebx, [esp+8] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+70h] |
xor edi, [esp+18h] |
and ecx, [esp+10h] |
and edi, [esp] |
xor ecx, ebx |
lea ebp, [eax+ebp-35BE86E8h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebp, [esp] |
mov ebx, [esp+18h] |
mov ecx, [esp+10h] |
mov edi, ebx |
and ebx, [esp+4] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+44h] |
xor edi, [esp+14h] |
and ecx, [esp+0Ch] |
and edi, [esp+1Ch] |
xor ecx, ebx |
lea ebp, [eax+ebp-4724C711h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebp, [esp+1Ch] |
mov ebx, [esp+14h] |
mov ecx, [esp+0Ch] |
mov edi, ebx |
and ebx, [esp] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+20h] |
xor edi, [esp+10h] |
and ecx, [esp+8] |
and edi, [esp+18h] |
xor ecx, ebx |
lea ebp, [eax+ebp-71862350h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebp, [esp+18h] |
mov ebx, [esp+10h] |
mov ecx, [esp+8] |
mov edi, ebx |
and ebx, [esp+1Ch] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+58h] |
xor edi, [esp+0Ch] |
and ecx, [esp+4] |
and edi, [esp+14h] |
xor ecx, ebx |
lea ebp, [eax+ebp+603A180Eh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebp, [esp+14h] |
mov ebx, [esp+0Ch] |
mov ecx, [esp+4] |
mov edi, ebx |
and ebx, [esp+18h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+74h] |
xor edi, [esp+8] |
and ecx, [esp] |
and edi, [esp+10h] |
xor ecx, ebx |
lea ebp, [eax+ebp+6C9E0E8Bh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebp, [esp+10h] |
mov ebx, [esp+8] |
mov ecx, [esp] |
mov edi, ebx |
and ebx, [esp+14h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+38h] |
xor edi, [esp+4] |
and ecx, [esp+1Ch] |
and edi, [esp+0Ch] |
xor ecx, ebx |
lea ebp, [eax+ebp-4FE175C2h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebp, [esp+0Ch] |
mov ebx, [esp+4] |
mov ecx, [esp+1Ch] |
mov edi, ebx |
and ebx, [esp+10h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+64h] |
xor edi, [esp] |
and ecx, [esp+18h] |
and edi, [esp+8] |
xor ecx, ebx |
lea ebp, [eax+ebp-28EA883Fh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebp, [esp+8] |
mov ebx, [esp] |
mov ecx, [esp+18h] |
mov edi, ebx |
and ebx, [esp+0Ch] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+30h] |
xor edi, [esp+1Ch] |
and ecx, [esp+14h] |
and edi, [esp+4] |
xor ecx, ebx |
lea ebp, [eax+ebp-42CEB4D9h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebp, [esp+4] |
mov ebx, [esp+1Ch] |
mov ecx, [esp+14h] |
mov edi, ebx |
and ebx, [esp+8] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+60h] |
xor edi, [esp+18h] |
and ecx, [esp+10h] |
and edi, [esp] |
xor ecx, ebx |
lea ebp, [eax+ebp+78AF2FDAh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebp, [esp] |
mov ebx, [esp+18h] |
mov ecx, [esp+10h] |
mov edi, ebx |
and ebx, [esp+4] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+78h] |
xor edi, [esp+14h] |
and ecx, [esp+0Ch] |
and edi, [esp+1Ch] |
xor ecx, ebx |
lea ebp, [eax+ebp+55605C60h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebp, [esp+1Ch] |
mov ebx, [esp+14h] |
mov ecx, [esp+0Ch] |
mov edi, ebx |
and ebx, [esp] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+40h] |
xor edi, [esp+10h] |
and ecx, [esp+8] |
and edi, [esp+18h] |
xor ecx, ebx |
lea ebp, [eax+ebp-19AADA0Dh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebp, [esp+18h] |
mov ebx, [esp+10h] |
mov ecx, [esp+8] |
mov edi, ebx |
and ebx, [esp+1Ch] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+68h] |
xor edi, [esp+0Ch] |
and ecx, [esp+4] |
and edi, [esp+14h] |
xor ecx, ebx |
lea ebp, [eax+ebp-55AA546Ch] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebp, [esp+14h] |
mov ebx, [esp+0Ch] |
mov ecx, [esp+4] |
mov edi, ebx |
and ebx, [esp+18h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+7Ch] |
xor edi, [esp+8] |
and ecx, [esp] |
and edi, [esp+10h] |
xor ecx, ebx |
lea ebp, [eax+ebp+57489862h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebp, [esp+10h] |
mov ebx, [esp+8] |
mov ecx, [esp] |
mov edi, ebx |
and ebx, [esp+14h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+3Ch] |
xor edi, [esp+4] |
and ecx, [esp+1Ch] |
and edi, [esp+0Ch] |
xor ecx, ebx |
lea ebp, [eax+ebp+63E81440h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebp, [esp+0Ch] |
mov ebx, [esp+4] |
mov ecx, [esp+1Ch] |
mov edi, ebx |
and ebx, [esp+10h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+1Ch] |
xor edi, [esp] |
and ecx, [esp+18h] |
and edi, [esp+8] |
xor ecx, ebx |
lea ebp, [eax+ebp+55CA396Ah] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebp, [esp+8] |
mov ebx, [esp] |
mov ecx, [esp+18h] |
mov edi, ebx |
and ebx, [esp+0Ch] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+0Ch] |
xor edi, [esp+1Ch] |
and ecx, [esp+14h] |
and edi, [esp+4] |
xor ecx, ebx |
lea ebp, [eax+ebp+2AAB10B6h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebp, [esp+4] |
mov ebx, [esp+1Ch] |
mov ecx, [esp+14h] |
mov edi, ebx |
and ebx, [esp+8] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+4] |
xor edi, [esp+18h] |
and ecx, [esp+10h] |
and edi, [esp] |
xor ecx, ebx |
lea ebp, [eax+ebp-4B33A3CCh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebp, [esp] |
mov ebx, [esp+18h] |
mov ecx, [esp+10h] |
mov edi, ebx |
and ebx, [esp+4] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi] |
xor edi, [esp+14h] |
and ecx, [esp+0Ch] |
and edi, [esp+1Ch] |
xor ecx, ebx |
lea ebp, [eax+ebp+1141E8CEh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebp, [esp+1Ch] |
mov ebx, [esp+14h] |
mov ecx, [esp+0Ch] |
mov edi, ebx |
and ebx, [esp] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+48h] |
xor edi, [esp+10h] |
and ecx, [esp+8] |
and edi, [esp+18h] |
xor ecx, ebx |
lea ebp, [eax+ebp-5EAB7951h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebp, [esp+18h] |
mov ebx, [esp+10h] |
mov ecx, [esp+8] |
mov edi, ebx |
and ebx, [esp+1Ch] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+6Ch] |
xor edi, [esp+0Ch] |
and ecx, [esp+4] |
and edi, [esp+14h] |
xor ecx, ebx |
lea ebp, [eax+ebp+7C72E993h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebp, [esp+14h] |
mov ebx, [esp+0Ch] |
mov ecx, [esp+4] |
mov edi, ebx |
and ebx, [esp+18h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+34h] |
xor edi, [esp+8] |
and ecx, [esp] |
and edi, [esp+10h] |
xor ecx, ebx |
lea ebp, [eax+ebp-4C11EBEFh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebp, [esp+10h] |
mov ebx, [esp+8] |
mov ecx, [esp] |
mov edi, ebx |
and ebx, [esp+14h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+18h] |
xor edi, [esp+4] |
and ecx, [esp+1Ch] |
and edi, [esp+0Ch] |
xor ecx, ebx |
lea ebp, [eax+ebp+636FBC2Ah] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebp, [esp+0Ch] |
mov ebx, [esp+4] |
mov ecx, [esp+1Ch] |
mov edi, ebx |
and ebx, [esp+10h] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+54h] |
xor edi, [esp] |
and ecx, [esp+18h] |
and edi, [esp+8] |
xor ecx, ebx |
lea ebp, [eax+ebp+2BA9C55Dh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebp, [esp+8] |
mov ebx, [esp] |
mov ecx, [esp+18h] |
mov edi, ebx |
and ebx, [esp+0Ch] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+28h] |
xor edi, [esp+1Ch] |
and ecx, [esp+14h] |
and edi, [esp+4] |
xor ecx, ebx |
lea ebp, [eax+ebp+741831F6h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebp, [esp+4] |
mov ebx, [esp+1Ch] |
mov ecx, [esp+14h] |
mov edi, ebx |
and ebx, [esp+8] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+5Ch] |
xor edi, [esp+18h] |
and ecx, [esp+10h] |
and edi, [esp] |
xor ecx, ebx |
lea ebp, [eax+ebp-31A3C1EAh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebp, [esp] |
mov ebx, [esp+18h] |
mov ecx, [esp+10h] |
mov edi, ebx |
and ebx, [esp+4] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+2Ch] |
xor edi, [esp+14h] |
and ecx, [esp+0Ch] |
and edi, [esp+1Ch] |
xor ecx, ebx |
lea ebp, [eax+ebp-64786CE2h] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebp, [esp+1Ch] |
mov ebx, [esp+14h] |
mov ecx, [esp+0Ch] |
mov edi, ebx |
and ebx, [esp] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+14h] |
xor edi, [esp+10h] |
and ecx, [esp+8] |
and edi, [esp+18h] |
xor ecx, ebx |
lea ebp, [eax+ebp-502945CDh] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebp, [esp+18h] |
mov ebx, [esp+10h] |
mov ecx, [esp+8] |
mov edi, ebx |
and ebx, [esp+1Ch] |
and edi, ecx |
xor ebx, ebp |
ror eax, 0Bh |
xor edi, ebp |
mov ebp, [esi+8] |
xor edi, [esp+0Ch] |
and ecx, [esp+4] |
and edi, [esp+14h] |
xor ecx, ebx |
lea ebp, [eax+ebp+6C24CF5Ch] |
xor ecx, edi |
ror ecx, 7 |
add ebp, ecx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebp, [esp] |
mov ecx, [esp+14h] |
mov edx, [esp+4] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+8] |
xor ebp, [esp+10h] |
xor ebx, edx |
xor ebp, [esp+18h] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+0Ch] |
and ebp, [esp+10h] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+18h] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+60h] |
and ebp, [esp+8] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+7A325381h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ecx, [esp+10h] |
mov edx, [esp] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+4] |
xor ebp, [esp+0Ch] |
xor ebx, edx |
xor ebp, [esp+14h] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+8] |
and ebp, [esp+0Ch] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+14h] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+10h] |
and ebp, [esp+4] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+28958677h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ecx, [esp+0Ch] |
mov edx, [esp+1Ch] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp] |
xor ebp, [esp+8] |
xor ebx, edx |
xor ebp, [esp+10h] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+4] |
and ebp, [esp+8] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+10h] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi] |
and ebp, [esp] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+3B8F4898h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ecx, [esp+8] |
mov edx, [esp+18h] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+1Ch] |
xor ebp, [esp+4] |
xor ebx, edx |
xor ebp, [esp+0Ch] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp] |
and ebp, [esp+4] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+0Ch] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+38h] |
and ebp, [esp+1Ch] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+6B4BB9AFh] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ecx, [esp+4] |
mov edx, [esp+14h] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+18h] |
xor ebp, [esp] |
xor ebx, edx |
xor ebp, [esp+8] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+1Ch] |
and ebp, [esp] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+8] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+8] |
and ebp, [esp+18h] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx-3B4017E5h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ecx, [esp] |
mov edx, [esp+10h] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+14h] |
xor ebp, [esp+1Ch] |
xor ebx, edx |
xor ebp, [esp+4] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+18h] |
and ebp, [esp+1Ch] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+4] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+1Ch] |
and ebp, [esp+14h] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+66282193h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ecx, [esp+1Ch] |
mov edx, [esp+0Ch] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+10h] |
xor ebp, [esp+18h] |
xor ebx, edx |
xor ebp, [esp] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+14h] |
and ebp, [esp+18h] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+70h] |
and ebp, [esp+10h] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+61D809CCh] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ecx, [esp+18h] |
mov edx, [esp+8] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+0Ch] |
xor ebp, [esp+14h] |
xor ebx, edx |
xor ebp, [esp+1Ch] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+10h] |
and ebp, [esp+14h] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+1Ch] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+5Ch] |
and ebp, [esp+0Ch] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx-4DE566Fh] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ecx, [esp+14h] |
mov edx, [esp+4] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+8] |
xor ebp, [esp+10h] |
xor ebx, edx |
xor ebp, [esp+18h] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+0Ch] |
and ebp, [esp+10h] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+18h] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+68h] |
and ebp, [esp+8] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+487CAC60h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ecx, [esp+10h] |
mov edx, [esp] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+4] |
xor ebp, [esp+0Ch] |
xor ebx, edx |
xor ebp, [esp+14h] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+8] |
and ebp, [esp+0Ch] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+14h] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+18h] |
and ebp, [esp+4] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+5DEC8032h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ecx, [esp+0Ch] |
mov edx, [esp+1Ch] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp] |
xor ebp, [esp+8] |
xor ebx, edx |
xor ebp, [esp+10h] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+4] |
and ebp, [esp+8] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+10h] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+78h] |
and ebp, [esp] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx-107BA2A3h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ecx, [esp+8] |
mov edx, [esp+18h] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+1Ch] |
xor ebp, [esp+4] |
xor ebx, edx |
xor ebp, [esp+0Ch] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp] |
and ebp, [esp+4] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+0Ch] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+50h] |
and ebp, [esp+1Ch] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx-167A8A4Fh] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ecx, [esp+4] |
mov edx, [esp+14h] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+18h] |
xor ebp, [esp] |
xor ebx, edx |
xor ebp, [esp+8] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+1Ch] |
and ebp, [esp] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+8] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+48h] |
and ebp, [esp+18h] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx-23D9DCFEh] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ecx, [esp] |
mov edx, [esp+10h] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+14h] |
xor ebp, [esp+1Ch] |
xor ebx, edx |
xor ebp, [esp+4] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+18h] |
and ebp, [esp+1Ch] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+4] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+64h] |
and ebp, [esp+14h] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx-149AE478h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ecx, [esp+1Ch] |
mov edx, [esp+0Ch] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+10h] |
xor ebp, [esp+18h] |
xor ebx, edx |
xor ebp, [esp] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+14h] |
and ebp, [esp+18h] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+4Ch] |
and ebp, [esp+10h] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+23893E81h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ecx, [esp+18h] |
mov edx, [esp+8] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+0Ch] |
xor ebp, [esp+14h] |
xor ebx, edx |
xor ebp, [esp+1Ch] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+10h] |
and ebp, [esp+14h] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+1Ch] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+0Ch] |
and ebp, [esp+0Ch] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx-2C69533Bh] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ecx, [esp+14h] |
mov edx, [esp+4] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+8] |
xor ebp, [esp+10h] |
xor ebx, edx |
xor ebp, [esp+18h] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+0Ch] |
and ebp, [esp+10h] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+18h] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+58h] |
and ebp, [esp+8] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+0F6D6FF3h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ecx, [esp+10h] |
mov edx, [esp] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+4] |
xor ebp, [esp+0Ch] |
xor ebx, edx |
xor ebp, [esp+14h] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+8] |
and ebp, [esp+0Ch] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+14h] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+2Ch] |
and ebp, [esp+4] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx-7C0BBDC7h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ecx, [esp+0Ch] |
mov edx, [esp+1Ch] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp] |
xor ebp, [esp+8] |
xor ebx, edx |
xor ebp, [esp+10h] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+4] |
and ebp, [esp+8] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+10h] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+7Ch] |
and ebp, [esp] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+2E0B4482h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ecx, [esp+8] |
mov edx, [esp+18h] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+1Ch] |
xor ebp, [esp+4] |
xor ebx, edx |
xor ebp, [esp+0Ch] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp] |
and ebp, [esp+4] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+0Ch] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+54h] |
and ebp, [esp+1Ch] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx-5B7BDFFCh] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ecx, [esp+4] |
mov edx, [esp+14h] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+18h] |
xor ebp, [esp] |
xor ebx, edx |
xor ebp, [esp+8] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+1Ch] |
and ebp, [esp] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+8] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+20h] |
and ebp, [esp+18h] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+69C8F04Ah] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ecx, [esp] |
mov edx, [esp+10h] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+14h] |
xor ebp, [esp+1Ch] |
xor ebx, edx |
xor ebp, [esp+4] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+18h] |
and ebp, [esp+1Ch] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+4] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+6Ch] |
and ebp, [esp+14h] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx-61E064A2h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ecx, [esp+1Ch] |
mov edx, [esp+0Ch] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+10h] |
xor ebp, [esp+18h] |
xor ebx, edx |
xor ebp, [esp] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+14h] |
and ebp, [esp+18h] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+30h] |
and ebp, [esp+10h] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+21C66842h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ecx, [esp+18h] |
mov edx, [esp+8] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+0Ch] |
xor ebp, [esp+14h] |
xor ebx, edx |
xor ebp, [esp+1Ch] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+10h] |
and ebp, [esp+14h] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+1Ch] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+24h] |
and ebp, [esp+0Ch] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx-9169366h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ecx, [esp+14h] |
mov edx, [esp+4] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+8] |
xor ebp, [esp+10h] |
xor ebx, edx |
xor ebp, [esp+18h] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+0Ch] |
and ebp, [esp+10h] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+18h] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+4] |
and ebp, [esp+8] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+670C9C61h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ecx, [esp+10h] |
mov edx, [esp] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+4] |
xor ebp, [esp+0Ch] |
xor ebx, edx |
xor ebp, [esp+14h] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+8] |
and ebp, [esp+0Ch] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+14h] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+74h] |
and ebp, [esp+4] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx-542C7710h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ecx, [esp+0Ch] |
mov edx, [esp+1Ch] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp] |
xor ebp, [esp+8] |
xor ebx, edx |
xor ebp, [esp+10h] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+4] |
and ebp, [esp+8] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+10h] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+14h] |
and ebp, [esp] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+6A51A0D2h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ecx, [esp+8] |
mov edx, [esp+18h] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+1Ch] |
xor ebp, [esp+4] |
xor ebx, edx |
xor ebp, [esp+0Ch] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp] |
and ebp, [esp+4] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+0Ch] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+3Ch] |
and ebp, [esp+1Ch] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx-27ABD098h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ecx, [esp+4] |
mov edx, [esp+14h] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+18h] |
xor ebp, [esp] |
xor ebx, edx |
xor ebp, [esp+8] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+1Ch] |
and ebp, [esp] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+8] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+44h] |
and ebp, [esp+18h] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx-69F058D8h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ecx, [esp] |
mov edx, [esp+10h] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+14h] |
xor ebp, [esp+1Ch] |
xor ebx, edx |
xor ebp, [esp+4] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+18h] |
and ebp, [esp+1Ch] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+4] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+28h] |
and ebp, [esp+14h] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx-54AECC5Dh] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ecx, [esp+1Ch] |
mov edx, [esp+0Ch] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+10h] |
xor ebp, [esp+18h] |
xor ebx, edx |
xor ebp, [esp] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+14h] |
and ebp, [esp+18h] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+40h] |
and ebp, [esp+10h] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+6EEF0B6Ch] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp] |
mov [esp+4], ebp |
mov ecx, [esp+18h] |
mov edx, [esp+8] |
mov edi, ebp |
mov ebx, edx |
xor ebp, 0FFFFFFFFh |
xor ebx, 0FFFFFFFFh |
and ebp, ecx |
and ebx, [esp+0Ch] |
xor ebp, [esp+14h] |
xor ebx, edx |
xor ebp, [esp+1Ch] |
xor ebx, ebp |
mov ebp, edi |
and ebx, [esp+10h] |
and ebp, [esp+14h] |
and edi, edx |
xor ebp, ecx |
xor ebx, [esp+1Ch] |
ror eax, 0Bh |
xor ebp, edx |
mov edx, [esi+34h] |
and ebp, [esp+0Ch] |
xor ebx, edi |
xor ebp, ebx |
lea edx, [eax+edx+137A3BE4h] |
ror ebp, 7 |
add ebp, edx |
mov eax, [esp+1Ch] |
mov [esp], ebp |
nop |
nop |
nop |
nop |
mov ebx, [esp+0Ch] |
mov ecx, [esp+10h] |
and ebp, ebx |
mov edx, [esp+14h] |
and ebx, ecx |
mov edi, [esp+18h] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp+8] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi+6Ch] |
and ebx, [esp+4] |
xor ebp, ecx |
lea edi, [eax+edi-45C40FB0h] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebx, [esp+8] |
mov ecx, [esp+0Ch] |
and ebp, ebx |
mov edx, [esp+10h] |
and ebx, ecx |
mov edi, [esp+14h] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp+4] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi+0Ch] |
and ebx, [esp] |
xor ebp, ecx |
lea edi, [eax+edi+7EFB2A98h] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebx, [esp+4] |
mov ecx, [esp+8] |
and ebp, ebx |
mov edx, [esp+0Ch] |
and ebx, ecx |
mov edi, [esp+10h] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi+54h] |
and ebx, [esp+1Ch] |
xor ebp, ecx |
lea edi, [eax+edi-5E0E9AE3h] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebx, [esp] |
mov ecx, [esp+4] |
and ebp, ebx |
mov edx, [esp+8] |
and ebx, ecx |
mov edi, [esp+0Ch] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp+1Ch] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi+68h] |
and ebx, [esp+18h] |
xor ebp, ecx |
lea edi, [eax+edi+39AF0176h] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebx, [esp+1Ch] |
mov ecx, [esp] |
and ebp, ebx |
mov edx, [esp+4] |
and ebx, ecx |
mov edi, [esp+8] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp+18h] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi+44h] |
and ebx, [esp+14h] |
xor ebp, ecx |
lea edi, [eax+edi+66CA593Eh] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebx, [esp+18h] |
mov ecx, [esp+1Ch] |
and ebp, ebx |
mov edx, [esp] |
and ebx, ecx |
mov edi, [esp+4] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp+14h] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi+2Ch] |
and ebx, [esp+10h] |
xor ebp, ecx |
lea edi, [eax+edi-7DBCF178h] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebx, [esp+14h] |
mov ecx, [esp+18h] |
and ebp, ebx |
mov edx, [esp+1Ch] |
and ebx, ecx |
mov edi, [esp] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp+10h] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi+50h] |
and ebx, [esp+0Ch] |
xor ebp, ecx |
lea edi, [eax+edi-731179E7h] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebx, [esp+10h] |
mov ecx, [esp+14h] |
and ebp, ebx |
mov edx, [esp+18h] |
and ebx, ecx |
mov edi, [esp+1Ch] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp+0Ch] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi+74h] |
and ebx, [esp+8] |
xor ebp, ecx |
lea edi, [eax+edi+456F9FB4h] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebx, [esp+0Ch] |
mov ecx, [esp+10h] |
and ebp, ebx |
mov edx, [esp+14h] |
and ebx, ecx |
mov edi, [esp+18h] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp+8] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi+4Ch] |
and ebx, [esp+4] |
xor ebp, ecx |
lea edi, [eax+edi+7D84A5C3h] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebx, [esp+8] |
mov ecx, [esp+0Ch] |
and ebp, ebx |
mov edx, [esp+10h] |
and ebx, ecx |
mov edi, [esp+14h] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp+4] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi] |
and ebx, [esp] |
xor ebp, ecx |
lea edi, [eax+edi+3B8B5EBEh] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebx, [esp+4] |
mov ecx, [esp+8] |
and ebp, ebx |
mov edx, [esp+0Ch] |
and ebx, ecx |
mov edi, [esp+10h] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi+30h] |
and ebx, [esp+1Ch] |
xor ebp, ecx |
lea edi, [eax+edi-1F908A28h] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebx, [esp] |
mov ecx, [esp+4] |
and ebp, ebx |
mov edx, [esp+8] |
and ebx, ecx |
mov edi, [esp+0Ch] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp+1Ch] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi+1Ch] |
and ebx, [esp+18h] |
xor ebp, ecx |
lea edi, [eax+edi-7A3EDF8Dh] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebx, [esp+1Ch] |
mov ecx, [esp] |
and ebp, ebx |
mov edx, [esp+4] |
and ebx, ecx |
mov edi, [esp+8] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp+18h] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi+34h] |
and ebx, [esp+14h] |
xor ebp, ecx |
lea edi, [eax+edi+401A449Fh] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebx, [esp+18h] |
mov ecx, [esp+1Ch] |
and ebp, ebx |
mov edx, [esp] |
and ebx, ecx |
mov edi, [esp+4] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp+14h] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi+20h] |
and ebx, [esp+10h] |
xor ebp, ecx |
lea edi, [eax+edi+56C16AA6h] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebx, [esp+14h] |
mov ecx, [esp+18h] |
and ebp, ebx |
mov edx, [esp+1Ch] |
and ebx, ecx |
mov edi, [esp] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp+10h] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi+7Ch] |
and ebx, [esp+0Ch] |
xor ebp, ecx |
lea edi, [eax+edi+4ED3AA62h] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebx, [esp+10h] |
mov ecx, [esp+14h] |
and ebp, ebx |
mov edx, [esp+18h] |
and ebx, ecx |
mov edi, [esp+1Ch] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp+0Ch] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi+28h] |
and ebx, [esp+8] |
xor ebp, ecx |
lea edi, [eax+edi+363F7706h] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebx, [esp+0Ch] |
mov ecx, [esp+10h] |
and ebp, ebx |
mov edx, [esp+14h] |
and ebx, ecx |
mov edi, [esp+18h] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp+8] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi+14h] |
and ebx, [esp+4] |
xor ebp, ecx |
lea edi, [eax+edi+1BFEDF72h] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebx, [esp+8] |
mov ecx, [esp+0Ch] |
and ebp, ebx |
mov edx, [esp+10h] |
and ebx, ecx |
mov edi, [esp+14h] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp+4] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi+24h] |
and ebx, [esp] |
xor ebp, ecx |
lea edi, [eax+edi+429B023Dh] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebx, [esp+4] |
mov ecx, [esp+8] |
and ebp, ebx |
mov edx, [esp+0Ch] |
and ebx, ecx |
mov edi, [esp+10h] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi+38h] |
and ebx, [esp+1Ch] |
xor ebp, ecx |
lea edi, [eax+edi+37D0D724h] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebx, [esp] |
mov ecx, [esp+4] |
and ebp, ebx |
mov edx, [esp+8] |
and ebx, ecx |
mov edi, [esp+0Ch] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp+1Ch] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi+78h] |
and ebx, [esp+18h] |
xor ebp, ecx |
lea edi, [eax+edi-2FF5EDB8h] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebx, [esp+1Ch] |
mov ecx, [esp] |
and ebp, ebx |
mov edx, [esp+4] |
and ebx, ecx |
mov edi, [esp+8] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp+18h] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi+48h] |
and ebx, [esp+14h] |
xor ebp, ecx |
lea edi, [eax+edi-24F0152Dh] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebx, [esp+18h] |
mov ecx, [esp+1Ch] |
and ebp, ebx |
mov edx, [esp] |
and ebx, ecx |
mov edi, [esp+4] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp+14h] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi+18h] |
and ebx, [esp+10h] |
xor ebp, ecx |
lea edi, [eax+edi+49F1C09Bh] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebx, [esp+14h] |
mov ecx, [esp+18h] |
and ebp, ebx |
mov edx, [esp+1Ch] |
and ebx, ecx |
mov edi, [esp] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp+10h] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi+70h] |
and ebx, [esp+0Ch] |
xor ebp, ecx |
lea edi, [eax+edi+75372C9h] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebx, [esp+10h] |
mov ecx, [esp+14h] |
and ebp, ebx |
mov edx, [esp+18h] |
and ebx, ecx |
mov edi, [esp+1Ch] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp+0Ch] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi+60h] |
and ebx, [esp+8] |
xor ebp, ecx |
lea edi, [eax+edi-7F66E485h] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov ebx, [esp+0Ch] |
mov ecx, [esp+10h] |
and ebp, ebx |
mov edx, [esp+14h] |
and ebx, ecx |
mov edi, [esp+18h] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp+8] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi+8] |
and ebx, [esp+4] |
xor ebp, ecx |
lea edi, [eax+edi+25D479D8h] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp+18h] |
mov [esp+1Ch], ebp |
mov ebx, [esp+8] |
mov ecx, [esp+0Ch] |
and ebp, ebx |
mov edx, [esp+10h] |
and ebx, ecx |
mov edi, [esp+14h] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp+4] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi+5Ch] |
and ebx, [esp] |
xor ebp, ecx |
lea edi, [eax+edi-9172109h] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp+14h] |
mov [esp+18h], ebp |
mov ebx, [esp+4] |
mov ecx, [esp+8] |
and ebp, ebx |
mov edx, [esp+0Ch] |
and ebx, ecx |
mov edi, [esp+10h] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi+40h] |
and ebx, [esp+1Ch] |
xor ebp, ecx |
lea edi, [eax+edi-1C01AFE6h] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp+10h] |
mov [esp+14h], ebp |
mov ebx, [esp] |
mov ecx, [esp+4] |
and ebp, ebx |
mov edx, [esp+8] |
and ebx, ecx |
mov edi, [esp+0Ch] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp+1Ch] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi+58h] |
and ebx, [esp+18h] |
xor ebp, ecx |
lea edi, [eax+edi-4986B3C5h] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp+0Ch] |
mov [esp+10h], ebp |
mov ebx, [esp+1Ch] |
mov ecx, [esp] |
and ebp, ebx |
mov edx, [esp+4] |
and ebx, ecx |
mov edi, [esp+8] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp+18h] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi+10h] |
and ebx, [esp+14h] |
xor ebp, ecx |
lea edi, [eax+edi-68931F43h] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp+8] |
mov [esp+0Ch], ebp |
mov ebx, [esp+18h] |
mov ecx, [esp+1Ch] |
and ebp, ebx |
mov edx, [esp] |
and ebx, ecx |
mov edi, [esp+4] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp+14h] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi+4] |
and ebx, [esp+10h] |
xor ebp, ecx |
lea edi, [eax+edi+4C006BAh] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp+4] |
mov [esp+8], ebp |
mov ebx, [esp+14h] |
mov ecx, [esp+18h] |
and ebp, ebx |
mov edx, [esp+1Ch] |
and ebx, ecx |
mov edi, [esp] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp+10h] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi+64h] |
and ebx, [esp+0Ch] |
xor ebp, ecx |
lea edi, [eax+edi-3E56B04Ah] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp] |
mov [esp+4], ebp |
mov ebx, [esp+10h] |
mov ecx, [esp+14h] |
and ebp, ebx |
mov edx, [esp+18h] |
and ebx, ecx |
mov edi, [esp+1Ch] |
and ecx, edx |
xor edx, 0FFFFFFFFh |
and ebx, edi |
and edi, [esp+0Ch] |
xor ebx, edx |
ror eax, 0Bh |
xor ecx, edi |
mov edi, [esi+3Ch] |
and ebx, [esp+8] |
xor ebp, ecx |
lea edi, [eax+edi+409F60C4h] |
xor ebp, ebx |
ror ebp, 7 |
add ebp, edi |
mov eax, [esp+1Ch] |
mov [esp], ebp |
mov edi, [esp+24h] |
mov eax, [esp] |
mov ebx, [esp+4] |
add [edi], eax |
add [edi+4], ebx |
mov ecx, [esp+8] |
mov edx, [esp+0Ch] |
add [edi+8], ecx |
add [edi+0Ch], edx |
mov eax, [esp+10h] |
mov ebx, [esp+14h] |
add [edi+10h], eax |
add [edi+14h], ebx |
mov ebp, [esp+28h] |
mov ecx, [esp+18h] |
mov edx, [esp+1Ch] |
mov esp, ebp |
add [edi+18h], ecx |
add [edi+1Ch], edx |
pop ebp |
pop edi |
pop esi |
pop ebx |
end; |
{$ENDIF} |
{$IFDEF THash_Tiger_asm} |
procedure THash_Tiger.DoTransform(Buffer: PUInt32Array); |
asm |
push ebx |
push esi |
push edi |
lea edi, [eax].THash_Tiger.FDigest |
mov esi, edx |
push ebp |
mov ebp, [eax].THash_Tiger.FRounds |
lea eax, Tiger_Data |
mov ecx, esp |
add esp, 0FFFFFF94h |
and esp, 0FFFFFFC0h |
sub ebp, 3 |
mov [esp+58h], esi |
mov [esp+5Ch], edi |
mov [esp+60h], ebp |
mov [esp+64h], eax |
mov [esp+68h], ecx |
mov eax, [esi] |
mov ebx, [esi+4] |
mov [esp], eax |
mov [esp+4], ebx |
mov ecx, [esi+8] |
mov edx, [esi+0Ch] |
mov [esp+8], ecx |
mov [esp+0Ch], edx |
mov eax, [esi+10h] |
mov ebx, [esi+14h] |
mov [esp+10h], eax |
mov [esp+14h], ebx |
mov ecx, [esi+18h] |
mov edx, [esi+1Ch] |
mov [esp+18h], ecx |
mov [esp+1Ch], edx |
mov eax, [esi+20h] |
mov ebx, [esi+24h] |
mov [esp+20h], eax |
mov [esp+24h], ebx |
mov ecx, [esi+28h] |
mov edx, [esi+2Ch] |
mov [esp+28h], ecx |
mov [esp+2Ch], edx |
mov eax, [esi+30h] |
mov ebx, [esi+34h] |
mov [esp+30h], eax |
mov [esp+34h], ebx |
mov ecx, [esi+38h] |
mov edx, [esi+3Ch] |
mov [esp+38h], ecx |
mov [esp+3Ch], edx |
mov eax, [edi] |
mov ebx, [edi+4] |
mov [esp+40h], eax |
mov [esp+44h], ebx |
mov ecx, [edi+8] |
mov edx, [edi+0Ch] |
mov [esp+48h], ecx |
mov [esp+4Ch], edx |
mov eax, [edi+10h] |
mov ebx, [edi+14h] |
mov [esp+50h], eax |
mov [esp+54h], ebx |
mov esi, [esp+64h] |
mov eax, [esp] |
mov ebx, [esp+4] |
mov ecx, [esp+50h] |
mov edx, [esp+54h] |
xor eax, ecx |
xor ebx, edx |
mov edi, eax |
mov [esp+50h], eax |
shr eax, 0Dh |
mov ebp, ebx |
and edi, 0FFh |
mov [esp+54h], ebx |
shl edi, 3 |
and ebp, 0FFh |
shr ebx, 0Dh |
and eax, 7F8h |
shl ebp, 3 |
mov ecx, [esi+edi] |
mov edx, [esi+edi+4] |
xor ecx, [esi+eax+800h] |
xor edx, [esi+eax+804h] |
and ebx, 7F8h |
xor ecx, [esi+ebp+1000h] |
xor edx, [esi+ebp+1004h] |
xor ecx, [esi+ebx+1800h] |
xor edx, [esi+ebx+1804h] |
mov edi, [esp+40h] |
mov ebp, [esp+44h] |
sub edi, ecx |
mov eax, [esp+50h] |
sbb ebp, edx |
mov ebx, [esp+54h] |
mov [esp+40h], edi |
mov edi, eax |
shr eax, 5 |
mov [esp+44h], ebp |
shr edi, 15h |
mov ebp, ebx |
shr ebx, 5 |
and eax, 7F8h |
shr ebp, 15h |
and edi, 7F8h |
and ebx, 7F8h |
mov ecx, [esi+eax+1800h] |
mov edx, [esi+eax+1804h] |
xor ecx, [esi+edi+1000h] |
and ebp, 7F8h |
xor edx, [esi+edi+1004h] |
xor ecx, [esi+ebx+800h] |
xor edx, [esi+ebx+804h] |
xor ecx, [esi+ebp] |
xor edx, [esi+ebp+4] |
mov eax, [esp+48h] |
mov ebx, [esp+4Ch] |
add eax, ecx |
adc ebx, edx |
mov ecx, eax |
shr ecx, 1Eh |
mov ebp, ebx |
shl ebx, 2 |
mov edi, eax |
shl eax, 2 |
or ebx, ecx |
add eax, edi |
adc ebx, ebp |
mov [esp+48h], eax |
mov [esp+4Ch], ebx |
mov eax, [esp+8] |
mov ebx, [esp+0Ch] |
mov ecx, [esp+40h] |
mov edx, [esp+44h] |
xor eax, ecx |
xor ebx, edx |
mov edi, eax |
mov [esp+40h], eax |
shr eax, 0Dh |
mov ebp, ebx |
and edi, 0FFh |
mov [esp+44h], ebx |
shl edi, 3 |
and ebp, 0FFh |
shr ebx, 0Dh |
and eax, 7F8h |
shl ebp, 3 |
mov ecx, [esi+edi] |
mov edx, [esi+edi+4] |
xor ecx, [esi+eax+800h] |
xor edx, [esi+eax+804h] |
and ebx, 7F8h |
xor ecx, [esi+ebp+1000h] |
xor edx, [esi+ebp+1004h] |
xor ecx, [esi+ebx+1800h] |
xor edx, [esi+ebx+1804h] |
mov edi, [esp+48h] |
mov ebp, [esp+4Ch] |
sub edi, ecx |
mov eax, [esp+40h] |
sbb ebp, edx |
mov ebx, [esp+44h] |
mov [esp+48h], edi |
mov edi, eax |
shr eax, 5 |
mov [esp+4Ch], ebp |
shr edi, 15h |
mov ebp, ebx |
shr ebx, 5 |
and eax, 7F8h |
shr ebp, 15h |
and edi, 7F8h |
and ebx, 7F8h |
mov ecx, [esi+eax+1800h] |
mov edx, [esi+eax+1804h] |
xor ecx, [esi+edi+1000h] |
and ebp, 7F8h |
xor edx, [esi+edi+1004h] |
xor ecx, [esi+ebx+800h] |
xor edx, [esi+ebx+804h] |
xor ecx, [esi+ebp] |
xor edx, [esi+ebp+4] |
mov eax, [esp+50h] |
mov ebx, [esp+54h] |
add eax, ecx |
adc ebx, edx |
mov ecx, eax |
shr ecx, 1Eh |
mov ebp, ebx |
shl ebx, 2 |
mov edi, eax |
shl eax, 2 |
or ebx, ecx |
add eax, edi |
adc ebx, ebp |
mov [esp+50h], eax |
mov [esp+54h], ebx |
mov eax, [esp+10h] |
mov ebx, [esp+14h] |
mov ecx, [esp+48h] |
mov edx, [esp+4Ch] |
xor eax, ecx |
xor ebx, edx |
mov edi, eax |
mov [esp+48h], eax |
shr eax, 0Dh |
mov ebp, ebx |
and edi, 0FFh |
mov [esp+4Ch], ebx |
shl edi, 3 |
and ebp, 0FFh |
shr ebx, 0Dh |
and eax, 7F8h |
shl ebp, 3 |
mov ecx, [esi+edi] |
mov edx, [esi+edi+4] |
xor ecx, [esi+eax+800h] |
xor edx, [esi+eax+804h] |
and ebx, 7F8h |
xor ecx, [esi+ebp+1000h] |
xor edx, [esi+ebp+1004h] |
xor ecx, [esi+ebx+1800h] |
xor edx, [esi+ebx+1804h] |
mov edi, [esp+50h] |
mov ebp, [esp+54h] |
sub edi, ecx |
mov eax, [esp+48h] |
sbb ebp, edx |
mov ebx, [esp+4Ch] |
mov [esp+50h], edi |
mov edi, eax |
shr eax, 5 |
mov [esp+54h], ebp |
shr edi, 15h |
mov ebp, ebx |
shr ebx, 5 |
and eax, 7F8h |
shr ebp, 15h |
and edi, 7F8h |
and ebx, 7F8h |
mov ecx, [esi+eax+1800h] |
mov edx, [esi+eax+1804h] |
xor ecx, [esi+edi+1000h] |
and ebp, 7F8h |
xor edx, [esi+edi+1004h] |
xor ecx, [esi+ebx+800h] |
xor edx, [esi+ebx+804h] |
xor ecx, [esi+ebp] |
xor edx, [esi+ebp+4] |
mov eax, [esp+40h] |
mov ebx, [esp+44h] |
add eax, ecx |
adc ebx, edx |
mov ecx, eax |
shr ecx, 1Eh |
mov ebp, ebx |
shl ebx, 2 |
mov edi, eax |
shl eax, 2 |
or ebx, ecx |
add eax, edi |
adc ebx, ebp |
mov [esp+40h], eax |
mov [esp+44h], ebx |
mov eax, [esp+18h] |
mov ebx, [esp+1Ch] |
mov ecx, [esp+50h] |
mov edx, [esp+54h] |
xor eax, ecx |
xor ebx, edx |
mov edi, eax |
mov [esp+50h], eax |
shr eax, 0Dh |
mov ebp, ebx |
and edi, 0FFh |
mov [esp+54h], ebx |
shl edi, 3 |
and ebp, 0FFh |
shr ebx, 0Dh |
and eax, 7F8h |
shl ebp, 3 |
mov ecx, [esi+edi] |
mov edx, [esi+edi+4] |
xor ecx, [esi+eax+800h] |
xor edx, [esi+eax+804h] |
and ebx, 7F8h |
xor ecx, [esi+ebp+1000h] |
xor edx, [esi+ebp+1004h] |
xor ecx, [esi+ebx+1800h] |
xor edx, [esi+ebx+1804h] |
mov edi, [esp+40h] |
mov ebp, [esp+44h] |
sub edi, ecx |
mov eax, [esp+50h] |
sbb ebp, edx |
mov ebx, [esp+54h] |
mov [esp+40h], edi |
mov edi, eax |
shr eax, 5 |
mov [esp+44h], ebp |
shr edi, 15h |
mov ebp, ebx |
shr ebx, 5 |
and eax, 7F8h |
shr ebp, 15h |
and edi, 7F8h |
and ebx, 7F8h |
mov ecx, [esi+eax+1800h] |
mov edx, [esi+eax+1804h] |
xor ecx, [esi+edi+1000h] |
and ebp, 7F8h |
xor edx, [esi+edi+1004h] |
xor ecx, [esi+ebx+800h] |
xor edx, [esi+ebx+804h] |
xor ecx, [esi+ebp] |
xor edx, [esi+ebp+4] |
mov eax, [esp+48h] |
mov ebx, [esp+4Ch] |
add eax, ecx |
adc ebx, edx |
mov ecx, eax |
shr ecx, 1Eh |
mov ebp, ebx |
shl ebx, 2 |
mov edi, eax |
shl eax, 2 |
or ebx, ecx |
add eax, edi |
adc ebx, ebp |
mov [esp+48h], eax |
mov [esp+4Ch], ebx |
mov eax, [esp+20h] |
mov ebx, [esp+24h] |
mov ecx, [esp+40h] |
mov edx, [esp+44h] |
xor eax, ecx |
xor ebx, edx |
mov edi, eax |
mov [esp+40h], eax |
shr eax, 0Dh |
mov ebp, ebx |
and edi, 0FFh |
mov [esp+44h], ebx |
shl edi, 3 |
and ebp, 0FFh |
shr ebx, 0Dh |
and eax, 7F8h |
shl ebp, 3 |
mov ecx, [esi+edi] |
mov edx, [esi+edi+4] |
xor ecx, [esi+eax+800h] |
xor edx, [esi+eax+804h] |
and ebx, 7F8h |
xor ecx, [esi+ebp+1000h] |
xor edx, [esi+ebp+1004h] |
xor ecx, [esi+ebx+1800h] |
xor edx, [esi+ebx+1804h] |
mov edi, [esp+48h] |
mov ebp, [esp+4Ch] |
sub edi, ecx |
mov eax, [esp+40h] |
sbb ebp, edx |
mov ebx, [esp+44h] |
mov [esp+48h], edi |
mov edi, eax |
shr eax, 5 |
mov [esp+4Ch], ebp |
shr edi, 15h |
mov ebp, ebx |
shr ebx, 5 |
and eax, 7F8h |
shr ebp, 15h |
and edi, 7F8h |
and ebx, 7F8h |
mov ecx, [esi+eax+1800h] |
mov edx, [esi+eax+1804h] |
xor ecx, [esi+edi+1000h] |
and ebp, 7F8h |
xor edx, [esi+edi+1004h] |
xor ecx, [esi+ebx+800h] |
xor edx, [esi+ebx+804h] |
xor ecx, [esi+ebp] |
xor edx, [esi+ebp+4] |
mov eax, [esp+50h] |
mov ebx, [esp+54h] |
add eax, ecx |
adc ebx, edx |
mov ecx, eax |
shr ecx, 1Eh |
mov ebp, ebx |
shl ebx, 2 |
mov edi, eax |
shl eax, 2 |
or ebx, ecx |
add eax, edi |
adc ebx, ebp |
mov [esp+50h], eax |
mov [esp+54h], ebx |
mov eax, [esp+28h] |
mov ebx, [esp+2Ch] |
mov ecx, [esp+48h] |
mov edx, [esp+4Ch] |
xor eax, ecx |
xor ebx, edx |
mov edi, eax |
mov [esp+48h], eax |
shr eax, 0Dh |
mov ebp, ebx |
and edi, 0FFh |
mov [esp+4Ch], ebx |
shl edi, 3 |
and ebp, 0FFh |
shr ebx, 0Dh |
and eax, 7F8h |
shl ebp, 3 |
mov ecx, [esi+edi] |
mov edx, [esi+edi+4] |
xor ecx, [esi+eax+800h] |
xor edx, [esi+eax+804h] |
and ebx, 7F8h |
xor ecx, [esi+ebp+1000h] |
xor edx, [esi+ebp+1004h] |
xor ecx, [esi+ebx+1800h] |
xor edx, [esi+ebx+1804h] |
mov edi, [esp+50h] |
mov ebp, [esp+54h] |
sub edi, ecx |
mov eax, [esp+48h] |
sbb ebp, edx |
mov ebx, [esp+4Ch] |
mov [esp+50h], edi |
mov edi, eax |
shr eax, 5 |
mov [esp+54h], ebp |
shr edi, 15h |
mov ebp, ebx |
shr ebx, 5 |
and eax, 7F8h |
shr ebp, 15h |
and edi, 7F8h |
and ebx, 7F8h |
mov ecx, [esi+eax+1800h] |
mov edx, [esi+eax+1804h] |
xor ecx, [esi+edi+1000h] |
and ebp, 7F8h |
xor edx, [esi+edi+1004h] |
xor ecx, [esi+ebx+800h] |
xor edx, [esi+ebx+804h] |
xor ecx, [esi+ebp] |
xor edx, [esi+ebp+4] |
mov eax, [esp+40h] |
mov ebx, [esp+44h] |
add eax, ecx |
adc ebx, edx |
mov ecx, eax |
shr ecx, 1Eh |
mov ebp, ebx |
shl ebx, 2 |
mov edi, eax |
shl eax, 2 |
or ebx, ecx |
add eax, edi |
adc ebx, ebp |
mov [esp+40h], eax |
mov [esp+44h], ebx |
mov eax, [esp+30h] |
mov ebx, [esp+34h] |
mov ecx, [esp+50h] |
mov edx, [esp+54h] |
xor eax, ecx |
xor ebx, edx |
mov edi, eax |
mov [esp+50h], eax |
shr eax, 0Dh |
mov ebp, ebx |
and edi, 0FFh |
mov [esp+54h], ebx |
shl edi, 3 |
and ebp, 0FFh |
shr ebx, 0Dh |
and eax, 7F8h |
shl ebp, 3 |
mov ecx, [esi+edi] |
mov edx, [esi+edi+4] |
xor ecx, [esi+eax+800h] |
xor edx, [esi+eax+804h] |
and ebx, 7F8h |
xor ecx, [esi+ebp+1000h] |
xor edx, [esi+ebp+1004h] |
xor ecx, [esi+ebx+1800h] |
xor edx, [esi+ebx+1804h] |
mov edi, [esp+40h] |
mov ebp, [esp+44h] |
sub edi, ecx |
mov eax, [esp+50h] |
sbb ebp, edx |
mov ebx, [esp+54h] |
mov [esp+40h], edi |
mov edi, eax |
shr eax, 5 |
mov [esp+44h], ebp |
shr edi, 15h |
mov ebp, ebx |
shr ebx, 5 |
and eax, 7F8h |
shr ebp, 15h |
and edi, 7F8h |
and ebx, 7F8h |
mov ecx, [esi+eax+1800h] |
mov edx, [esi+eax+1804h] |
xor ecx, [esi+edi+1000h] |
and ebp, 7F8h |
xor edx, [esi+edi+1004h] |
xor ecx, [esi+ebx+800h] |
xor edx, [esi+ebx+804h] |
xor ecx, [esi+ebp] |
xor edx, [esi+ebp+4] |
mov eax, [esp+48h] |
mov ebx, [esp+4Ch] |
add eax, ecx |
adc ebx, edx |
mov ecx, eax |
shr ecx, 1Eh |
mov ebp, ebx |
shl ebx, 2 |
mov edi, eax |
shl eax, 2 |
or ebx, ecx |
add eax, edi |
adc ebx, ebp |
mov [esp+48h], eax |
mov [esp+4Ch], ebx |
mov eax, [esp+38h] |
mov ebx, [esp+3Ch] |
mov ecx, [esp+40h] |
mov edx, [esp+44h] |
xor eax, ecx |
xor ebx, edx |
mov edi, eax |
mov [esp+40h], eax |
shr eax, 0Dh |
mov ebp, ebx |
and edi, 0FFh |
mov [esp+44h], ebx |
shl edi, 3 |
and ebp, 0FFh |
shr ebx, 0Dh |
and eax, 7F8h |
shl ebp, 3 |
mov ecx, [esi+edi] |
mov edx, [esi+edi+4] |
xor ecx, [esi+eax+800h] |
xor edx, [esi+eax+804h] |
and ebx, 7F8h |
xor ecx, [esi+ebp+1000h] |
xor edx, [esi+ebp+1004h] |
xor ecx, [esi+ebx+1800h] |
xor edx, [esi+ebx+1804h] |
mov edi, [esp+48h] |
mov ebp, [esp+4Ch] |
sub edi, ecx |
mov eax, [esp+40h] |
sbb ebp, edx |
mov ebx, [esp+44h] |
mov [esp+48h], edi |
mov edi, eax |
shr eax, 5 |
mov [esp+4Ch], ebp |
shr edi, 15h |
mov ebp, ebx |
shr ebx, 5 |
and eax, 7F8h |
shr ebp, 15h |
and edi, 7F8h |
and ebx, 7F8h |
mov ecx, [esi+eax+1800h] |
mov edx, [esi+eax+1804h] |
xor ecx, [esi+edi+1000h] |
and ebp, 7F8h |
xor edx, [esi+edi+1004h] |
xor ecx, [esi+ebx+800h] |
xor edx, [esi+ebx+804h] |
xor ecx, [esi+ebp] |
xor edx, [esi+ebp+4] |
mov eax, [esp+50h] |
mov ebx, [esp+54h] |
add eax, ecx |
adc ebx, edx |
mov ecx, eax |
shr ecx, 1Eh |
mov ebp, ebx |
shl ebx, 2 |
mov edi, eax |
shl eax, 2 |
or ebx, ecx |
add eax, edi |
adc ebx, ebp |
mov [esp+50h], eax |
mov [esp+54h], ebx |
mov eax, [esp+38h] |
mov ebx, [esp+3Ch] |
xor eax, 0A5A5A5A5h |
xor ebx, 0A5A5A5A5h |
mov ecx, [esp] |
mov edx, [esp+4] |
sub ecx, eax |
sbb edx, ebx |
mov [esp], ecx |
mov [esp+4], edx |
mov eax, [esp+8] |
mov ebx, [esp+0Ch] |
xor eax, ecx |
xor ebx, edx |
mov [esp+8], eax |
mov edi, eax |
mov esi, eax |
shr edi, 0Dh |
xor eax, 0FFFFFFFFh |
mov [esp+0Ch], ebx |
mov ecx, [esp+10h] |
shl eax, 13h |
mov ebp, ebx |
shl ebx, 13h |
mov edx, [esp+14h] |
add esi, ecx |
mov ecx, [esp+20h] |
adc ebp, edx |
or edi, ebx |
mov [esp+10h], esi |
xor esi, eax |
mov [esp+14h], ebp |
mov eax, [esp+18h] |
xor ebp, 0FFFFFFFFh |
mov ebx, [esp+1Ch] |
xor ebp, edi |
sub eax, esi |
sbb ebx, ebp |
mov edx, [esp+24h] |
mov [esp+18h], eax |
xor eax, ecx |
mov [esp+1Ch], ebx |
xor ebx, edx |
mov ecx, [esp+28h] |
mov edx, [esp+2Ch] |
mov edi, ebx |
mov ebp, ebx |
mov [esp+20h], eax |
xor ebp, 0FFFFFFFFh |
shl ebx, 9 |
add ecx, eax |
adc edx, edi |
mov [esp+24h], edi |
shr ebp, 17h |
mov [esp+28h], ecx |
shr eax, 17h |
xor ecx, 0FFFFFFFFh |
or ebx, eax |
mov [esp+2Ch], edx |
mov eax, [esp+30h] |
xor ecx, ebx |
mov ebx, [esp+34h] |
xor edx, ebp |
mov edi, [esp+38h] |
sub eax, ecx |
mov ebp, [esp+3Ch] |
mov [esp+30h], eax |
sbb ebx, edx |
xor edi, eax |
xor ebp, ebx |
mov [esp+34h], ebx |
mov eax, [esp] |
mov ecx, edi |
xor edi, 0FFFFFFFFh |
mov ebx, [esp+4] |
shl edi, 13h |
mov [esp+38h], ecx |
add eax, ecx |
mov [esp+3Ch], ebp |
adc ebx, ebp |
xor edi, eax |
shr ecx, 0Dh |
mov [esp], eax |
shl ebp, 13h |
mov [esp+4], ebx |
mov esi, [esp+8] |
xor ebx, 0FFFFFFFFh |
or ebp, ecx |
mov edx, [esp+0Ch] |
xor ebp, ebx |
sub esi, edi |
mov eax, [esp+10h] |
mov ebx, [esp+14h] |
sbb edx, ebp |
mov [esp+8], esi |
xor eax, esi |
mov [esp+0Ch], edx |
mov edi, [esp+18h] |
mov ebp, [esp+1Ch] |
xor ebx, edx |
mov [esp+10h], eax |
add edi, eax |
mov esi, ebx |
adc ebp, ebx |
mov [esp+14h], ebx |
shr eax, 17h |
mov ecx, [esp+20h] |
xor ebx, 0FFFFFFFFh |
mov edx, [esp+24h] |
shl esi, 9 |
mov [esp+18h], edi |
or eax, esi |
xor edi, 0FFFFFFFFh |
shr ebx, 17h |
mov [esp+1Ch], ebp |
xor eax, edi |
mov edi, [esp+28h] |
xor ebx, ebp |
sub ecx, eax |
mov ebp, [esp+2Ch] |
mov [esp+20h], ecx |
sbb edx, ebx |
xor edi, ecx |
mov [esp+24h], edx |
xor ebp, edx |
mov eax, [esp+30h] |
mov ebx, [esp+34h] |
mov [esp+28h], edi |
add eax, edi |
mov [esp+2Ch], ebp |
mov ecx, [esp+38h] |
adc ebx, ebp |
mov edx, [esp+3Ch] |
mov [esp+30h], eax |
xor eax, 89ABCDEFh |
mov [esp+34h], ebx |
xor ebx, 1234567h |
sub ecx, eax |
sbb edx, ebx |
mov [esp+38h], ecx |
mov [esp+3Ch], edx |
mov esi, [esp+64h] |
mov eax, [esp] |
mov ebx, [esp+4] |
mov ecx, [esp+48h] |
mov edx, [esp+4Ch] |
xor eax, ecx |
xor ebx, edx |
mov edi, eax |
mov [esp+48h], eax |
shr eax, 0Dh |
mov ebp, ebx |
and edi, 0FFh |
mov [esp+4Ch], ebx |
shl edi, 3 |
and ebp, 0FFh |
shr ebx, 0Dh |
and eax, 7F8h |
shl ebp, 3 |
mov ecx, [esi+edi] |
mov edx, [esi+edi+4] |
xor ecx, [esi+eax+800h] |
xor edx, [esi+eax+804h] |
and ebx, 7F8h |
xor ecx, [esi+ebp+1000h] |
xor edx, [esi+ebp+1004h] |
xor ecx, [esi+ebx+1800h] |
xor edx, [esi+ebx+1804h] |
mov edi, [esp+50h] |
mov ebp, [esp+54h] |
sub edi, ecx |
mov eax, [esp+48h] |
sbb ebp, edx |
mov ebx, [esp+4Ch] |
mov [esp+50h], edi |
mov edi, eax |
shr eax, 5 |
mov [esp+54h], ebp |
shr edi, 15h |
mov ebp, ebx |
shr ebx, 5 |
and eax, 7F8h |
shr ebp, 15h |
and edi, 7F8h |
and ebx, 7F8h |
mov ecx, [esi+eax+1800h] |
mov edx, [esi+eax+1804h] |
xor ecx, [esi+edi+1000h] |
and ebp, 7F8h |
xor edx, [esi+edi+1004h] |
xor ecx, [esi+ebx+800h] |
xor edx, [esi+ebx+804h] |
xor ecx, [esi+ebp] |
xor edx, [esi+ebp+4] |
mov eax, [esp+40h] |
mov ebx, [esp+44h] |
add eax, ecx |
adc ebx, edx |
mov ecx, eax |
shr ecx, 1Dh |
mov ebp, ebx |
shl ebx, 3 |
mov edi, eax |
shl eax, 3 |
or ebx, ecx |
sub eax, edi |
sbb ebx, ebp |
mov [esp+40h], eax |
mov [esp+44h], ebx |
mov eax, [esp+8] |
mov ebx, [esp+0Ch] |
mov ecx, [esp+50h] |
mov edx, [esp+54h] |
xor eax, ecx |
xor ebx, edx |
mov edi, eax |
mov [esp+50h], eax |
shr eax, 0Dh |
mov ebp, ebx |
and edi, 0FFh |
mov [esp+54h], ebx |
shl edi, 3 |
and ebp, 0FFh |
shr ebx, 0Dh |
and eax, 7F8h |
shl ebp, 3 |
mov ecx, [esi+edi] |
mov edx, [esi+edi+4] |
xor ecx, [esi+eax+800h] |
xor edx, [esi+eax+804h] |
and ebx, 7F8h |
xor ecx, [esi+ebp+1000h] |
xor edx, [esi+ebp+1004h] |
xor ecx, [esi+ebx+1800h] |
xor edx, [esi+ebx+1804h] |
mov edi, [esp+40h] |
mov ebp, [esp+44h] |
sub edi, ecx |
mov eax, [esp+50h] |
sbb ebp, edx |
mov ebx, [esp+54h] |
mov [esp+40h], edi |
mov edi, eax |
shr eax, 5 |
mov [esp+44h], ebp |
shr edi, 15h |
mov ebp, ebx |
shr ebx, 5 |
and eax, 7F8h |
shr ebp, 15h |
and edi, 7F8h |
and ebx, 7F8h |
mov ecx, [esi+eax+1800h] |
mov edx, [esi+eax+1804h] |
xor ecx, [esi+edi+1000h] |
and ebp, 7F8h |
xor edx, [esi+edi+1004h] |
xor ecx, [esi+ebx+800h] |
xor edx, [esi+ebx+804h] |
xor ecx, [esi+ebp] |
xor edx, [esi+ebp+4] |
mov eax, [esp+48h] |
mov ebx, [esp+4Ch] |
add eax, ecx |
adc ebx, edx |
mov ecx, eax |
shr ecx, 1Dh |
mov ebp, ebx |
shl ebx, 3 |
mov edi, eax |
shl eax, 3 |
or ebx, ecx |
sub eax, edi |
sbb ebx, ebp |
mov [esp+48h], eax |
mov [esp+4Ch], ebx |
mov eax, [esp+10h] |
mov ebx, [esp+14h] |
mov ecx, [esp+40h] |
mov edx, [esp+44h] |
xor eax, ecx |
xor ebx, edx |
mov edi, eax |
mov [esp+40h], eax |
shr eax, 0Dh |
mov ebp, ebx |
and edi, 0FFh |
mov [esp+44h], ebx |
shl edi, 3 |
and ebp, 0FFh |
shr ebx, 0Dh |
and eax, 7F8h |
shl ebp, 3 |
mov ecx, [esi+edi] |
mov edx, [esi+edi+4] |
xor ecx, [esi+eax+800h] |
xor edx, [esi+eax+804h] |
and ebx, 7F8h |
xor ecx, [esi+ebp+1000h] |
xor edx, [esi+ebp+1004h] |
xor ecx, [esi+ebx+1800h] |
xor edx, [esi+ebx+1804h] |
mov edi, [esp+48h] |
mov ebp, [esp+4Ch] |
sub edi, ecx |
mov eax, [esp+40h] |
sbb ebp, edx |
mov ebx, [esp+44h] |
mov [esp+48h], edi |
mov edi, eax |
shr eax, 5 |
mov [esp+4Ch], ebp |
shr edi, 15h |
mov ebp, ebx |
shr ebx, 5 |
and eax, 7F8h |
shr ebp, 15h |
and edi, 7F8h |
and ebx, 7F8h |
mov ecx, [esi+eax+1800h] |
mov edx, [esi+eax+1804h] |
xor ecx, [esi+edi+1000h] |
and ebp, 7F8h |
xor edx, [esi+edi+1004h] |
xor ecx, [esi+ebx+800h] |
xor edx, [esi+ebx+804h] |
xor ecx, [esi+ebp] |
xor edx, [esi+ebp+4] |
mov eax, [esp+50h] |
mov ebx, [esp+54h] |
add eax, ecx |
adc ebx, edx |
mov ecx, eax |
shr ecx, 1Dh |
mov ebp, ebx |
shl ebx, 3 |
mov edi, eax |
shl eax, 3 |
or ebx, ecx |
sub eax, edi |
sbb ebx, ebp |
mov [esp+50h], eax |
mov [esp+54h], ebx |
mov eax, [esp+18h] |
mov ebx, [esp+1Ch] |
mov ecx, [esp+48h] |
mov edx, [esp+4Ch] |
xor eax, ecx |
xor ebx, edx |
mov edi, eax |
mov [esp+48h], eax |
shr eax, 0Dh |
mov ebp, ebx |
and edi, 0FFh |
mov [esp+4Ch], ebx |
shl edi, 3 |
and ebp, 0FFh |
shr ebx, 0Dh |
and eax, 7F8h |
shl ebp, 3 |
mov ecx, [esi+edi] |
mov edx, [esi+edi+4] |
xor ecx, [esi+eax+800h] |
xor edx, [esi+eax+804h] |
and ebx, 7F8h |
xor ecx, [esi+ebp+1000h] |
xor edx, [esi+ebp+1004h] |
xor ecx, [esi+ebx+1800h] |
xor edx, [esi+ebx+1804h] |
mov edi, [esp+50h] |
mov ebp, [esp+54h] |
sub edi, ecx |
mov eax, [esp+48h] |
sbb ebp, edx |
mov ebx, [esp+4Ch] |
mov [esp+50h], edi |
mov edi, eax |
shr eax, 5 |
mov [esp+54h], ebp |
shr edi, 15h |
mov ebp, ebx |
shr ebx, 5 |
and eax, 7F8h |
shr ebp, 15h |
and edi, 7F8h |
and ebx, 7F8h |
mov ecx, [esi+eax+1800h] |
mov edx, [esi+eax+1804h] |
xor ecx, [esi+edi+1000h] |
and ebp, 7F8h |
xor edx, [esi+edi+1004h] |
xor ecx, [esi+ebx+800h] |
xor edx, [esi+ebx+804h] |
xor ecx, [esi+ebp] |
xor edx, [esi+ebp+4] |
mov eax, [esp+40h] |
mov ebx, [esp+44h] |
add eax, ecx |
adc ebx, edx |
mov ecx, eax |
shr ecx, 1Dh |
mov ebp, ebx |
shl ebx, 3 |
mov edi, eax |
shl eax, 3 |
or ebx, ecx |
sub eax, edi |
sbb ebx, ebp |
mov [esp+40h], eax |
mov [esp+44h], ebx |
mov eax, [esp+20h] |
mov ebx, [esp+24h] |
mov ecx, [esp+50h] |
mov edx, [esp+54h] |
xor eax, ecx |
xor ebx, edx |
mov edi, eax |
mov [esp+50h], eax |
shr eax, 0Dh |
mov ebp, ebx |
and edi, 0FFh |
mov [esp+54h], ebx |
shl edi, 3 |
and ebp, 0FFh |
shr ebx, 0Dh |
and eax, 7F8h |
shl ebp, 3 |
mov ecx, [esi+edi] |
mov edx, [esi+edi+4] |
xor ecx, [esi+eax+800h] |
xor edx, [esi+eax+804h] |
and ebx, 7F8h |
xor ecx, [esi+ebp+1000h] |
xor edx, [esi+ebp+1004h] |
xor ecx, [esi+ebx+1800h] |
xor edx, [esi+ebx+1804h] |
mov edi, [esp+40h] |
mov ebp, [esp+44h] |
sub edi, ecx |
mov eax, [esp+50h] |
sbb ebp, edx |
mov ebx, [esp+54h] |
mov [esp+40h], edi |
mov edi, eax |
shr eax, 5 |
mov [esp+44h], ebp |
shr edi, 15h |
mov ebp, ebx |
shr ebx, 5 |
and eax, 7F8h |
shr ebp, 15h |
and edi, 7F8h |
and ebx, 7F8h |
mov ecx, [esi+eax+1800h] |
mov edx, [esi+eax+1804h] |
xor ecx, [esi+edi+1000h] |
and ebp, 7F8h |
xor edx, [esi+edi+1004h] |
xor ecx, [esi+ebx+800h] |
xor edx, [esi+ebx+804h] |
xor ecx, [esi+ebp] |
xor edx, [esi+ebp+4] |
mov eax, [esp+48h] |
mov ebx, [esp+4Ch] |
add eax, ecx |
adc ebx, edx |
mov ecx, eax |
shr ecx, 1Dh |
mov ebp, ebx |
shl ebx, 3 |
mov edi, eax |
shl eax, 3 |
or ebx, ecx |
sub eax, edi |
sbb ebx, ebp |
mov [esp+48h], eax |
mov [esp+4Ch], ebx |
mov eax, [esp+28h] |
mov ebx, [esp+2Ch] |
mov ecx, [esp+40h] |
mov edx, [esp+44h] |
xor eax, ecx |
xor ebx, edx |
mov edi, eax |
mov [esp+40h], eax |
shr eax, 0Dh |
mov ebp, ebx |
and edi, 0FFh |
mov [esp+44h], ebx |
shl edi, 3 |
and ebp, 0FFh |
shr ebx, 0Dh |
and eax, 7F8h |
shl ebp, 3 |
mov ecx, [esi+edi] |
mov edx, [esi+edi+4] |
xor ecx, [esi+eax+800h] |
xor edx, [esi+eax+804h] |
and ebx, 7F8h |
xor ecx, [esi+ebp+1000h] |
xor edx, [esi+ebp+1004h] |
xor ecx, [esi+ebx+1800h] |
xor edx, [esi+ebx+1804h] |
mov edi, [esp+48h] |
mov ebp, [esp+4Ch] |
sub edi, ecx |
mov eax, [esp+40h] |
sbb ebp, edx |
mov ebx, [esp+44h] |
mov [esp+48h], edi |
mov edi, eax |
shr eax, 5 |
mov [esp+4Ch], ebp |
shr edi, 15h |
mov ebp, ebx |
shr ebx, 5 |
and eax, 7F8h |
shr ebp, 15h |
and edi, 7F8h |
and ebx, 7F8h |
mov ecx, [esi+eax+1800h] |
mov edx, [esi+eax+1804h] |
xor ecx, [esi+edi+1000h] |
and ebp, 7F8h |
xor edx, [esi+edi+1004h] |
xor ecx, [esi+ebx+800h] |
xor edx, [esi+ebx+804h] |
xor ecx, [esi+ebp] |
xor edx, [esi+ebp+4] |
mov eax, [esp+50h] |
mov ebx, [esp+54h] |
add eax, ecx |
adc ebx, edx |
mov ecx, eax |
shr ecx, 1Dh |
mov ebp, ebx |
shl ebx, 3 |
mov edi, eax |
shl eax, 3 |
or ebx, ecx |
sub eax, edi |
sbb ebx, ebp |
mov [esp+50h], eax |
mov [esp+54h], ebx |
mov eax, [esp+30h] |
mov ebx, [esp+34h] |
mov ecx, [esp+48h] |
mov edx, [esp+4Ch] |
xor eax, ecx |
xor ebx, edx |
mov edi, eax |
mov [esp+48h], eax |
shr eax, 0Dh |
mov ebp, ebx |
and edi, 0FFh |
mov [esp+4Ch], ebx |
shl edi, 3 |
and ebp, 0FFh |
shr ebx, 0Dh |
and eax, 7F8h |
shl ebp, 3 |
mov ecx, [esi+edi] |
mov edx, [esi+edi+4] |
xor ecx, [esi+eax+800h] |
xor edx, [esi+eax+804h] |
and ebx, 7F8h |
xor ecx, [esi+ebp+1000h] |
xor edx, [esi+ebp+1004h] |
xor ecx, [esi+ebx+1800h] |
xor edx, [esi+ebx+1804h] |
mov edi, [esp+50h] |
mov ebp, [esp+54h] |
sub edi, ecx |
mov eax, [esp+48h] |
sbb ebp, edx |
mov ebx, [esp+4Ch] |
mov [esp+50h], edi |
mov edi, eax |
shr eax, 5 |
mov [esp+54h], ebp |
shr edi, 15h |
mov ebp, ebx |
shr ebx, 5 |
and eax, 7F8h |
shr ebp, 15h |
and edi, 7F8h |
and ebx, 7F8h |
mov ecx, [esi+eax+1800h] |
mov edx, [esi+eax+1804h] |
xor ecx, [esi+edi+1000h] |
and ebp, 7F8h |
xor edx, [esi+edi+1004h] |
xor ecx, [esi+ebx+800h] |
xor edx, [esi+ebx+804h] |
xor ecx, [esi+ebp] |
xor edx, [esi+ebp+4] |
mov eax, [esp+40h] |
mov ebx, [esp+44h] |
add eax, ecx |
adc ebx, edx |
mov ecx, eax |
shr ecx, 1Dh |
mov ebp, ebx |
shl ebx, 3 |
mov edi, eax |
shl eax, 3 |
or ebx, ecx |
sub eax, edi |
sbb ebx, ebp |
mov [esp+40h], eax |
mov [esp+44h], ebx |
mov eax, [esp+38h] |
mov ebx, [esp+3Ch] |
mov ecx, [esp+50h] |
mov edx, [esp+54h] |
xor eax, ecx |
xor ebx, edx |
mov edi, eax |
mov [esp+50h], eax |
shr eax, 0Dh |
mov ebp, ebx |
and edi, 0FFh |
mov [esp+54h], ebx |
shl edi, 3 |
and ebp, 0FFh |
shr ebx, 0Dh |
and eax, 7F8h |
shl ebp, 3 |
mov ecx, [esi+edi] |
mov edx, [esi+edi+4] |
xor ecx, [esi+eax+800h] |
xor edx, [esi+eax+804h] |
and ebx, 7F8h |
xor ecx, [esi+ebp+1000h] |
xor edx, [esi+ebp+1004h] |
xor ecx, [esi+ebx+1800h] |
xor edx, [esi+ebx+1804h] |
mov edi, [esp+40h] |
mov ebp, [esp+44h] |
sub edi, ecx |
mov eax, [esp+50h] |
sbb ebp, edx |
mov ebx, [esp+54h] |
mov [esp+40h], edi |
mov edi, eax |
shr eax, 5 |
mov [esp+44h], ebp |
shr edi, 15h |
mov ebp, ebx |
shr ebx, 5 |
and eax, 7F8h |
shr ebp, 15h |
and edi, 7F8h |
and ebx, 7F8h |
mov ecx, [esi+eax+1800h] |
mov edx, [esi+eax+1804h] |
xor ecx, [esi+edi+1000h] |
and ebp, 7F8h |
xor edx, [esi+edi+1004h] |
xor ecx, [esi+ebx+800h] |
xor edx, [esi+ebx+804h] |
xor ecx, [esi+ebp] |
xor edx, [esi+ebp+4] |
mov eax, [esp+48h] |
mov ebx, [esp+4Ch] |
add eax, ecx |
adc ebx, edx |
mov ecx, eax |
shr ecx, 1Dh |
mov ebp, ebx |
shl ebx, 3 |
mov edi, eax |
shl eax, 3 |
or ebx, ecx |
sub eax, edi |
sbb ebx, ebp |
mov [esp+48h], eax |
mov [esp+4Ch], ebx |
mov eax, [esp+38h] |
mov ebx, [esp+3Ch] |
xor eax, 0A5A5A5A5h |
xor ebx, 0A5A5A5A5h |
mov ecx, [esp] |
mov edx, [esp+4] |
sub ecx, eax |
sbb edx, ebx |
mov [esp], ecx |
mov [esp+4], edx |
mov eax, [esp+8] |
mov ebx, [esp+0Ch] |
xor eax, ecx |
xor ebx, edx |
mov [esp+8], eax |
mov edi, eax |
mov esi, eax |
shr edi, 0Dh |
xor eax, 0FFFFFFFFh |
mov [esp+0Ch], ebx |
mov ecx, [esp+10h] |
shl eax, 13h |
mov ebp, ebx |
shl ebx, 13h |
mov edx, [esp+14h] |
add esi, ecx |
mov ecx, [esp+20h] |
adc ebp, edx |
or edi, ebx |
mov [esp+10h], esi |
xor esi, eax |
mov [esp+14h], ebp |
mov eax, [esp+18h] |
xor ebp, 0FFFFFFFFh |
mov ebx, [esp+1Ch] |
xor ebp, edi |
sub eax, esi |
sbb ebx, ebp |
mov edx, [esp+24h] |
mov [esp+18h], eax |
xor eax, ecx |
mov [esp+1Ch], ebx |
xor ebx, edx |
mov ecx, [esp+28h] |
mov edx, [esp+2Ch] |
mov edi, ebx |
mov ebp, ebx |
mov [esp+20h], eax |
xor ebp, 0FFFFFFFFh |
shl ebx, 9 |
add ecx, eax |
adc edx, edi |
mov [esp+24h], edi |
shr ebp, 17h |
mov [esp+28h], ecx |
shr eax, 17h |
xor ecx, 0FFFFFFFFh |
or ebx, eax |
mov [esp+2Ch], edx |
mov eax, [esp+30h] |
xor ecx, ebx |
mov ebx, [esp+34h] |
xor edx, ebp |
mov edi, [esp+38h] |
sub eax, ecx |
mov ebp, [esp+3Ch] |
mov [esp+30h], eax |
sbb ebx, edx |
xor edi, eax |
xor ebp, ebx |
mov [esp+34h], ebx |
mov eax, [esp] |
mov ecx, edi |
xor edi, 0FFFFFFFFh |
mov ebx, [esp+4] |
shl edi, 13h |
mov [esp+38h], ecx |
add eax, ecx |
mov [esp+3Ch], ebp |
adc ebx, ebp |
xor edi, eax |
shr ecx, 0Dh |
mov [esp], eax |
shl ebp, 13h |
mov [esp+4], ebx |
mov esi, [esp+8] |
xor ebx, 0FFFFFFFFh |
or ebp, ecx |
mov edx, [esp+0Ch] |
xor ebp, ebx |
sub esi, edi |
mov eax, [esp+10h] |
mov ebx, [esp+14h] |
sbb edx, ebp |
mov [esp+8], esi |
xor eax, esi |
mov [esp+0Ch], edx |
mov edi, [esp+18h] |
mov ebp, [esp+1Ch] |
xor ebx, edx |
mov [esp+10h], eax |
add edi, eax |
mov esi, ebx |
adc ebp, ebx |
mov [esp+14h], ebx |
shr eax, 17h |
mov ecx, [esp+20h] |
xor ebx, 0FFFFFFFFh |
mov edx, [esp+24h] |
shl esi, 9 |
mov [esp+18h], edi |
or eax, esi |
xor edi, 0FFFFFFFFh |
shr ebx, 17h |
mov [esp+1Ch], ebp |
xor eax, edi |
mov edi, [esp+28h] |
xor ebx, ebp |
sub ecx, eax |
mov ebp, [esp+2Ch] |
mov [esp+20h], ecx |
sbb edx, ebx |
xor edi, ecx |
mov [esp+24h], edx |
xor ebp, edx |
mov eax, [esp+30h] |
mov ebx, [esp+34h] |
mov [esp+28h], edi |
add eax, edi |
mov [esp+2Ch], ebp |
mov ecx, [esp+38h] |
adc ebx, ebp |
mov edx, [esp+3Ch] |
mov [esp+30h], eax |
xor eax, 89ABCDEFh |
mov [esp+34h], ebx |
xor ebx, 1234567h |
sub ecx, eax |
sbb edx, ebx |
mov [esp+38h], ecx |
mov [esp+3Ch], edx |
@_pass_loop: |
mov esi, [esp+64h] |
mov eax, [esp] |
mov ebx, [esp+4] |
mov ecx, [esp+40h] |
mov edx, [esp+44h] |
xor eax, ecx |
xor ebx, edx |
mov edi, eax |
mov [esp+40h], eax |
shr eax, 0Dh |
mov ebp, ebx |
and edi, 0FFh |
mov [esp+44h], ebx |
shl edi, 3 |
and ebp, 0FFh |
shr ebx, 0Dh |
and eax, 7F8h |
shl ebp, 3 |
mov ecx, [esi+edi] |
mov edx, [esi+edi+4] |
xor ecx, [esi+eax+800h] |
xor edx, [esi+eax+804h] |
and ebx, 7F8h |
xor ecx, [esi+ebp+1000h] |
xor edx, [esi+ebp+1004h] |
xor ecx, [esi+ebx+1800h] |
xor edx, [esi+ebx+1804h] |
mov edi, [esp+48h] |
mov ebp, [esp+4Ch] |
sub edi, ecx |
mov eax, [esp+40h] |
sbb ebp, edx |
mov ebx, [esp+44h] |
mov [esp+48h], edi |
mov edi, eax |
shr eax, 5 |
mov [esp+4Ch], ebp |
shr edi, 15h |
mov ebp, ebx |
shr ebx, 5 |
and eax, 7F8h |
shr ebp, 15h |
and edi, 7F8h |
and ebx, 7F8h |
mov ecx, [esi+eax+1800h] |
mov edx, [esi+eax+1804h] |
xor ecx, [esi+edi+1000h] |
and ebp, 7F8h |
xor edx, [esi+edi+1004h] |
xor ecx, [esi+ebx+800h] |
xor edx, [esi+ebx+804h] |
xor ecx, [esi+ebp] |
xor edx, [esi+ebp+4] |
mov eax, [esp+50h] |
mov ebx, [esp+54h] |
add eax, ecx |
adc ebx, edx |
mov ecx, eax |
shr ecx, 1Dh |
mov ebp, ebx |
shl ebx, 3 |
mov edi, eax |
shl eax, 3 |
or ebx, ecx |
add eax, edi |
adc ebx, ebp |
mov [esp+50h], eax |
mov [esp+54h], ebx |
mov eax, [esp+8] |
mov ebx, [esp+0Ch] |
mov ecx, [esp+48h] |
mov edx, [esp+4Ch] |
xor eax, ecx |
xor ebx, edx |
mov edi, eax |
mov [esp+48h], eax |
shr eax, 0Dh |
mov ebp, ebx |
and edi, 0FFh |
mov [esp+4Ch], ebx |
shl edi, 3 |
and ebp, 0FFh |
shr ebx, 0Dh |
and eax, 7F8h |
shl ebp, 3 |
mov ecx, [esi+edi] |
mov edx, [esi+edi+4] |
xor ecx, [esi+eax+800h] |
xor edx, [esi+eax+804h] |
and ebx, 7F8h |
xor ecx, [esi+ebp+1000h] |
xor edx, [esi+ebp+1004h] |
xor ecx, [esi+ebx+1800h] |
xor edx, [esi+ebx+1804h] |
mov edi, [esp+50h] |
mov ebp, [esp+54h] |
sub edi, ecx |
mov eax, [esp+48h] |
sbb ebp, edx |
mov ebx, [esp+4Ch] |
mov [esp+50h], edi |
mov edi, eax |
shr eax, 5 |
mov [esp+54h], ebp |
shr edi, 15h |
mov ebp, ebx |
shr ebx, 5 |
and eax, 7F8h |
shr ebp, 15h |
and edi, 7F8h |
and ebx, 7F8h |
mov ecx, [esi+eax+1800h] |
mov edx, [esi+eax+1804h] |
xor ecx, [esi+edi+1000h] |
and ebp, 7F8h |
xor edx, [esi+edi+1004h] |
xor ecx, [esi+ebx+800h] |
xor edx, [esi+ebx+804h] |
xor ecx, [esi+ebp] |
xor edx, [esi+ebp+4] |
mov eax, [esp+40h] |
mov ebx, [esp+44h] |
add eax, ecx |
adc ebx, edx |
mov ecx, eax |
shr ecx, 1Dh |
mov ebp, ebx |
shl ebx, 3 |
mov edi, eax |
shl eax, 3 |
or ebx, ecx |
add eax, edi |
adc ebx, ebp |
mov [esp+40h], eax |
mov [esp+44h], ebx |
mov eax, [esp+10h] |
mov ebx, [esp+14h] |
mov ecx, [esp+50h] |
mov edx, [esp+54h] |
xor eax, ecx |
xor ebx, edx |
mov edi, eax |
mov [esp+50h], eax |
shr eax, 0Dh |
mov ebp, ebx |
and edi, 0FFh |
mov [esp+54h], ebx |
shl edi, 3 |
and ebp, 0FFh |
shr ebx, 0Dh |
and eax, 7F8h |
shl ebp, 3 |
mov ecx, [esi+edi] |
mov edx, [esi+edi+4] |
xor ecx, [esi+eax+800h] |
xor edx, [esi+eax+804h] |
and ebx, 7F8h |
xor ecx, [esi+ebp+1000h] |
xor edx, [esi+ebp+1004h] |
xor ecx, [esi+ebx+1800h] |
xor edx, [esi+ebx+1804h] |
mov edi, [esp+40h] |
mov ebp, [esp+44h] |
sub edi, ecx |
mov eax, [esp+50h] |
sbb ebp, edx |
mov ebx, [esp+54h] |
mov [esp+40h], edi |
mov edi, eax |
shr eax, 5 |
mov [esp+44h], ebp |
shr edi, 15h |
mov ebp, ebx |
shr ebx, 5 |
and eax, 7F8h |
shr ebp, 15h |
and edi, 7F8h |
and ebx, 7F8h |
mov ecx, [esi+eax+1800h] |
mov edx, [esi+eax+1804h] |
xor ecx, [esi+edi+1000h] |
and ebp, 7F8h |
xor edx, [esi+edi+1004h] |
xor ecx, [esi+ebx+800h] |
xor edx, [esi+ebx+804h] |
xor ecx, [esi+ebp] |
xor edx, [esi+ebp+4] |
mov eax, [esp+48h] |
mov ebx, [esp+4Ch] |
add eax, ecx |
adc ebx, edx |
mov ecx, eax |
shr ecx, 1Dh |
mov ebp, ebx |
shl ebx, 3 |
mov edi, eax |
shl eax, 3 |
or ebx, ecx |
add eax, edi |
adc ebx, ebp |
mov [esp+48h], eax |
mov [esp+4Ch], ebx |
mov eax, [esp+18h] |
mov ebx, [esp+1Ch] |
mov ecx, [esp+40h] |
mov edx, [esp+44h] |
xor eax, ecx |
xor ebx, edx |
mov edi, eax |
mov [esp+40h], eax |
shr eax, 0Dh |
mov ebp, ebx |
and edi, 0FFh |
mov [esp+44h], ebx |
shl edi, 3 |
and ebp, 0FFh |
shr ebx, 0Dh |
and eax, 7F8h |
shl ebp, 3 |
mov ecx, [esi+edi] |
mov edx, [esi+edi+4] |
xor ecx, [esi+eax+800h] |
xor edx, [esi+eax+804h] |
and ebx, 7F8h |
xor ecx, [esi+ebp+1000h] |
xor edx, [esi+ebp+1004h] |
xor ecx, [esi+ebx+1800h] |
xor edx, [esi+ebx+1804h] |
mov edi, [esp+48h] |
mov ebp, [esp+4Ch] |
sub edi, ecx |
mov eax, [esp+40h] |
sbb ebp, edx |
mov ebx, [esp+44h] |
mov [esp+48h], edi |
mov edi, eax |
shr eax, 5 |
mov [esp+4Ch], ebp |
shr edi, 15h |
mov ebp, ebx |
shr ebx, 5 |
and eax, 7F8h |
shr ebp, 15h |
and edi, 7F8h |
and ebx, 7F8h |
mov ecx, [esi+eax+1800h] |
mov edx, [esi+eax+1804h] |
xor ecx, [esi+edi+1000h] |
and ebp, 7F8h |
xor edx, [esi+edi+1004h] |
xor ecx, [esi+ebx+800h] |
xor edx, [esi+ebx+804h] |
xor ecx, [esi+ebp] |
xor edx, [esi+ebp+4] |
mov eax, [esp+50h] |
mov ebx, [esp+54h] |
add eax, ecx |
adc ebx, edx |
mov ecx, eax |
shr ecx, 1Dh |
mov ebp, ebx |
shl ebx, 3 |
mov edi, eax |
shl eax, 3 |
or ebx, ecx |
add eax, edi |
adc ebx, ebp |
mov [esp+50h], eax |
mov [esp+54h], ebx |
mov eax, [esp+20h] |
mov ebx, [esp+24h] |
mov ecx, [esp+48h] |
mov edx, [esp+4Ch] |
xor eax, ecx |
xor ebx, edx |
mov edi, eax |
mov [esp+48h], eax |
shr eax, 0Dh |
mov ebp, ebx |
and edi, 0FFh |
mov [esp+4Ch], ebx |
shl edi, 3 |
and ebp, 0FFh |
shr ebx, 0Dh |
and eax, 7F8h |
shl ebp, 3 |
mov ecx, [esi+edi] |
mov edx, [esi+edi+4] |
xor ecx, [esi+eax+800h] |
xor edx, [esi+eax+804h] |
and ebx, 7F8h |
xor ecx, [esi+ebp+1000h] |
xor edx, [esi+ebp+1004h] |
xor ecx, [esi+ebx+1800h] |
xor edx, [esi+ebx+1804h] |
mov edi, [esp+50h] |
mov ebp, [esp+54h] |
sub edi, ecx |
mov eax, [esp+48h] |
sbb ebp, edx |
mov ebx, [esp+4Ch] |
mov [esp+50h], edi |
mov edi, eax |
shr eax, 5 |
mov [esp+54h], ebp |
shr edi, 15h |
mov ebp, ebx |
shr ebx, 5 |
and eax, 7F8h |
shr ebp, 15h |
and edi, 7F8h |
and ebx, 7F8h |
mov ecx, [esi+eax+1800h] |
mov edx, [esi+eax+1804h] |
xor ecx, [esi+edi+1000h] |
and ebp, 7F8h |
xor edx, [esi+edi+1004h] |
xor ecx, [esi+ebx+800h] |
xor edx, [esi+ebx+804h] |
xor ecx, [esi+ebp] |
xor edx, [esi+ebp+4] |
mov eax, [esp+40h] |
mov ebx, [esp+44h] |
add eax, ecx |
adc ebx, edx |
mov ecx, eax |
shr ecx, 1Dh |
mov ebp, ebx |
shl ebx, 3 |
mov edi, eax |
shl eax, 3 |
or ebx, ecx |
add eax, edi |
adc ebx, ebp |
mov [esp+40h], eax |
mov [esp+44h], ebx |
mov eax, [esp+28h] |
mov ebx, [esp+2Ch] |
mov ecx, [esp+50h] |
mov edx, [esp+54h] |
xor eax, ecx |
xor ebx, edx |
mov edi, eax |
mov [esp+50h], eax |
shr eax, 0Dh |
mov ebp, ebx |
and edi, 0FFh |
mov [esp+54h], ebx |
shl edi, 3 |
and ebp, 0FFh |
shr ebx, 0Dh |
and eax, 7F8h |
shl ebp, 3 |
mov ecx, [esi+edi] |
mov edx, [esi+edi+4] |
xor ecx, [esi+eax+800h] |
xor edx, [esi+eax+804h] |
and ebx, 7F8h |
xor ecx, [esi+ebp+1000h] |
xor edx, [esi+ebp+1004h] |
xor ecx, [esi+ebx+1800h] |
xor edx, [esi+ebx+1804h] |
mov edi, [esp+40h] |
mov ebp, [esp+44h] |
sub edi, ecx |
mov eax, [esp+50h] |
sbb ebp, edx |
mov ebx, [esp+54h] |
mov [esp+40h], edi |
mov edi, eax |
shr eax, 5 |
mov [esp+44h], ebp |
shr edi, 15h |
mov ebp, ebx |
shr ebx, 5 |
and eax, 7F8h |
shr ebp, 15h |
and edi, 7F8h |
and ebx, 7F8h |
mov ecx, [esi+eax+1800h] |
mov edx, [esi+eax+1804h] |
xor ecx, [esi+edi+1000h] |
and ebp, 7F8h |
xor edx, [esi+edi+1004h] |
xor ecx, [esi+ebx+800h] |
xor edx, [esi+ebx+804h] |
xor ecx, [esi+ebp] |
xor edx, [esi+ebp+4] |
mov eax, [esp+48h] |
mov ebx, [esp+4Ch] |
add eax, ecx |
adc ebx, edx |
mov ecx, eax |
shr ecx, 1Dh |
mov ebp, ebx |
shl ebx, 3 |
mov edi, eax |
shl eax, 3 |
or ebx, ecx |
add eax, edi |
adc ebx, ebp |
mov [esp+48h], eax |
mov [esp+4Ch], ebx |
mov eax, [esp+30h] |
mov ebx, [esp+34h] |
mov ecx, [esp+40h] |
mov edx, [esp+44h] |
xor eax, ecx |
xor ebx, edx |
mov edi, eax |
mov [esp+40h], eax |
shr eax, 0Dh |
mov ebp, ebx |
and edi, 0FFh |
mov [esp+44h], ebx |
shl edi, 3 |
and ebp, 0FFh |
shr ebx, 0Dh |
and eax, 7F8h |
shl ebp, 3 |
mov ecx, [esi+edi] |
mov edx, [esi+edi+4] |
xor ecx, [esi+eax+800h] |
xor edx, [esi+eax+804h] |
and ebx, 7F8h |
xor ecx, [esi+ebp+1000h] |
xor edx, [esi+ebp+1004h] |
xor ecx, [esi+ebx+1800h] |
xor edx, [esi+ebx+1804h] |
mov edi, [esp+48h] |
mov ebp, [esp+4Ch] |
sub edi, ecx |
mov eax, [esp+40h] |
sbb ebp, edx |
mov ebx, [esp+44h] |
mov [esp+48h], edi |
mov edi, eax |
shr eax, 5 |
mov [esp+4Ch], ebp |
shr edi, 15h |
mov ebp, ebx |
shr ebx, 5 |
and eax, 7F8h |
shr ebp, 15h |
and edi, 7F8h |
and ebx, 7F8h |
mov ecx, [esi+eax+1800h] |
mov edx, [esi+eax+1804h] |
xor ecx, [esi+edi+1000h] |
and ebp, 7F8h |
xor edx, [esi+edi+1004h] |
xor ecx, [esi+ebx+800h] |
xor edx, [esi+ebx+804h] |
xor ecx, [esi+ebp] |
xor edx, [esi+ebp+4] |
mov eax, [esp+50h] |
mov ebx, [esp+54h] |
add eax, ecx |
adc ebx, edx |
mov ecx, eax |
shr ecx, 1Dh |
mov ebp, ebx |
shl ebx, 3 |
mov edi, eax |
shl eax, 3 |
or ebx, ecx |
add eax, edi |
adc ebx, ebp |
mov [esp+50h], eax |
mov [esp+54h], ebx |
mov eax, [esp+38h] |
mov ebx, [esp+3Ch] |
mov ecx, [esp+48h] |
mov edx, [esp+4Ch] |
xor eax, ecx |
xor ebx, edx |
mov edi, eax |
mov [esp+48h], eax |
shr eax, 0Dh |
mov ebp, ebx |
and edi, 0FFh |
mov [esp+4Ch], ebx |
shl edi, 3 |
and ebp, 0FFh |
shr ebx, 0Dh |
and eax, 7F8h |
shl ebp, 3 |
mov ecx, [esi+edi] |
mov edx, [esi+edi+4] |
xor ecx, [esi+eax+800h] |
xor edx, [esi+eax+804h] |
and ebx, 7F8h |
xor ecx, [esi+ebp+1000h] |
xor edx, [esi+ebp+1004h] |
xor ecx, [esi+ebx+1800h] |
xor edx, [esi+ebx+1804h] |
mov edi, [esp+50h] |
mov ebp, [esp+54h] |
sub edi, ecx |
mov eax, [esp+48h] |
sbb ebp, edx |
mov ebx, [esp+4Ch] |
mov [esp+50h], edi |
mov edi, eax |
shr eax, 5 |
mov [esp+54h], ebp |
shr edi, 15h |
mov ebp, ebx |
shr ebx, 5 |
and eax, 7F8h |
shr ebp, 15h |
and edi, 7F8h |
and ebx, 7F8h |
mov ecx, [esi+eax+1800h] |
mov edx, [esi+eax+1804h] |
xor ecx, [esi+edi+1000h] |
and ebp, 7F8h |
xor edx, [esi+edi+1004h] |
xor ecx, [esi+ebx+800h] |
xor edx, [esi+ebx+804h] |
xor ecx, [esi+ebp] |
xor edx, [esi+ebp+4] |
mov eax, [esp+40h] |
mov ebx, [esp+44h] |
add eax, ecx |
adc ebx, edx |
mov ecx, eax |
shr ecx, 1Dh |
mov ebp, ebx |
shl ebx, 3 |
mov edi, eax |
shl eax, 3 |
or ebx, ecx |
add eax, edi |
adc ebx, ebp |
mov [esp+40h], eax |
mov [esp+44h], ebx |
mov esi, [esp+60h] |
test esi, esi |
jnz @_yet_more_cycles |
jmp @_pass_loop_end |
@_yet_more_cycles: |
dec esi |
mov [esp+60h], esi |
mov eax, [esp+38h] |
mov ebx, [esp+3Ch] |
xor eax, 0A5A5A5A5h |
xor ebx, 0A5A5A5A5h |
mov ecx, [esp] |
mov edx, [esp+4] |
sub ecx, eax |
sbb edx, ebx |
mov [esp], ecx |
mov [esp+4], edx |
mov eax, [esp+8] |
mov ebx, [esp+0Ch] |
xor eax, ecx |
xor ebx, edx |
mov [esp+8], eax |
mov edi, eax |
mov esi, eax |
shr edi, 0Dh |
xor eax, 0FFFFFFFFh |
mov [esp+0Ch], ebx |
mov ecx, [esp+10h] |
shl eax, 13h |
mov ebp, ebx |
shl ebx, 13h |
mov edx, [esp+14h] |
add esi, ecx |
mov ecx, [esp+20h] |
adc ebp, edx |
or edi, ebx |
mov [esp+10h], esi |
xor esi, eax |
mov [esp+14h], ebp |
mov eax, [esp+18h] |
xor ebp, 0FFFFFFFFh |
mov ebx, [esp+1Ch] |
xor ebp, edi |
sub eax, esi |
sbb ebx, ebp |
mov edx, [esp+24h] |
mov [esp+18h], eax |
xor eax, ecx |
mov [esp+1Ch], ebx |
xor ebx, edx |
mov ecx, [esp+28h] |
mov edx, [esp+2Ch] |
mov edi, ebx |
mov ebp, ebx |
mov [esp+20h], eax |
xor ebp, 0FFFFFFFFh |
shl ebx, 9 |
add ecx, eax |
adc edx, edi |
mov [esp+24h], edi |
shr ebp, 17h |
mov [esp+28h], ecx |
shr eax, 17h |
xor ecx, 0FFFFFFFFh |
or ebx, eax |
mov [esp+2Ch], edx |
mov eax, [esp+30h] |
xor ecx, ebx |
mov ebx, [esp+34h] |
xor edx, ebp |
mov edi, [esp+38h] |
sub eax, ecx |
mov ebp, [esp+3Ch] |
mov [esp+30h], eax |
sbb ebx, edx |
xor edi, eax |
xor ebp, ebx |
mov [esp+34h], ebx |
mov eax, [esp] |
mov ecx, edi |
xor edi, 0FFFFFFFFh |
mov ebx, [esp+4] |
shl edi, 13h |
mov [esp+38h], ecx |
add eax, ecx |
mov [esp+3Ch], ebp |
adc ebx, ebp |
xor edi, eax |
shr ecx, 0Dh |
mov [esp], eax |
shl ebp, 13h |
mov [esp+4], ebx |
mov esi, [esp+8] |
xor ebx, 0FFFFFFFFh |
or ebp, ecx |
mov edx, [esp+0Ch] |
xor ebp, ebx |
sub esi, edi |
mov eax, [esp+10h] |
mov ebx, [esp+14h] |
sbb edx, ebp |
mov [esp+8], esi |
xor eax, esi |
mov [esp+0Ch], edx |
mov edi, [esp+18h] |
mov ebp, [esp+1Ch] |
xor ebx, edx |
mov [esp+10h], eax |
add edi, eax |
mov esi, ebx |
adc ebp, ebx |
mov [esp+14h], ebx |
shr eax, 17h |
mov ecx, [esp+20h] |
xor ebx, 0FFFFFFFFh |
mov edx, [esp+24h] |
shl esi, 9 |
mov [esp+18h], edi |
or eax, esi |
xor edi, 0FFFFFFFFh |
shr ebx, 17h |
mov [esp+1Ch], ebp |
xor eax, edi |
mov edi, [esp+28h] |
xor ebx, ebp |
sub ecx, eax |
mov ebp, [esp+2Ch] |
mov [esp+20h], ecx |
sbb edx, ebx |
xor edi, ecx |
mov [esp+24h], edx |
xor ebp, edx |
mov eax, [esp+30h] |
mov ebx, [esp+34h] |
mov [esp+28h], edi |
add eax, edi |
mov [esp+2Ch], ebp |
mov ecx, [esp+38h] |
adc ebx, ebp |
mov edx, [esp+3Ch] |
mov [esp+30h], eax |
xor eax, 89ABCDEFh |
mov [esp+34h], ebx |
xor ebx, 1234567h |
sub ecx, eax |
sbb edx, ebx |
mov [esp+38h], ecx |
mov [esp+3Ch], edx |
mov eax, [esp+40h] |
mov ebx, [esp+44h] |
mov ecx, [esp+48h] |
mov edx, [esp+4Ch] |
mov [esp+48h], eax |
mov [esp+4Ch], ebx |
mov edi, [esp+50h] |
mov ebp, [esp+54h] |
mov [esp+50h], ecx |
mov [esp+54h], edx |
mov [esp+40h], edi |
mov [esp+44h], ebp |
jmp @_pass_loop |
@_pass_loop_end: |
mov esi, [esp+5Ch] |
mov eax, [esp+40h] |
mov ebx, [esp+44h] |
mov edi, [esp+48h] |
mov ebp, [esp+4Ch] |
mov ecx, [esi] |
mov edx, [esi+4] |
xor eax, ecx |
xor ebx, edx |
mov [esi], eax |
mov ecx, [esi+8] |
mov edx, [esi+0Ch] |
mov [esi+4], ebx |
sub edi, ecx |
mov ecx, [esi+10h] |
mov [esi+8], edi |
sbb ebp, edx |
mov edx, [esi+14h] |
mov [esi+0Ch], ebp |
mov eax, [esp+50h] |
mov ebx, [esp+54h] |
add ecx, eax |
adc edx, ebx |
mov [esi+10h], ecx |
mov [esi+14h], edx |
mov ebp, [esp+68h] |
mov esp, ebp |
pop ebp |
pop edi |
pop esi |
pop ebx |
end; |
{$ENDIF} |
{$IFDEF THash_Panama_asm} |
procedure THash_Panama.DoPull; |
asm |
push ebx |
push esi |
lea edx, [eax].THash_Panama.FTap |
push edi |
lea edi, [eax].THash_Panama.FDigest |
push ebp |
lea eax, [eax].THash_Panama.FLFSRBuffer |
mov ebp, esp |
add esp, 0FFFFFF5Ch |
and esp, 0FFFFFFE0h |
mov [esp+88h], edi |
mov [esp+8Ch], edx |
mov ecx, 20h |
mov [esp+90h], eax |
mov [esp+0A0h], ebp |
mov eax, [edi] |
mov ebx, [edi+4] |
mov [esp], eax |
mov [esp+4], ebx |
mov ebp, [edi+8] |
mov esi, [edi+0Ch] |
mov [esp+8], ebp |
mov [esp+0Ch], esi |
mov eax, [edi+10h] |
mov ebx, [edi+14h] |
mov [esp+10h], eax |
mov [esp+14h], ebx |
mov ebp, [edi+18h] |
mov esi, [edi+1Ch] |
mov [esp+18h], ebp |
mov [esp+1Ch], esi |
mov eax, [edi+20h] |
mov ebx, [edi+24h] |
mov [esp+20h], eax |
mov [esp+24h], ebx |
mov ebp, [edi+28h] |
mov esi, [edi+2Ch] |
mov [esp+28h], ebp |
mov [esp+2Ch], esi |
mov eax, [edi+30h] |
mov ebx, [edi+34h] |
mov [esp+30h], eax |
mov [esp+34h], ebx |
mov ebp, [edi+38h] |
mov esi, [edi+3Ch] |
mov eax, [edi+40h] |
mov [esp+38h], ebp |
mov [esp+3Ch], esi |
mov [esp+40h], eax |
@@_loop_start: |
mov esi, [esp+8Ch] |
dec ecx |
mov ebp, [esp+90h] |
mov [esp+9Ch], ecx |
mov edx, [esi] |
mov eax, edx |
mov ecx, edx |
add edx, 10h |
dec eax |
add ecx, 4 |
and edx, 1Fh |
and eax, 1Fh |
and ecx, 1Fh |
shl edx, 5 |
mov [esi], eax |
shl ecx, 5 |
mov ebx, eax |
shl eax, 5 |
add edx, ebp |
add ebx, 19h |
add eax, ebp |
and ebx, 1Fh |
add ecx, ebp |
shl ebx, 5 |
mov [esp+98h], edx |
add ebx, ebp |
mov [esp+94h], ecx |
mov ecx, [ebx] |
mov edx, [eax+8] |
mov edi, [ebx+4] |
mov ebp, [eax+0Ch] |
xor ecx, edx |
xor edi, ebp |
mov [ebx], ecx |
mov [ebx+4], edi |
mov ecx, [ebx+8] |
mov edx, [eax+10h] |
mov edi, [ebx+0Ch] |
mov ebp, [eax+14h] |
xor ecx, edx |
xor edi, ebp |
mov [ebx+8], ecx |
mov [ebx+0Ch], edi |
mov ecx, [ebx+10h] |
mov edx, [eax+18h] |
mov edi, [ebx+14h] |
mov ebp, [eax+1Ch] |
xor ecx, edx |
xor edi, ebp |
mov [ebx+10h], ecx |
mov [ebx+14h], edi |
mov ecx, [ebx+18h] |
mov edx, [eax] |
mov edi, [ebx+1Ch] |
mov ebp, [eax+4] |
xor ecx, edx |
xor edi, ebp |
mov [ebx+18h], ecx |
mov [ebx+1Ch], edi |
mov ecx, [eax] |
mov edx, [esp+4] |
mov edi, [eax+4] |
mov ebp, [esp+8] |
xor ecx, edx |
xor edi, ebp |
mov [eax], ecx |
mov [eax+4], edi |
mov ecx, [eax+8] |
mov edx, [esp+0Ch] |
mov edi, [eax+0Ch] |
mov ebp, [esp+10h] |
xor ecx, edx |
xor edi, ebp |
mov [eax+8], ecx |
mov [eax+0Ch], edi |
mov ecx, [eax+10h] |
mov edx, [esp+14h] |
mov edi, [eax+14h] |
mov ebp, [esp+18h] |
xor ecx, edx |
xor edi, ebp |
mov [eax+10h], ecx |
mov [eax+14h], edi |
mov ecx, [eax+18h] |
mov edx, [esp+1Ch] |
mov edi, [eax+1Ch] |
mov ebp, [esp+20h] |
xor ecx, edx |
xor edi, ebp |
mov [eax+18h], ecx |
mov [eax+1Ch], edi |
mov eax, [esp] |
mov ebx, [esp+4] |
mov ecx, [esp+8] |
mov esi, ecx |
xor ecx, 0FFFFFFFFh |
mov ebp, ebx |
or ecx, ebx |
xor ecx, eax |
mov [esp+44h], ecx |
mov ecx, [esp+0Ch] |
mov edx, [esp+10h] |
mov eax, ecx |
xor ecx, 0FFFFFFFFh |
mov ebx, edx |
xor edx, 0FFFFFFFFh |
or ecx, esi |
or edx, eax |
xor ebp, ecx |
mov ecx, [esp+14h] |
rol ebp, 0Fh |
xor esi, edx |
mov edx, [esp+18h] |
ror esi, 9 |
mov [esp+58h], ebp |
mov ebp, ecx |
xor ecx, 0FFFFFFFFh |
mov [esp+6Ch], esi |
mov esi, edx |
xor edx, 0FFFFFFFFh |
or ecx, ebx |
or edx, ebp |
xor eax, ecx |
mov ecx, [esp+1Ch] |
ror eax, 8 |
xor ebx, edx |
mov edx, [esp+20h] |
rol ebx, 6 |
mov [esp+80h], eax |
mov eax, ecx |
xor ecx, 0FFFFFFFFh |
mov [esp+50h], ebx |
mov ebx, edx |
xor edx, 0FFFFFFFFh |
or ecx, esi |
or edx, eax |
xor ebp, ecx |
mov ecx, [esp+24h] |
rol ebp, 4 |
xor esi, edx |
mov edx, [esp+28h] |
ror esi, 5 |
mov [esp+64h], ebp |
mov ebp, ecx |
xor ecx, 0FFFFFFFFh |
mov [esp+78h], esi |
mov esi, edx |
xor edx, 0FFFFFFFFh |
or ecx, ebx |
or edx, ebp |
xor eax, ecx |
mov ecx, [esp+2Ch] |
rol eax, 1 |
xor ebx, edx |
mov edx, [esp+30h] |
ror ebx, 0Bh |
mov [esp+48h], eax |
mov eax, ecx |
xor ecx, 0FFFFFFFFh |
mov [esp+5Ch], ebx |
mov ebx, edx |
xor edx, 0FFFFFFFFh |
or ecx, esi |
or edx, eax |
xor ebp, ecx |
mov ecx, [esp+34h] |
rol ebp, 2 |
xor esi, edx |
mov edx, [esp+38h] |
rol esi, 8 |
mov [esp+70h], ebp |
mov ebp, ecx |
xor ecx, 0FFFFFFFFh |
mov [esp+84h], esi |
mov esi, edx |
xor edx, 0FFFFFFFFh |
or ecx, ebx |
or edx, ebp |
xor eax, ecx |
mov ecx, [esp+3Ch] |
rol eax, 0Ah |
xor ebx, edx |
mov edx, [esp+40h] |
rol ebx, 0Dh |
mov [esp+54h], eax |
mov eax, ecx |
xor ecx, 0FFFFFFFFh |
mov [esp+68h], ebx |
mov ebx, edx |
xor edx, 0FFFFFFFFh |
or ecx, esi |
or edx, eax |
xor ebp, ecx |
mov ecx, [esp] |
rol ebp, 9 |
xor esi, edx |
mov edx, [esp+4] |
rol esi, 3 |
mov [esp+7Ch], ebp |
mov ebp, ecx |
xor ecx, 0FFFFFFFFh |
mov [esp+4Ch], esi |
mov esi, edx |
xor edx, 0FFFFFFFFh |
or ecx, ebx |
or edx, ebp |
xor eax, ecx |
xor ebx, edx |
ror eax, 4 |
rol ebx, 0Eh |
mov [esp+60h], eax |
mov [esp+74h], ebx |
mov eax, [esp+44h] |
mov ebx, [esp+48h] |
mov ecx, [esp+4Ch] |
xor eax, 1 |
mov edx, [esp+50h] |
xor eax, ebx |
mov ebp, [esp+54h] |
xor eax, ebp |
mov esi, [esp+94h] |
mov [esp], eax |
xor ebx, ecx |
mov eax, [esp+58h] |
xor ecx, edx |
mov edi, [esp+5Ch] |
xor ebx, eax |
xor ecx, edi |
xor ebx, [esi] |
xor ecx, [esi+4] |
mov [esp+4], ebx |
mov [esp+8], ecx |
xor edx, ebp |
mov ecx, [esp+60h] |
xor ebp, eax |
mov ebx, [esp+64h] |
xor edx, ecx |
xor ebp, ebx |
xor edx, [esi+8] |
xor ebp, [esi+0Ch] |
mov [esp+0Ch], edx |
mov [esp+10h], ebp |
xor eax, edi |
mov edx, [esp+68h] |
xor edi, ecx |
mov ebp, [esp+6Ch] |
xor eax, edx |
xor edi, ebp |
xor eax, [esi+10h] |
xor edi, [esi+14h] |
mov [esp+14h], eax |
mov [esp+18h], edi |
xor ecx, ebx |
mov eax, [esp+70h] |
xor ebx, edx |
mov edi, [esp+74h] |
xor ecx, eax |
xor ebx, edi |
xor ecx, [esi+18h] |
xor ebx, [esi+1Ch] |
mov [esp+1Ch], ecx |
mov [esp+20h], ebx |
mov esi, [esp+98h] |
xor edx, ebp |
mov ecx, [esp+78h] |
xor ebp, eax |
mov ebx, [esp+7Ch] |
xor edx, ecx |
xor ebp, ebx |
xor edx, [esi] |
xor ebp, [esi+4] |
mov [esp+24h], edx |
mov [esp+28h], ebp |
xor eax, edi |
mov edx, [esp+80h] |
xor edi, ecx |
mov ebp, [esp+84h] |
xor eax, edx |
xor edi, ebp |
xor eax, [esi+8] |
xor edi, [esi+0Ch] |
mov [esp+2Ch], eax |
mov [esp+30h], edi |
xor ecx, ebx |
mov eax, [esp+44h] |
xor ebx, edx |
mov edi, [esp+48h] |
xor ecx, eax |
xor ebx, edi |
xor ecx, [esi+10h] |
xor ebx, [esi+14h] |
mov [esp+34h], ecx |
mov [esp+38h], ebx |
mov ecx, [esp+4Ch] |
xor edx, ebp |
mov ebx, [esp+50h] |
xor ebp, eax |
xor edx, ecx |
xor ebp, ebx |
xor edx, [esi+18h] |
xor ebp, [esi+1Ch] |
mov [esp+3Ch], edx |
mov [esp+40h], ebp |
mov ecx, [esp+9Ch] |
test ecx, ecx |
jnz @@_loop_start |
mov edi, [esp+88h] |
mov ebp, [esp+0A0h] |
mov eax, [esp+24h] |
mov ebx, [esp+28h] |
mov [edi], eax |
mov [edi+4], ebx |
mov ecx, [esp+2Ch] |
mov edx, [esp+30h] |
mov [edi+8], ecx |
mov [edi+0Ch], edx |
mov eax, [esp+34h] |
mov ebx, [esp+38h] |
mov [edi+10h], eax |
mov [edi+14h], ebx |
mov ecx, [esp+3Ch] |
mov edx, [esp+40h] |
mov esp, ebp |
mov [edi+18h], ecx |
mov [edi+1Ch], edx |
pop ebp |
pop edi |
pop esi |
pop ebx |
end; |
procedure THash_Panama.DoTransform(Buffer: PUInt32Array); |
asm |
push ebx |
push esi |
mov esi, edx |
push edi |
lea edi, [eax].THash_Panama.FDigest |
lea edx, [eax].THash_Panama.FTap |
push ebp |
lea eax, [eax].THash_Panama.FLFSRBuffer |
mov ebp, esp |
add esp, 0FFFFFF5Ch |
and esp, 0FFFFFFE0h |
mov [esp+88h], edi |
mov [esp+8Ch], esi |
mov [esp+90h], edx |
mov [esp+94h], eax |
mov [esp+0A0h], ebp |
mov eax, [edi] |
mov ebx, [edi+4] |
mov [esp], eax |
mov [esp+4], ebx |
mov ebp, [edi+8] |
mov esi, [edi+0Ch] |
mov [esp+8], ebp |
mov [esp+0Ch], esi |
mov eax, [edi+10h] |
mov ebx, [edi+14h] |
mov [esp+10h], eax |
mov [esp+14h], ebx |
mov ebp, [edi+18h] |
mov esi, [edi+1Ch] |
mov [esp+18h], ebp |
mov [esp+1Ch], esi |
mov eax, [edi+20h] |
mov ebx, [edi+24h] |
mov [esp+20h], eax |
mov [esp+24h], ebx |
mov ebp, [edi+28h] |
mov esi, [edi+2Ch] |
mov [esp+28h], ebp |
mov [esp+2Ch], esi |
mov eax, [edi+30h] |
mov ebx, [edi+34h] |
mov [esp+30h], eax |
mov [esp+34h], ebx |
mov ebp, [edi+38h] |
mov esi, [edi+3Ch] |
mov eax, [edi+40h] |
mov [esp+38h], ebp |
mov [esp+3Ch], esi |
mov [esp+40h], eax |
mov eax, [esp] |
mov ebx, [esp+4] |
mov ecx, [esp+8] |
mov esi, ecx |
xor ecx, 0FFFFFFFFh |
mov ebp, ebx |
or ecx, ebx |
xor ecx, eax |
mov [esp+44h], ecx |
mov ecx, [esp+0Ch] |
mov edx, [esp+10h] |
mov eax, ecx |
xor ecx, 0FFFFFFFFh |
mov ebx, edx |
xor edx, 0FFFFFFFFh |
or ecx, esi |
or edx, eax |
xor ebp, ecx |
mov ecx, [esp+14h] |
rol ebp, 0Fh |
xor esi, edx |
mov edx, [esp+18h] |
ror esi, 9 |
mov [esp+58h], ebp |
mov ebp, ecx |
xor ecx, 0FFFFFFFFh |
mov [esp+6Ch], esi |
mov esi, edx |
xor edx, 0FFFFFFFFh |
or ecx, ebx |
or edx, ebp |
xor eax, ecx |
mov ecx, [esp+1Ch] |
ror eax, 8 |
xor ebx, edx |
mov edx, [esp+20h] |
rol ebx, 6 |
mov [esp+80h], eax |
mov eax, ecx |
xor ecx, 0FFFFFFFFh |
mov [esp+50h], ebx |
mov ebx, edx |
xor edx, 0FFFFFFFFh |
or ecx, esi |
or edx, eax |
xor ebp, ecx |
mov ecx, [esp+24h] |
rol ebp, 4 |
xor esi, edx |
mov edx, [esp+28h] |
ror esi, 5 |
mov [esp+64h], ebp |
mov ebp, ecx |
xor ecx, 0FFFFFFFFh |
mov [esp+78h], esi |
mov esi, edx |
xor edx, 0FFFFFFFFh |
or ecx, ebx |
or edx, ebp |
xor eax, ecx |
mov ecx, [esp+2Ch] |
rol eax, 1 |
xor ebx, edx |
mov edx, [esp+30h] |
ror ebx, 0Bh |
mov [esp+48h], eax |
mov eax, ecx |
xor ecx, 0FFFFFFFFh |
mov [esp+5Ch], ebx |
mov ebx, edx |
xor edx, 0FFFFFFFFh |
or ecx, esi |
or edx, eax |
xor ebp, ecx |
mov ecx, [esp+34h] |
rol ebp, 2 |
xor esi, edx |
mov edx, [esp+38h] |
rol esi, 8 |
mov [esp+70h], ebp |
mov ebp, ecx |
xor ecx, 0FFFFFFFFh |
mov [esp+84h], esi |
mov esi, edx |
xor edx, 0FFFFFFFFh |
or ecx, ebx |
or edx, ebp |
xor eax, ecx |
mov ecx, [esp+3Ch] |
rol eax, 0Ah |
xor ebx, edx |
mov edx, [esp+40h] |
rol ebx, 0Dh |
mov [esp+54h], eax |
mov eax, ecx |
xor ecx, 0FFFFFFFFh |
mov [esp+68h], ebx |
mov ebx, edx |
xor edx, 0FFFFFFFFh |
or ecx, esi |
or edx, eax |
xor ebp, ecx |
mov ecx, [esp] |
rol ebp, 9 |
xor esi, edx |
mov edx, [esp+4] |
rol esi, 3 |
mov [esp+7Ch], ebp |
mov ebp, ecx |
xor ecx, 0FFFFFFFFh |
mov [esp+4Ch], esi |
mov esi, edx |
xor edx, 0FFFFFFFFh |
or ecx, ebx |
or edx, ebp |
xor eax, ecx |
xor ebx, edx |
ror eax, 4 |
rol ebx, 0Eh |
mov [esp+60h], eax |
mov [esp+74h], ebx |
mov esi, [esp+90h] |
mov ebp, [esp+94h] |
mov edx, [esi] |
mov eax, edx |
add edx, 10h |
dec eax |
and edx, 1Fh |
and eax, 1Fh |
shl edx, 5 |
mov [esi], eax |
add edx, ebp |
mov ebx, eax |
shl eax, 5 |
add ebx, 19h |
add eax, ebp |
and ebx, 1Fh |
shl ebx, 5 |
mov [esp+98h], edx |
add ebx, ebp |
mov ecx, [ebx] |
mov edx, [eax+8] |
mov edi, [ebx+4] |
mov ebp, [eax+0Ch] |
xor ecx, edx |
xor edi, ebp |
mov [ebx], ecx |
mov [ebx+4], edi |
mov ecx, [ebx+8] |
mov edx, [eax+10h] |
mov edi, [ebx+0Ch] |
mov ebp, [eax+14h] |
xor ecx, edx |
xor edi, ebp |
mov [ebx+8], ecx |
mov [ebx+0Ch], edi |
mov ecx, [ebx+10h] |
mov edx, [eax+18h] |
mov edi, [ebx+14h] |
mov ebp, [eax+1Ch] |
xor ecx, edx |
xor edi, ebp |
mov [ebx+10h], ecx |
mov [ebx+14h], edi |
mov ecx, [ebx+18h] |
mov edx, [eax] |
mov edi, [ebx+1Ch] |
mov ebp, [eax+4] |
xor ecx, edx |
xor edi, ebp |
mov [ebx+18h], ecx |
mov [ebx+1Ch], edi |
mov ebx, [esp+8Ch] |
mov ecx, [eax] |
mov edx, [ebx] |
mov edi, [eax+4] |
mov ebp, [ebx+4] |
xor ecx, edx |
xor edi, ebp |
mov [eax], ecx |
mov [eax+4], edi |
mov ecx, [eax+8] |
mov edx, [ebx+8] |
mov edi, [eax+0Ch] |
mov ebp, [ebx+0Ch] |
xor ecx, edx |
xor edi, ebp |
mov [eax+8], ecx |
mov [eax+0Ch], edi |
mov ecx, [eax+10h] |
mov edx, [ebx+10h] |
mov edi, [eax+14h] |
mov ebp, [ebx+14h] |
xor ecx, edx |
xor edi, ebp |
mov [eax+10h], ecx |
mov [eax+14h], edi |
mov ecx, [eax+18h] |
mov edx, [ebx+18h] |
mov edi, [eax+1Ch] |
mov ebp, [ebx+1Ch] |
xor ecx, edx |
xor edi, ebp |
mov [eax+18h], ecx |
mov [eax+1Ch], edi |
mov eax, [esp+44h] |
mov ebx, [esp+48h] |
mov ecx, [esp+4Ch] |
xor eax, 1 |
mov edx, [esp+50h] |
xor eax, ebx |
mov ebp, [esp+54h] |
xor eax, ebp |
mov esi, [esp+8Ch] |
mov [esp], eax |
xor ebx, ecx |
mov eax, [esp+58h] |
xor ecx, edx |
mov edi, [esp+5Ch] |
xor ebx, eax |
xor ecx, edi |
xor ebx, [esi] |
xor ecx, [esi+4] |
mov [esp+4], ebx |
mov [esp+8], ecx |
xor edx, ebp |
mov ecx, [esp+60h] |
xor ebp, eax |
mov ebx, [esp+64h] |
xor edx, ecx |
xor ebp, ebx |
xor edx, [esi+8] |
xor ebp, [esi+0Ch] |
mov [esp+0Ch], edx |
mov [esp+10h], ebp |
xor eax, edi |
mov edx, [esp+68h] |
xor edi, ecx |
mov ebp, [esp+6Ch] |
xor eax, edx |
xor edi, ebp |
xor eax, [esi+10h] |
xor edi, [esi+14h] |
mov [esp+14h], eax |
mov [esp+18h], edi |
xor ecx, ebx |
mov eax, [esp+70h] |
xor ebx, edx |
mov edi, [esp+74h] |
xor ecx, eax |
xor ebx, edi |
xor ecx, [esi+18h] |
xor ebx, [esi+1Ch] |
add esi, 20h |
mov [esp+1Ch], ecx |
mov [esp+20h], ebx |
mov [esp+8Ch], esi |
mov esi, [esp+98h] |
xor edx, ebp |
mov ecx, [esp+78h] |
xor ebp, eax |
mov ebx, [esp+7Ch] |
xor edx, ecx |
xor ebp, ebx |
xor edx, [esi] |
xor ebp, [esi+4] |
mov [esp+24h], edx |
mov [esp+28h], ebp |
xor eax, edi |
mov edx, [esp+80h] |
xor edi, ecx |
mov ebp, [esp+84h] |
xor eax, edx |
xor edi, ebp |
xor eax, [esi+8] |
xor edi, [esi+0Ch] |
mov [esp+2Ch], eax |
mov [esp+30h], edi |
xor ecx, ebx |
mov eax, [esp+44h] |
xor ebx, edx |
mov edi, [esp+48h] |
xor ecx, eax |
xor ebx, edi |
xor ecx, [esi+10h] |
xor ebx, [esi+14h] |
mov [esp+34h], ecx |
mov [esp+38h], ebx |
mov ecx, [esp+4Ch] |
xor edx, ebp |
mov ebx, [esp+50h] |
xor ebp, eax |
xor edx, ecx |
xor ebp, ebx |
xor edx, [esi+18h] |
xor ebp, [esi+1Ch] |
mov [esp+3Ch], edx |
mov [esp+40h], ebp |
mov edi, [esp+88h] |
mov eax, [esp] |
mov ebx, [esp+4] |
mov [edi], eax |
mov [edi+4], ebx |
mov ebp, [esp+8] |
mov esi, [esp+0Ch] |
mov [edi+8], ebp |
mov [edi+0Ch], esi |
mov eax, [esp+10h] |
mov ebx, [esp+14h] |
mov [edi+10h], eax |
mov [edi+14h], ebx |
mov ebp, [esp+18h] |
mov esi, [esp+1Ch] |
mov [edi+18h], ebp |
mov [edi+1Ch], esi |
mov eax, [esp+20h] |
mov ebx, [esp+24h] |
mov [edi+20h], eax |
mov [edi+24h], ebx |
mov ebp, [esp+28h] |
mov esi, [esp+2Ch] |
mov [edi+28h], ebp |
mov [edi+2Ch], esi |
mov eax, [esp+30h] |
mov ebx, [esp+34h] |
mov [edi+30h], eax |
mov [edi+34h], ebx |
mov ebp, [esp+38h] |
mov esi, [esp+3Ch] |
mov eax, [esp+40h] |
mov [edi+38h], ebp |
mov [edi+3Ch], esi |
mov [edi+40h], eax |
mov ebp, [esp+0A0h] |
mov esp, ebp |
pop ebp |
pop edi |
pop esi |
pop ebx |
end; |
{$ENDIF} |
{$IFDEF THashBaseWhirlpool_asm} |
procedure THashBaseWhirlpool.DoTransform(Buffer: PUInt32Array); |
asm |
push ebx |
push esi |
push edi |
mov esi, edx |
lea edi, [eax].THashBaseWhirlpool.FDigest |
push ebp |
mov ebx, [eax].THashBaseWhirlpool.FTableC |
mov eax, [eax].THashBaseWhirlpool.FTableR |
mov ebp, esp |
add esp, 0FFFFFEE8h |
and esp, 0FFFFFFE0h |
mov [esp+100h], eax |
mov [esp+104h], ebx |
mov [esp+10Ch], edi |
mov [esp+110h], esi |
mov [esp+114h], ebp |
xor ebp, ebp |
mov eax, [edi] |
mov ebx, [edi+4] |
mov [esp+40h], eax |
mov ecx, [esi] |
mov edx, [esi+4] |
mov [esp+44h], ebx |
xor eax, ecx |
xor ebx, edx |
mov [esp], eax |
mov [esp+4], ebx |
mov eax, [edi+8] |
mov ebx, [edi+0Ch] |
mov [esp+48h], eax |
mov ecx, [esi+8] |
mov edx, [esi+0Ch] |
mov [esp+4Ch], ebx |
xor eax, ecx |
xor ebx, edx |
mov [esp+8], eax |
mov [esp+0Ch], ebx |
mov eax, [edi+10h] |
mov ebx, [edi+14h] |
mov [esp+50h], eax |
mov ecx, [esi+10h] |
mov edx, [esi+14h] |
mov [esp+54h], ebx |
xor eax, ecx |
xor ebx, edx |
mov [esp+10h], eax |
mov [esp+14h], ebx |
mov eax, [edi+18h] |
mov ebx, [edi+1Ch] |
mov [esp+58h], eax |
mov ecx, [esi+18h] |
mov edx, [esi+1Ch] |
mov [esp+5Ch], ebx |
xor eax, ecx |
xor ebx, edx |
mov [esp+18h], eax |
mov [esp+1Ch], ebx |
mov eax, [edi+20h] |
mov ebx, [edi+24h] |
mov [esp+60h], eax |
mov ecx, [esi+20h] |
mov edx, [esi+24h] |
mov [esp+64h], ebx |
xor eax, ecx |
xor ebx, edx |
mov [esp+20h], eax |
mov [esp+24h], ebx |
mov eax, [edi+28h] |
mov ebx, [edi+2Ch] |
mov [esp+68h], eax |
mov ecx, [esi+28h] |
mov edx, [esi+2Ch] |
mov [esp+6Ch], ebx |
xor eax, ecx |
xor ebx, edx |
mov [esp+28h], eax |
mov [esp+2Ch], ebx |
mov eax, [edi+30h] |
mov ebx, [edi+34h] |
mov [esp+70h], eax |
mov ecx, [esi+30h] |
mov edx, [esi+34h] |
mov [esp+74h], ebx |
xor eax, ecx |
xor ebx, edx |
mov [esp+30h], eax |
mov [esp+34h], ebx |
mov eax, [edi+38h] |
mov ebx, [edi+3Ch] |
mov [esp+78h], eax |
mov ecx, [esi+38h] |
mov edx, [esi+3Ch] |
mov [esp+7Ch], ebx |
xor eax, ecx |
xor ebx, edx |
mov [esp+38h], eax |
mov [esp+3Ch], ebx |
@@_loop_start: |
mov [esp+108h], ebp |
mov edi, [esp+100h] |
mov esi, [esp+104h] |
mov eax, [edi+ebp] |
mov ebx, [edi+ebp+4] |
mov ecx, [esp+40h] |
mov edx, [esp+78h] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+4] |
xor eax, edi |
mov ecx, [esp+70h] |
mov edi, [esi+edx+800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+68h] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
xor eax, edi |
xor ebx, ebp |
mov ecx, [esp+64h] |
mov edx, [esp+5Ch] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+2004h] |
xor eax, edi |
mov ecx, [esp+54h] |
mov edi, [esi+edx+2800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+2804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+4Ch] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp+80h], eax |
mov [esp+84h], ebx |
mov ecx, [esp+48h] |
mov edx, [esp+40h] |
and ecx, 0FFh |
shr edx, 5 |
mov eax, [esi+ecx*8] |
and edx, 7F8h |
mov ebx, [esi+ecx*8+4] |
mov ecx, [esp+78h] |
mov edi, [esi+edx+800h] |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
mov edx, [esp+70h] |
xor eax, edi |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
mov ecx, [esp+6Ch] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
and ecx, 0FFh |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
mov edx, [esp+64h] |
xor eax, edi |
xor ebx, ebp |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
mov ebp, [esi+ecx*8+2004h] |
and edx, 7F8h |
mov ecx, [esp+5Ch] |
xor eax, edi |
shr ecx, 0Dh |
xor ebx, ebp |
mov edi, [esi+edx+2800h] |
and ecx, 7F8h |
mov ebp, [esi+edx+2804h] |
xor eax, edi |
mov edx, [esp+54h] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp+88h], eax |
mov [esp+8Ch], ebx |
mov ecx, [esp+50h] |
mov edx, [esp+48h] |
and ecx, 0FFh |
shr edx, 5 |
mov eax, [esi+ecx*8] |
and edx, 7F8h |
mov ebx, [esi+ecx*8+4] |
mov ecx, [esp+40h] |
mov edi, [esi+edx+800h] |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
mov edx, [esp+78h] |
xor eax, edi |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
mov ecx, [esp+74h] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
and ecx, 0FFh |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
mov edx, [esp+6Ch] |
xor eax, edi |
xor ebx, ebp |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
mov ebp, [esi+ecx*8+2004h] |
and edx, 7F8h |
mov ecx, [esp+64h] |
xor eax, edi |
shr ecx, 0Dh |
xor ebx, ebp |
mov edi, [esi+edx+2800h] |
and ecx, 7F8h |
mov ebp, [esi+edx+2804h] |
xor eax, edi |
mov edx, [esp+5Ch] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp+90h], eax |
mov [esp+94h], ebx |
mov ecx, [esp+58h] |
mov edx, [esp+50h] |
and ecx, 0FFh |
shr edx, 5 |
mov eax, [esi+ecx*8] |
and edx, 7F8h |
mov ebx, [esi+ecx*8+4] |
mov ecx, [esp+48h] |
mov edi, [esi+edx+800h] |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
mov edx, [esp+40h] |
xor eax, edi |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
mov ecx, [esp+7Ch] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
and ecx, 0FFh |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
mov edx, [esp+74h] |
xor eax, edi |
xor ebx, ebp |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
mov ebp, [esi+ecx*8+2004h] |
and edx, 7F8h |
mov ecx, [esp+6Ch] |
xor eax, edi |
shr ecx, 0Dh |
xor ebx, ebp |
mov edi, [esi+edx+2800h] |
and ecx, 7F8h |
mov ebp, [esi+edx+2804h] |
xor eax, edi |
mov edx, [esp+64h] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp+98h], eax |
mov [esp+9Ch], ebx |
mov ecx, [esp+60h] |
mov edx, [esp+58h] |
and ecx, 0FFh |
shr edx, 5 |
mov eax, [esi+ecx*8] |
and edx, 7F8h |
mov ebx, [esi+ecx*8+4] |
mov ecx, [esp+50h] |
mov edi, [esi+edx+800h] |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
mov edx, [esp+48h] |
xor eax, edi |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
mov ecx, [esp+44h] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
and ecx, 0FFh |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
mov edx, [esp+7Ch] |
xor eax, edi |
xor ebx, ebp |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
mov ebp, [esi+ecx*8+2004h] |
and edx, 7F8h |
mov ecx, [esp+74h] |
xor eax, edi |
shr ecx, 0Dh |
xor ebx, ebp |
mov edi, [esi+edx+2800h] |
and ecx, 7F8h |
mov ebp, [esi+edx+2804h] |
xor eax, edi |
mov edx, [esp+6Ch] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp+0A0h], eax |
mov [esp+0A4h], ebx |
mov ecx, [esp+68h] |
mov edx, [esp+60h] |
and ecx, 0FFh |
shr edx, 5 |
mov eax, [esi+ecx*8] |
and edx, 7F8h |
mov ebx, [esi+ecx*8+4] |
mov ecx, [esp+58h] |
mov edi, [esi+edx+800h] |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
mov edx, [esp+50h] |
xor eax, edi |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
mov ecx, [esp+4Ch] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
and ecx, 0FFh |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
mov edx, [esp+44h] |
xor eax, edi |
xor ebx, ebp |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
mov ebp, [esi+ecx*8+2004h] |
and edx, 7F8h |
mov ecx, [esp+7Ch] |
xor eax, edi |
shr ecx, 0Dh |
xor ebx, ebp |
mov edi, [esi+edx+2800h] |
and ecx, 7F8h |
mov ebp, [esi+edx+2804h] |
xor eax, edi |
mov edx, [esp+74h] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp+0A8h], eax |
mov [esp+0ACh], ebx |
mov ecx, [esp+70h] |
mov edx, [esp+68h] |
and ecx, 0FFh |
shr edx, 5 |
mov eax, [esi+ecx*8] |
and edx, 7F8h |
mov ebx, [esi+ecx*8+4] |
mov ecx, [esp+60h] |
mov edi, [esi+edx+800h] |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
mov edx, [esp+58h] |
xor eax, edi |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
mov ecx, [esp+54h] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
and ecx, 0FFh |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
mov edx, [esp+4Ch] |
xor eax, edi |
xor ebx, ebp |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
mov ebp, [esi+ecx*8+2004h] |
and edx, 7F8h |
mov ecx, [esp+44h] |
xor eax, edi |
shr ecx, 0Dh |
xor ebx, ebp |
mov edi, [esi+edx+2800h] |
and ecx, 7F8h |
mov ebp, [esi+edx+2804h] |
xor eax, edi |
mov edx, [esp+7Ch] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp+0B0h], eax |
mov [esp+0B4h], ebx |
mov ecx, [esp+78h] |
mov edx, [esp+70h] |
and ecx, 0FFh |
shr edx, 5 |
mov eax, [esi+ecx*8] |
and edx, 7F8h |
mov ebx, [esi+ecx*8+4] |
mov ecx, [esp+68h] |
mov edi, [esi+edx+800h] |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
mov edx, [esp+60h] |
xor eax, edi |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
mov ecx, [esp+5Ch] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
and ecx, 0FFh |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
mov edx, [esp+54h] |
xor eax, edi |
xor ebx, ebp |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
mov ebp, [esi+ecx*8+2004h] |
and edx, 7F8h |
mov ecx, [esp+4Ch] |
xor eax, edi |
shr ecx, 0Dh |
xor ebx, ebp |
mov edi, [esi+edx+2800h] |
and ecx, 7F8h |
mov ebp, [esi+edx+2804h] |
xor eax, edi |
mov edx, [esp+44h] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp+0B8h], eax |
mov [esp+0BCh], ebx |
mov eax, [esp+80h] |
mov ebx, [esp+84h] |
mov ecx, [esp] |
mov edx, [esp+38h] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+4] |
xor eax, edi |
mov ecx, [esp+30h] |
mov edi, [esi+edx+800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+28h] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
xor eax, edi |
xor ebx, ebp |
mov ecx, [esp+24h] |
mov edx, [esp+1Ch] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+2004h] |
xor eax, edi |
mov ecx, [esp+14h] |
mov edi, [esi+edx+2800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+2804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+0Ch] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp+0C0h], eax |
mov [esp+0C4h], ebx |
mov eax, [esp+88h] |
mov ebx, [esp+8Ch] |
mov ecx, [esp+8] |
mov edx, [esp] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+4] |
xor eax, edi |
mov ecx, [esp+38h] |
mov edi, [esi+edx+800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+30h] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
xor eax, edi |
xor ebx, ebp |
mov ecx, [esp+2Ch] |
mov edx, [esp+24h] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+2004h] |
xor eax, edi |
mov ecx, [esp+1Ch] |
mov edi, [esi+edx+2800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+2804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+14h] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp+0C8h], eax |
mov [esp+0CCh], ebx |
mov eax, [esp+90h] |
mov ebx, [esp+94h] |
mov ecx, [esp+10h] |
mov edx, [esp+8] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+4] |
xor eax, edi |
mov ecx, [esp] |
mov edi, [esi+edx+800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+38h] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
xor eax, edi |
xor ebx, ebp |
mov ecx, [esp+34h] |
mov edx, [esp+2Ch] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+2004h] |
xor eax, edi |
mov ecx, [esp+24h] |
mov edi, [esi+edx+2800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+2804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+1Ch] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp+0D0h], eax |
mov [esp+0D4h], ebx |
mov eax, [esp+98h] |
mov ebx, [esp+9Ch] |
mov ecx, [esp+18h] |
mov edx, [esp+10h] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+4] |
xor eax, edi |
mov ecx, [esp+8] |
mov edi, [esi+edx+800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
xor eax, edi |
xor ebx, ebp |
mov ecx, [esp+3Ch] |
mov edx, [esp+34h] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+2004h] |
xor eax, edi |
mov ecx, [esp+2Ch] |
mov edi, [esi+edx+2800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+2804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+24h] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp+0D8h], eax |
mov [esp+0DCh], ebx |
mov eax, [esp+0A0h] |
mov ebx, [esp+0A4h] |
mov ecx, [esp+20h] |
mov edx, [esp+18h] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+4] |
xor eax, edi |
mov ecx, [esp+10h] |
mov edi, [esi+edx+800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+8] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
xor eax, edi |
xor ebx, ebp |
mov ecx, [esp+4] |
mov edx, [esp+3Ch] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+2004h] |
xor eax, edi |
mov ecx, [esp+34h] |
mov edi, [esi+edx+2800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+2804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+2Ch] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp+0E0h], eax |
mov [esp+0E4h], ebx |
mov eax, [esp+0A8h] |
mov ebx, [esp+0ACh] |
mov ecx, [esp+28h] |
mov edx, [esp+20h] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+4] |
xor eax, edi |
mov ecx, [esp+18h] |
mov edi, [esi+edx+800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+10h] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
xor eax, edi |
xor ebx, ebp |
mov ecx, [esp+0Ch] |
mov edx, [esp+4] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+2004h] |
xor eax, edi |
mov ecx, [esp+3Ch] |
mov edi, [esi+edx+2800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+2804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+34h] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp+0E8h], eax |
mov [esp+0ECh], ebx |
mov eax, [esp+0B0h] |
mov ebx, [esp+0B4h] |
mov ecx, [esp+30h] |
mov edx, [esp+28h] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+4] |
xor eax, edi |
mov ecx, [esp+20h] |
mov edi, [esi+edx+800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+18h] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
xor eax, edi |
xor ebx, ebp |
mov ecx, [esp+14h] |
mov edx, [esp+0Ch] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+2004h] |
xor eax, edi |
mov ecx, [esp+4] |
mov edi, [esi+edx+2800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+2804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+3Ch] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp+0F0h], eax |
mov [esp+0F4h], ebx |
mov eax, [esp+0B8h] |
mov ebx, [esp+0BCh] |
mov ecx, [esp+38h] |
mov edx, [esp+30h] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+4] |
xor eax, edi |
mov ecx, [esp+28h] |
mov edi, [esi+edx+800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+20h] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
xor eax, edi |
xor ebx, ebp |
mov ecx, [esp+1Ch] |
mov edx, [esp+14h] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+2004h] |
xor eax, edi |
mov ecx, [esp+0Ch] |
mov edi, [esi+edx+2800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+2804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+4] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp+0F8h], eax |
mov [esp+0FCh], ebx |
mov ebp, [esp+108h] |
mov edi, [esp+100h] |
mov eax, [edi+ebp+8] |
mov ebx, [edi+ebp+0Ch] |
mov ecx, [esp+80h] |
mov edx, [esp+0B8h] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+4] |
xor eax, edi |
mov ecx, [esp+0B0h] |
mov edi, [esi+edx+800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+0A8h] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
xor eax, edi |
xor ebx, ebp |
mov ecx, [esp+0A4h] |
mov edx, [esp+9Ch] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+2004h] |
xor eax, edi |
mov ecx, [esp+94h] |
mov edi, [esi+edx+2800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+2804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+8Ch] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp+40h], eax |
mov [esp+44h], ebx |
mov ecx, [esp+88h] |
mov edx, [esp+80h] |
and ecx, 0FFh |
shr edx, 5 |
mov eax, [esi+ecx*8] |
and edx, 7F8h |
mov ebx, [esi+ecx*8+4] |
mov ecx, [esp+0B8h] |
mov edi, [esi+edx+800h] |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
mov edx, [esp+0B0h] |
xor eax, edi |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
mov ecx, [esp+0ACh] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
and ecx, 0FFh |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
mov edx, [esp+0A4h] |
xor eax, edi |
xor ebx, ebp |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
mov ebp, [esi+ecx*8+2004h] |
and edx, 7F8h |
mov ecx, [esp+9Ch] |
xor eax, edi |
shr ecx, 0Dh |
xor ebx, ebp |
mov edi, [esi+edx+2800h] |
and ecx, 7F8h |
mov ebp, [esi+edx+2804h] |
xor eax, edi |
mov edx, [esp+94h] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp+48h], eax |
mov [esp+4Ch], ebx |
mov ecx, [esp+90h] |
mov edx, [esp+88h] |
and ecx, 0FFh |
shr edx, 5 |
mov eax, [esi+ecx*8] |
and edx, 7F8h |
mov ebx, [esi+ecx*8+4] |
mov ecx, [esp+80h] |
mov edi, [esi+edx+800h] |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
mov edx, [esp+0B8h] |
xor eax, edi |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
mov ecx, [esp+0B4h] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
and ecx, 0FFh |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
mov edx, [esp+0ACh] |
xor eax, edi |
xor ebx, ebp |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
mov ebp, [esi+ecx*8+2004h] |
and edx, 7F8h |
mov ecx, [esp+0A4h] |
xor eax, edi |
shr ecx, 0Dh |
xor ebx, ebp |
mov edi, [esi+edx+2800h] |
and ecx, 7F8h |
mov ebp, [esi+edx+2804h] |
xor eax, edi |
mov edx, [esp+9Ch] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp+50h], eax |
mov [esp+54h], ebx |
mov ecx, [esp+98h] |
mov edx, [esp+90h] |
and ecx, 0FFh |
shr edx, 5 |
mov eax, [esi+ecx*8] |
and edx, 7F8h |
mov ebx, [esi+ecx*8+4] |
mov ecx, [esp+88h] |
mov edi, [esi+edx+800h] |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
mov edx, [esp+80h] |
xor eax, edi |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
mov ecx, [esp+0BCh] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
and ecx, 0FFh |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
mov edx, [esp+0B4h] |
xor eax, edi |
xor ebx, ebp |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
mov ebp, [esi+ecx*8+2004h] |
and edx, 7F8h |
mov ecx, [esp+0ACh] |
xor eax, edi |
shr ecx, 0Dh |
xor ebx, ebp |
mov edi, [esi+edx+2800h] |
and ecx, 7F8h |
mov ebp, [esi+edx+2804h] |
xor eax, edi |
mov edx, [esp+0A4h] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp+58h], eax |
mov [esp+5Ch], ebx |
mov ecx, [esp+0A0h] |
mov edx, [esp+98h] |
and ecx, 0FFh |
shr edx, 5 |
mov eax, [esi+ecx*8] |
and edx, 7F8h |
mov ebx, [esi+ecx*8+4] |
mov ecx, [esp+90h] |
mov edi, [esi+edx+800h] |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
mov edx, [esp+88h] |
xor eax, edi |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
mov ecx, [esp+84h] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
and ecx, 0FFh |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
mov edx, [esp+0BCh] |
xor eax, edi |
xor ebx, ebp |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
mov ebp, [esi+ecx*8+2004h] |
and edx, 7F8h |
mov ecx, [esp+0B4h] |
xor eax, edi |
shr ecx, 0Dh |
xor ebx, ebp |
mov edi, [esi+edx+2800h] |
and ecx, 7F8h |
mov ebp, [esi+edx+2804h] |
xor eax, edi |
mov edx, [esp+0ACh] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp+60h], eax |
mov [esp+64h], ebx |
mov ecx, [esp+0A8h] |
mov edx, [esp+0A0h] |
and ecx, 0FFh |
shr edx, 5 |
mov eax, [esi+ecx*8] |
and edx, 7F8h |
mov ebx, [esi+ecx*8+4] |
mov ecx, [esp+98h] |
mov edi, [esi+edx+800h] |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
mov edx, [esp+90h] |
xor eax, edi |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
mov ecx, [esp+8Ch] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
and ecx, 0FFh |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
mov edx, [esp+84h] |
xor eax, edi |
xor ebx, ebp |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
mov ebp, [esi+ecx*8+2004h] |
and edx, 7F8h |
mov ecx, [esp+0BCh] |
xor eax, edi |
shr ecx, 0Dh |
xor ebx, ebp |
mov edi, [esi+edx+2800h] |
and ecx, 7F8h |
mov ebp, [esi+edx+2804h] |
xor eax, edi |
mov edx, [esp+0B4h] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp+68h], eax |
mov [esp+6Ch], ebx |
mov ecx, [esp+0B0h] |
mov edx, [esp+0A8h] |
and ecx, 0FFh |
shr edx, 5 |
mov eax, [esi+ecx*8] |
and edx, 7F8h |
mov ebx, [esi+ecx*8+4] |
mov ecx, [esp+0A0h] |
mov edi, [esi+edx+800h] |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
mov edx, [esp+98h] |
xor eax, edi |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
mov ecx, [esp+94h] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
and ecx, 0FFh |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
mov edx, [esp+8Ch] |
xor eax, edi |
xor ebx, ebp |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
mov ebp, [esi+ecx*8+2004h] |
and edx, 7F8h |
mov ecx, [esp+84h] |
xor eax, edi |
shr ecx, 0Dh |
xor ebx, ebp |
mov edi, [esi+edx+2800h] |
and ecx, 7F8h |
mov ebp, [esi+edx+2804h] |
xor eax, edi |
mov edx, [esp+0BCh] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp+70h], eax |
mov [esp+74h], ebx |
mov ecx, [esp+0B8h] |
mov edx, [esp+0B0h] |
and ecx, 0FFh |
shr edx, 5 |
mov eax, [esi+ecx*8] |
and edx, 7F8h |
mov ebx, [esi+ecx*8+4] |
mov ecx, [esp+0A8h] |
mov edi, [esi+edx+800h] |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
mov edx, [esp+0A0h] |
xor eax, edi |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
mov ecx, [esp+9Ch] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
and ecx, 0FFh |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
mov edx, [esp+94h] |
xor eax, edi |
xor ebx, ebp |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
mov ebp, [esi+ecx*8+2004h] |
and edx, 7F8h |
mov ecx, [esp+8Ch] |
xor eax, edi |
shr ecx, 0Dh |
xor ebx, ebp |
mov edi, [esi+edx+2800h] |
and ecx, 7F8h |
mov ebp, [esi+edx+2804h] |
xor eax, edi |
mov edx, [esp+84h] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp+78h], eax |
mov [esp+7Ch], ebx |
mov eax, [esp+40h] |
mov ebx, [esp+44h] |
mov ecx, [esp+0C0h] |
mov edx, [esp+0F8h] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+4] |
xor eax, edi |
mov ecx, [esp+0F0h] |
mov edi, [esi+edx+800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+0E8h] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
xor eax, edi |
xor ebx, ebp |
mov ecx, [esp+0E4h] |
mov edx, [esp+0DCh] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+2004h] |
xor eax, edi |
mov ecx, [esp+0D4h] |
mov edi, [esi+edx+2800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+2804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+0CCh] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp], eax |
mov [esp+4], ebx |
mov eax, [esp+48h] |
mov ebx, [esp+4Ch] |
mov ecx, [esp+0C8h] |
mov edx, [esp+0C0h] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+4] |
xor eax, edi |
mov ecx, [esp+0F8h] |
mov edi, [esi+edx+800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+0F0h] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
xor eax, edi |
xor ebx, ebp |
mov ecx, [esp+0ECh] |
mov edx, [esp+0E4h] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+2004h] |
xor eax, edi |
mov ecx, [esp+0DCh] |
mov edi, [esi+edx+2800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+2804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+0D4h] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp+8], eax |
mov [esp+0Ch], ebx |
mov eax, [esp+50h] |
mov ebx, [esp+54h] |
mov ecx, [esp+0D0h] |
mov edx, [esp+0C8h] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+4] |
xor eax, edi |
mov ecx, [esp+0C0h] |
mov edi, [esi+edx+800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+0F8h] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
xor eax, edi |
xor ebx, ebp |
mov ecx, [esp+0F4h] |
mov edx, [esp+0ECh] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+2004h] |
xor eax, edi |
mov ecx, [esp+0E4h] |
mov edi, [esi+edx+2800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+2804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+0DCh] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp+10h], eax |
mov [esp+14h], ebx |
mov eax, [esp+58h] |
mov ebx, [esp+5Ch] |
mov ecx, [esp+0D8h] |
mov edx, [esp+0D0h] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+4] |
xor eax, edi |
mov ecx, [esp+0C8h] |
mov edi, [esi+edx+800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+0C0h] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
xor eax, edi |
xor ebx, ebp |
mov ecx, [esp+0FCh] |
mov edx, [esp+0F4h] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+2004h] |
xor eax, edi |
mov ecx, [esp+0ECh] |
mov edi, [esi+edx+2800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+2804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+0E4h] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp+18h], eax |
mov [esp+1Ch], ebx |
mov eax, [esp+60h] |
mov ebx, [esp+64h] |
mov ecx, [esp+0E0h] |
mov edx, [esp+0D8h] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+4] |
xor eax, edi |
mov ecx, [esp+0D0h] |
mov edi, [esi+edx+800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+0C8h] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
xor eax, edi |
xor ebx, ebp |
mov ecx, [esp+0C4h] |
mov edx, [esp+0FCh] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+2004h] |
xor eax, edi |
mov ecx, [esp+0F4h] |
mov edi, [esi+edx+2800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+2804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+0ECh] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp+20h], eax |
mov [esp+24h], ebx |
mov eax, [esp+68h] |
mov ebx, [esp+6Ch] |
mov ecx, [esp+0E8h] |
mov edx, [esp+0E0h] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+4] |
xor eax, edi |
mov ecx, [esp+0D8h] |
mov edi, [esi+edx+800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+0D0h] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
xor eax, edi |
xor ebx, ebp |
mov ecx, [esp+0CCh] |
mov edx, [esp+0C4h] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+2004h] |
xor eax, edi |
mov ecx, [esp+0FCh] |
mov edi, [esi+edx+2800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+2804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+0F4h] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp+28h], eax |
mov [esp+2Ch], ebx |
mov eax, [esp+70h] |
mov ebx, [esp+74h] |
mov ecx, [esp+0F0h] |
mov edx, [esp+0E8h] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+4] |
xor eax, edi |
mov ecx, [esp+0E0h] |
mov edi, [esi+edx+800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+0D8h] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
xor eax, edi |
xor ebx, ebp |
mov ecx, [esp+0D4h] |
mov edx, [esp+0CCh] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+2004h] |
xor eax, edi |
mov ecx, [esp+0C4h] |
mov edi, [esi+edx+2800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+2804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+0FCh] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp+30h], eax |
mov [esp+34h], ebx |
mov eax, [esp+78h] |
mov ebx, [esp+7Ch] |
mov ecx, [esp+0F8h] |
mov edx, [esp+0F0h] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+4] |
xor eax, edi |
mov ecx, [esp+0E8h] |
mov edi, [esi+edx+800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+0E0h] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+1000h] |
mov ebp, [esi+ecx+1004h] |
xor eax, edi |
mov edi, [esi+edx*8+1800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+1804h] |
xor eax, edi |
xor ebx, ebp |
mov ecx, [esp+0DCh] |
mov edx, [esp+0D4h] |
and ecx, 0FFh |
shr edx, 5 |
mov edi, [esi+ecx*8+2000h] |
and edx, 7F8h |
mov ebp, [esi+ecx*8+2004h] |
xor eax, edi |
mov ecx, [esp+0CCh] |
mov edi, [esi+edx+2800h] |
xor ebx, ebp |
shr ecx, 0Dh |
mov ebp, [esi+edx+2804h] |
and ecx, 7F8h |
xor eax, edi |
mov edx, [esp+0C4h] |
xor ebx, ebp |
shr edx, 18h |
mov edi, [esi+ecx+3000h] |
mov ebp, [esi+ecx+3004h] |
xor eax, edi |
mov edi, [esi+edx*8+3800h] |
xor ebx, ebp |
mov ebp, [esi+edx*8+3804h] |
xor eax, edi |
xor ebx, ebp |
mov [esp+38h], eax |
mov [esp+3Ch], ebx |
mov ebp, [esp+108h] |
add ebp, 10h |
cmp ebp, 50h |
jnz @@_loop_start |
mov ebp, [esp+114h] |
mov edi, [esp+110h] |
mov esi, [esp+10Ch] |
mov eax, [esp] |
mov ebx, [esp+4] |
mov ecx, [edi] |
mov edx, [edi+4] |
xor eax, ecx |
xor ebx, edx |
mov ecx, [esi] |
mov edx, [esi+4] |
xor eax, ecx |
xor ebx, edx |
mov [esi], eax |
mov [esi+4], ebx |
mov eax, [esp+8] |
mov ebx, [esp+0Ch] |
mov ecx, [edi+8] |
mov edx, [edi+0Ch] |
xor eax, ecx |
xor ebx, edx |
mov ecx, [esi+8] |
mov edx, [esi+0Ch] |
xor eax, ecx |
xor ebx, edx |
mov [esi+8], eax |
mov [esi+0Ch], ebx |
mov eax, [esp+10h] |
mov ebx, [esp+14h] |
mov ecx, [edi+10h] |
mov edx, [edi+14h] |
xor eax, ecx |
xor ebx, edx |
mov ecx, [esi+10h] |
mov edx, [esi+14h] |
xor eax, ecx |
xor ebx, edx |
mov [esi+10h], eax |
mov [esi+14h], ebx |
mov eax, [esp+18h] |
mov ebx, [esp+1Ch] |
mov ecx, [edi+18h] |
mov edx, [edi+1Ch] |
xor eax, ecx |
xor ebx, edx |
mov ecx, [esi+18h] |
mov edx, [esi+1Ch] |
xor eax, ecx |
xor ebx, edx |
mov [esi+18h], eax |
mov [esi+1Ch], ebx |
mov eax, [esp+20h] |
mov ebx, [esp+24h] |
mov ecx, [edi+20h] |
mov edx, [edi+24h] |
xor eax, ecx |
xor ebx, edx |
mov ecx, [esi+20h] |
mov edx, [esi+24h] |
xor eax, ecx |
xor ebx, edx |
mov [esi+20h], eax |
mov [esi+24h], ebx |
mov eax, [esp+28h] |
mov ebx, [esp+2Ch] |
mov ecx, [edi+28h] |
mov edx, [edi+2Ch] |
xor eax, ecx |
xor ebx, edx |
mov ecx, [esi+28h] |
mov edx, [esi+2Ch] |
xor eax, ecx |
xor ebx, edx |
mov [esi+28h], eax |
mov [esi+2Ch], ebx |
mov eax, [esp+30h] |
mov ebx, [esp+34h] |
mov ecx, [edi+30h] |
mov edx, [edi+34h] |
xor eax, ecx |
xor ebx, edx |
mov ecx, [esi+30h] |
mov edx, [esi+34h] |
xor eax, ecx |
xor ebx, edx |
mov [esi+30h], eax |
mov [esi+34h], ebx |
mov eax, [esp+38h] |
mov ebx, [esp+3Ch] |
mov ecx, [edi+38h] |
mov edx, [edi+3Ch] |
xor eax, ecx |
xor ebx, edx |
mov ecx, [esi+38h] |
mov edx, [esi+3Ch] |
xor eax, ecx |
xor ebx, edx |
mov [esi+38h], eax |
mov [esi+3Ch], ebx |
mov esp, ebp |
pop ebp |
pop edi |
pop esi |
pop ebx |
end; |
{$ENDIF} |
{$IFDEF THash_Square_asm} |
procedure THash_Square.DoTransform(Buffer: PUInt32Array); |
asm |
push ebx |
push esi |
push edi |
mov esi, edx |
lea edi, [eax].THash_Square.FDigest |
push ebp |
lea eax, Square_PHIr |
lea edx, Square_TE |
lea ecx, Square_SEint |
mov ebp, esp |
add esp, 0FFFFFF58h |
and esp, 0FFFFFFE0h |
mov [esp+90h], edi |
mov [esp+94h], esi |
mov [esp+98h], eax |
mov [esp+9Ch], edx |
mov [esp+0A0h], ecx |
mov [esp+0A4h], ebp |
mov ecx, [edi] |
mov edx, [edi+4] |
mov [esp], ecx |
mov esi, eax |
mov [esp+4], edx |
mov ebp, [edi+8] |
mov edi, [edi+0Ch] |
mov [esp+8], ebp |
mov [esp+0Ch], edi |
mov eax, ecx |
mov ebx, edx |
mov ecx, ebp |
mov ebp, edi |
xor eax, 1 |
ror ebp, 8 |
xor eax, ebp |
mov ebp, 0FFh |
xor ebx, eax |
mov [esp+10h], eax |
mov eax, [esp] |
xor ecx, ebx |
mov [esp+14h], ebx |
xor edi, ecx |
mov [esp+18h], ecx |
mov [esp+1Ch], edi |
mov edx, eax |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
and ecx, ebp |
mov ebx, [esi+ebx*4] |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
mov eax, [esp+4] |
xor ebx, edx |
mov edx, eax |
mov [esp], ebx |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
and ecx, ebp |
mov ebx, [esi+ebx*4] |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
mov eax, [esp+8] |
xor ebx, edx |
mov edx, eax |
mov [esp+4], ebx |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
and ecx, ebp |
mov ebx, [esi+ebx*4] |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
mov eax, [esp+0Ch] |
xor ebx, edx |
mov edx, eax |
mov [esp+8], ebx |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
mov ebx, [esi+ebx*4] |
and ecx, ebp |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
xor ebx, edx |
mov [esp+0Ch], ebx |
mov eax, [esp+10h] |
mov ebx, [esp+14h] |
mov ecx, [esp+18h] |
mov ebp, [esp+1Ch] |
xor eax, 2 |
mov edi, ebp |
ror ebp, 8 |
xor eax, ebp |
mov ebp, 0FFh |
xor ebx, eax |
mov [esp+20h], eax |
mov eax, [esp+10h] |
xor ecx, ebx |
mov [esp+24h], ebx |
xor edi, ecx |
mov [esp+28h], ecx |
mov [esp+2Ch], edi |
mov edx, eax |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
and ecx, ebp |
mov ebx, [esi+ebx*4] |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
mov eax, [esp+14h] |
xor ebx, edx |
mov edx, eax |
mov [esp+10h], ebx |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
and ecx, ebp |
mov ebx, [esi+ebx*4] |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
mov eax, [esp+18h] |
xor ebx, edx |
mov edx, eax |
mov [esp+14h], ebx |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
and ecx, ebp |
mov ebx, [esi+ebx*4] |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
mov eax, [esp+1Ch] |
xor ebx, edx |
mov edx, eax |
mov [esp+18h], ebx |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
mov ebx, [esi+ebx*4] |
and ecx, ebp |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
xor ebx, edx |
mov [esp+1Ch], ebx |
mov eax, [esp+20h] |
mov ebx, [esp+24h] |
mov ecx, [esp+28h] |
mov ebp, [esp+2Ch] |
xor eax, 4 |
mov edi, ebp |
ror ebp, 8 |
xor eax, ebp |
mov ebp, 0FFh |
xor ebx, eax |
mov [esp+30h], eax |
mov eax, [esp+20h] |
xor ecx, ebx |
mov [esp+34h], ebx |
xor edi, ecx |
mov [esp+38h], ecx |
mov [esp+3Ch], edi |
mov edx, eax |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
and ecx, ebp |
mov ebx, [esi+ebx*4] |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
mov eax, [esp+24h] |
xor ebx, edx |
mov edx, eax |
mov [esp+20h], ebx |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
and ecx, ebp |
mov ebx, [esi+ebx*4] |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
mov eax, [esp+28h] |
xor ebx, edx |
mov edx, eax |
mov [esp+24h], ebx |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
and ecx, ebp |
mov ebx, [esi+ebx*4] |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
mov eax, [esp+2Ch] |
xor ebx, edx |
mov edx, eax |
mov [esp+28h], ebx |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
mov ebx, [esi+ebx*4] |
and ecx, ebp |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
xor ebx, edx |
mov [esp+2Ch], ebx |
mov eax, [esp+30h] |
mov ebx, [esp+34h] |
mov ecx, [esp+38h] |
mov ebp, [esp+3Ch] |
xor eax, 8 |
mov edi, ebp |
ror ebp, 8 |
xor eax, ebp |
mov ebp, 0FFh |
xor ebx, eax |
mov [esp+40h], eax |
mov eax, [esp+30h] |
xor ecx, ebx |
mov [esp+44h], ebx |
xor edi, ecx |
mov [esp+48h], ecx |
mov [esp+4Ch], edi |
mov edx, eax |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
and ecx, ebp |
mov ebx, [esi+ebx*4] |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
mov eax, [esp+34h] |
xor ebx, edx |
mov edx, eax |
mov [esp+30h], ebx |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
and ecx, ebp |
mov ebx, [esi+ebx*4] |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
mov eax, [esp+38h] |
xor ebx, edx |
mov edx, eax |
mov [esp+34h], ebx |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
and ecx, ebp |
mov ebx, [esi+ebx*4] |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
mov eax, [esp+3Ch] |
xor ebx, edx |
mov edx, eax |
mov [esp+38h], ebx |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
mov ebx, [esi+ebx*4] |
and ecx, ebp |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
xor ebx, edx |
mov [esp+3Ch], ebx |
mov eax, [esp+40h] |
mov ebx, [esp+44h] |
mov ecx, [esp+48h] |
mov ebp, [esp+4Ch] |
xor eax, 10h |
mov edi, ebp |
ror ebp, 8 |
xor eax, ebp |
mov ebp, 0FFh |
xor ebx, eax |
mov [esp+50h], eax |
mov eax, [esp+40h] |
xor ecx, ebx |
mov [esp+54h], ebx |
xor edi, ecx |
mov [esp+58h], ecx |
mov [esp+5Ch], edi |
mov edx, eax |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
and ecx, ebp |
mov ebx, [esi+ebx*4] |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
mov eax, [esp+44h] |
xor ebx, edx |
mov edx, eax |
mov [esp+40h], ebx |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
and ecx, ebp |
mov ebx, [esi+ebx*4] |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
mov eax, [esp+48h] |
xor ebx, edx |
mov edx, eax |
mov [esp+44h], ebx |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
and ecx, ebp |
mov ebx, [esi+ebx*4] |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
mov eax, [esp+4Ch] |
xor ebx, edx |
mov edx, eax |
mov [esp+48h], ebx |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
mov ebx, [esi+ebx*4] |
and ecx, ebp |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
xor ebx, edx |
mov [esp+4Ch], ebx |
mov eax, [esp+50h] |
mov ebx, [esp+54h] |
mov ecx, [esp+58h] |
mov ebp, [esp+5Ch] |
xor eax, 20h |
mov edi, ebp |
ror ebp, 8 |
xor eax, ebp |
mov ebp, 0FFh |
xor ebx, eax |
mov [esp+60h], eax |
mov eax, [esp+50h] |
xor ecx, ebx |
mov [esp+64h], ebx |
xor edi, ecx |
mov [esp+68h], ecx |
mov [esp+6Ch], edi |
mov edx, eax |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
and ecx, ebp |
mov ebx, [esi+ebx*4] |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
mov eax, [esp+54h] |
xor ebx, edx |
mov edx, eax |
mov [esp+50h], ebx |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
and ecx, ebp |
mov ebx, [esi+ebx*4] |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
mov eax, [esp+58h] |
xor ebx, edx |
mov edx, eax |
mov [esp+54h], ebx |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
and ecx, ebp |
mov ebx, [esi+ebx*4] |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
mov eax, [esp+5Ch] |
xor ebx, edx |
mov edx, eax |
mov [esp+58h], ebx |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
mov ebx, [esi+ebx*4] |
and ecx, ebp |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
xor ebx, edx |
mov [esp+5Ch], ebx |
mov eax, [esp+60h] |
mov ebx, [esp+64h] |
mov ecx, [esp+68h] |
mov ebp, [esp+6Ch] |
xor eax, 40h |
mov edi, ebp |
ror ebp, 8 |
xor eax, ebp |
mov ebp, 0FFh |
xor ebx, eax |
mov [esp+70h], eax |
mov eax, [esp+60h] |
xor ecx, ebx |
mov [esp+74h], ebx |
xor edi, ecx |
mov [esp+78h], ecx |
mov [esp+7Ch], edi |
mov edx, eax |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
and ecx, ebp |
mov ebx, [esi+ebx*4] |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
mov eax, [esp+64h] |
xor ebx, edx |
mov edx, eax |
mov [esp+60h], ebx |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
and ecx, ebp |
mov ebx, [esi+ebx*4] |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
mov eax, [esp+68h] |
xor ebx, edx |
mov edx, eax |
mov [esp+64h], ebx |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
and ecx, ebp |
mov ebx, [esi+ebx*4] |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
mov eax, [esp+6Ch] |
xor ebx, edx |
mov edx, eax |
mov [esp+68h], ebx |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
mov ebx, [esi+ebx*4] |
and ecx, ebp |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
xor ebx, edx |
mov [esp+6Ch], ebx |
mov eax, [esp+70h] |
mov ebx, [esp+74h] |
mov ecx, [esp+78h] |
mov ebp, [esp+7Ch] |
xor eax, 80h |
mov edi, ebp |
ror ebp, 8 |
xor eax, ebp |
mov ebp, 0FFh |
xor ebx, eax |
mov [esp+80h], eax |
mov eax, [esp+70h] |
xor ecx, ebx |
mov [esp+84h], ebx |
xor edi, ecx |
mov [esp+88h], ecx |
mov [esp+8Ch], edi |
mov edx, eax |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
and ecx, ebp |
mov ebx, [esi+ebx*4] |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
mov eax, [esp+74h] |
xor ebx, edx |
mov edx, eax |
mov [esp+70h], ebx |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
and ecx, ebp |
mov ebx, [esi+ebx*4] |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
mov eax, [esp+78h] |
xor ebx, edx |
mov edx, eax |
mov [esp+74h], ebx |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
and ecx, ebp |
mov ebx, [esi+ebx*4] |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
mov eax, [esp+7Ch] |
xor ebx, edx |
mov edx, eax |
mov [esp+78h], ebx |
mov ebx, eax |
mov ecx, eax |
shr eax, 8 |
and ebx, ebp |
shr ecx, 10h |
and eax, ebp |
mov ebx, [esi+ebx*4] |
and ecx, ebp |
shr edx, 18h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esi+ecx*4+800h] |
xor ebx, eax |
mov edx, [esi+edx*4+0C00h] |
xor ebx, ecx |
xor ebx, edx |
mov [esp+7Ch], ebx |
mov esi, [esp+94h] |
mov eax, [esp] |
mov ebx, [esp+4] |
mov ecx, [esp+8] |
mov edx, [esp+0Ch] |
mov edi, [esi] |
mov ebp, [esi+4] |
xor eax, edi |
xor ebx, ebp |
mov edi, [esi+8] |
mov ebp, [esi+0Ch] |
mov [esp], eax |
mov [esp+4], ebx |
xor ecx, edi |
xor edx, ebp |
mov [esp+8], ecx |
mov [esp+0Ch], edx |
mov esi, [esp+9Ch] |
mov eax, [esp] |
mov ecx, [esp+4] |
mov ebx, eax |
mov edx, ecx |
shr eax, 8 |
mov edi, [esp+8] |
and ebx, 0FFh |
mov ebp, [esp+0Ch] |
shr ecx, 8 |
and eax, 0FFh |
and edx, 0FFh |
and ecx, 0FFh |
mov ebx, [esi+ebx*4] |
mov eax, [esi+eax*4] |
mov edx, [esi+edx*4+400h] |
mov ecx, [esi+ecx*4+400h] |
xor ebx, edx |
mov edx, edi |
shr edi, 8 |
xor eax, ecx |
mov ecx, ebp |
and edx, 0FFh |
shr ebp, 8 |
and edi, 0FFh |
and ecx, 0FFh |
mov edx, [esi+edx*4+800h] |
and ebp, 0FFh |
mov edi, [esi+edi*4+800h] |
xor ebx, edx |
mov edx, [esp+10h] |
mov ecx, [esi+ecx*4+0C00h] |
xor eax, edi |
xor ebx, ecx |
mov ecx, [esp+14h] |
xor ebx, edx |
xor eax, ecx |
mov ebp, [esi+ebp*4+0C00h] |
mov [esp+10h], ebx |
xor eax, ebp |
mov [esp+14h], eax |
mov ecx, [esp] |
mov edx, [esp+4] |
mov edi, ecx |
shr ecx, 10h |
mov eax, [esp+8] |
mov ebp, edx |
mov ebx, [esp+0Ch] |
shr edx, 10h |
and ecx, 0FFh |
shr edi, 18h |
and edx, 0FFh |
shr ebp, 18h |
mov ecx, [esi+ecx*4] |
shr eax, 10h |
mov edi, [esi+edi*4] |
shr ebx, 10h |
mov edx, [esi+edx*4+400h] |
mov ebp, [esi+ebp*4+400h] |
xor ecx, edx |
mov edx, eax |
xor edi, ebp |
shr eax, 8 |
mov ebp, ebx |
and edx, 0FFh |
and ebx, 0FFh |
shr ebp, 8 |
mov eax, [esi+eax*4+800h] |
mov edx, [esi+edx*4+800h] |
xor edi, eax |
xor ecx, edx |
mov ebx, [esi+ebx*4+0C00h] |
mov ebp, [esi+ebp*4+0C00h] |
xor ecx, ebx |
xor edi, ebp |
mov eax, [esp+18h] |
mov ebx, [esp+1Ch] |
xor ecx, eax |
xor edi, ebx |
mov [esp+18h], ecx |
mov [esp+1Ch], edi |
mov eax, [esp+10h] |
mov ecx, [esp+14h] |
mov ebx, eax |
mov edx, ecx |
shr eax, 8 |
mov edi, [esp+18h] |
and ebx, 0FFh |
mov ebp, [esp+1Ch] |
shr ecx, 8 |
and eax, 0FFh |
and edx, 0FFh |
and ecx, 0FFh |
mov ebx, [esi+ebx*4] |
mov eax, [esi+eax*4] |
mov edx, [esi+edx*4+400h] |
mov ecx, [esi+ecx*4+400h] |
xor ebx, edx |
mov edx, edi |
shr edi, 8 |
xor eax, ecx |
mov ecx, ebp |
and edx, 0FFh |
shr ebp, 8 |
and edi, 0FFh |
and ecx, 0FFh |
mov edx, [esi+edx*4+800h] |
and ebp, 0FFh |
mov edi, [esi+edi*4+800h] |
xor ebx, edx |
mov edx, [esp+20h] |
mov ecx, [esi+ecx*4+0C00h] |
xor eax, edi |
xor ebx, ecx |
mov ecx, [esp+24h] |
xor ebx, edx |
xor eax, ecx |
mov ebp, [esi+ebp*4+0C00h] |
mov [esp+20h], ebx |
xor eax, ebp |
mov [esp+24h], eax |
mov ecx, [esp+10h] |
mov edx, [esp+14h] |
mov edi, ecx |
shr ecx, 10h |
mov eax, [esp+18h] |
mov ebp, edx |
mov ebx, [esp+1Ch] |
shr edx, 10h |
and ecx, 0FFh |
shr edi, 18h |
and edx, 0FFh |
shr ebp, 18h |
mov ecx, [esi+ecx*4] |
shr eax, 10h |
mov edi, [esi+edi*4] |
shr ebx, 10h |
mov edx, [esi+edx*4+400h] |
mov ebp, [esi+ebp*4+400h] |
xor ecx, edx |
mov edx, eax |
xor edi, ebp |
shr eax, 8 |
mov ebp, ebx |
and edx, 0FFh |
and ebx, 0FFh |
shr ebp, 8 |
mov eax, [esi+eax*4+800h] |
mov edx, [esi+edx*4+800h] |
xor edi, eax |
xor ecx, edx |
mov ebx, [esi+ebx*4+0C00h] |
mov ebp, [esi+ebp*4+0C00h] |
xor ecx, ebx |
xor edi, ebp |
mov eax, [esp+28h] |
mov ebx, [esp+2Ch] |
xor ecx, eax |
xor edi, ebx |
mov [esp+28h], ecx |
mov [esp+2Ch], edi |
mov eax, [esp+20h] |
mov ecx, [esp+24h] |
mov ebx, eax |
mov edx, ecx |
shr eax, 8 |
mov edi, [esp+28h] |
and ebx, 0FFh |
mov ebp, [esp+2Ch] |
shr ecx, 8 |
and eax, 0FFh |
and edx, 0FFh |
and ecx, 0FFh |
mov ebx, [esi+ebx*4] |
mov eax, [esi+eax*4] |
mov edx, [esi+edx*4+400h] |
mov ecx, [esi+ecx*4+400h] |
xor ebx, edx |
mov edx, edi |
shr edi, 8 |
xor eax, ecx |
mov ecx, ebp |
and edx, 0FFh |
shr ebp, 8 |
and edi, 0FFh |
and ecx, 0FFh |
mov edx, [esi+edx*4+800h] |
and ebp, 0FFh |
mov edi, [esi+edi*4+800h] |
xor ebx, edx |
mov edx, [esp+30h] |
mov ecx, [esi+ecx*4+0C00h] |
xor eax, edi |
xor ebx, ecx |
mov ecx, [esp+34h] |
xor ebx, edx |
xor eax, ecx |
mov ebp, [esi+ebp*4+0C00h] |
mov [esp+30h], ebx |
xor eax, ebp |
mov [esp+34h], eax |
mov ecx, [esp+20h] |
mov edx, [esp+24h] |
mov edi, ecx |
shr ecx, 10h |
mov eax, [esp+28h] |
mov ebp, edx |
mov ebx, [esp+2Ch] |
shr edx, 10h |
and ecx, 0FFh |
shr edi, 18h |
and edx, 0FFh |
shr ebp, 18h |
mov ecx, [esi+ecx*4] |
shr eax, 10h |
mov edi, [esi+edi*4] |
shr ebx, 10h |
mov edx, [esi+edx*4+400h] |
mov ebp, [esi+ebp*4+400h] |
xor ecx, edx |
mov edx, eax |
xor edi, ebp |
shr eax, 8 |
mov ebp, ebx |
and edx, 0FFh |
and ebx, 0FFh |
shr ebp, 8 |
mov eax, [esi+eax*4+800h] |
mov edx, [esi+edx*4+800h] |
xor edi, eax |
xor ecx, edx |
mov ebx, [esi+ebx*4+0C00h] |
mov ebp, [esi+ebp*4+0C00h] |
xor ecx, ebx |
xor edi, ebp |
mov eax, [esp+38h] |
mov ebx, [esp+3Ch] |
xor ecx, eax |
xor edi, ebx |
mov [esp+38h], ecx |
mov [esp+3Ch], edi |
mov eax, [esp+30h] |
mov ecx, [esp+34h] |
mov ebx, eax |
mov edx, ecx |
shr eax, 8 |
mov edi, [esp+38h] |
and ebx, 0FFh |
mov ebp, [esp+3Ch] |
shr ecx, 8 |
and eax, 0FFh |
and edx, 0FFh |
and ecx, 0FFh |
mov ebx, [esi+ebx*4] |
mov eax, [esi+eax*4] |
mov edx, [esi+edx*4+400h] |
mov ecx, [esi+ecx*4+400h] |
xor ebx, edx |
mov edx, edi |
shr edi, 8 |
xor eax, ecx |
mov ecx, ebp |
and edx, 0FFh |
shr ebp, 8 |
and edi, 0FFh |
and ecx, 0FFh |
mov edx, [esi+edx*4+800h] |
and ebp, 0FFh |
mov edi, [esi+edi*4+800h] |
xor ebx, edx |
mov edx, [esp+40h] |
mov ecx, [esi+ecx*4+0C00h] |
xor eax, edi |
xor ebx, ecx |
mov ecx, [esp+44h] |
xor ebx, edx |
xor eax, ecx |
mov ebp, [esi+ebp*4+0C00h] |
mov [esp+40h], ebx |
xor eax, ebp |
mov [esp+44h], eax |
mov ecx, [esp+30h] |
mov edx, [esp+34h] |
mov edi, ecx |
shr ecx, 10h |
mov eax, [esp+38h] |
mov ebp, edx |
mov ebx, [esp+3Ch] |
shr edx, 10h |
and ecx, 0FFh |
shr edi, 18h |
and edx, 0FFh |
shr ebp, 18h |
mov ecx, [esi+ecx*4] |
shr eax, 10h |
mov edi, [esi+edi*4] |
shr ebx, 10h |
mov edx, [esi+edx*4+400h] |
mov ebp, [esi+ebp*4+400h] |
xor ecx, edx |
mov edx, eax |
xor edi, ebp |
shr eax, 8 |
mov ebp, ebx |
and edx, 0FFh |
and ebx, 0FFh |
shr ebp, 8 |
mov eax, [esi+eax*4+800h] |
mov edx, [esi+edx*4+800h] |
xor edi, eax |
xor ecx, edx |
mov ebx, [esi+ebx*4+0C00h] |
mov ebp, [esi+ebp*4+0C00h] |
xor ecx, ebx |
xor edi, ebp |
mov eax, [esp+48h] |
mov ebx, [esp+4Ch] |
xor ecx, eax |
xor edi, ebx |
mov [esp+48h], ecx |
mov [esp+4Ch], edi |
mov eax, [esp+40h] |
mov ecx, [esp+44h] |
mov ebx, eax |
mov edx, ecx |
shr eax, 8 |
mov edi, [esp+48h] |
and ebx, 0FFh |
mov ebp, [esp+4Ch] |
shr ecx, 8 |
and eax, 0FFh |
and edx, 0FFh |
and ecx, 0FFh |
mov ebx, [esi+ebx*4] |
mov eax, [esi+eax*4] |
mov edx, [esi+edx*4+400h] |
mov ecx, [esi+ecx*4+400h] |
xor ebx, edx |
mov edx, edi |
shr edi, 8 |
xor eax, ecx |
mov ecx, ebp |
and edx, 0FFh |
shr ebp, 8 |
and edi, 0FFh |
and ecx, 0FFh |
mov edx, [esi+edx*4+800h] |
and ebp, 0FFh |
mov edi, [esi+edi*4+800h] |
xor ebx, edx |
mov edx, [esp+50h] |
mov ecx, [esi+ecx*4+0C00h] |
xor eax, edi |
xor ebx, ecx |
mov ecx, [esp+54h] |
xor ebx, edx |
xor eax, ecx |
mov ebp, [esi+ebp*4+0C00h] |
mov [esp+50h], ebx |
xor eax, ebp |
mov [esp+54h], eax |
mov ecx, [esp+40h] |
mov edx, [esp+44h] |
mov edi, ecx |
shr ecx, 10h |
mov eax, [esp+48h] |
mov ebp, edx |
mov ebx, [esp+4Ch] |
shr edx, 10h |
and ecx, 0FFh |
shr edi, 18h |
and edx, 0FFh |
shr ebp, 18h |
mov ecx, [esi+ecx*4] |
shr eax, 10h |
mov edi, [esi+edi*4] |
shr ebx, 10h |
mov edx, [esi+edx*4+400h] |
mov ebp, [esi+ebp*4+400h] |
xor ecx, edx |
mov edx, eax |
xor edi, ebp |
shr eax, 8 |
mov ebp, ebx |
and edx, 0FFh |
and ebx, 0FFh |
shr ebp, 8 |
mov eax, [esi+eax*4+800h] |
mov edx, [esi+edx*4+800h] |
xor edi, eax |
xor ecx, edx |
mov ebx, [esi+ebx*4+0C00h] |
mov ebp, [esi+ebp*4+0C00h] |
xor ecx, ebx |
xor edi, ebp |
mov eax, [esp+58h] |
mov ebx, [esp+5Ch] |
xor ecx, eax |
xor edi, ebx |
mov [esp+58h], ecx |
mov [esp+5Ch], edi |
mov eax, [esp+50h] |
mov ecx, [esp+54h] |
mov ebx, eax |
mov edx, ecx |
shr eax, 8 |
mov edi, [esp+58h] |
and ebx, 0FFh |
mov ebp, [esp+5Ch] |
shr ecx, 8 |
and eax, 0FFh |
and edx, 0FFh |
and ecx, 0FFh |
mov ebx, [esi+ebx*4] |
mov eax, [esi+eax*4] |
mov edx, [esi+edx*4+400h] |
mov ecx, [esi+ecx*4+400h] |
xor ebx, edx |
mov edx, edi |
shr edi, 8 |
xor eax, ecx |
mov ecx, ebp |
and edx, 0FFh |
shr ebp, 8 |
and edi, 0FFh |
and ecx, 0FFh |
mov edx, [esi+edx*4+800h] |
and ebp, 0FFh |
mov edi, [esi+edi*4+800h] |
xor ebx, edx |
mov edx, [esp+60h] |
mov ecx, [esi+ecx*4+0C00h] |
xor eax, edi |
xor ebx, ecx |
mov ecx, [esp+64h] |
xor ebx, edx |
xor eax, ecx |
mov ebp, [esi+ebp*4+0C00h] |
mov [esp+60h], ebx |
xor eax, ebp |
mov [esp+64h], eax |
mov ecx, [esp+50h] |
mov edx, [esp+54h] |
mov edi, ecx |
shr ecx, 10h |
mov eax, [esp+58h] |
mov ebp, edx |
mov ebx, [esp+5Ch] |
shr edx, 10h |
and ecx, 0FFh |
shr edi, 18h |
and edx, 0FFh |
shr ebp, 18h |
mov ecx, [esi+ecx*4] |
shr eax, 10h |
mov edi, [esi+edi*4] |
shr ebx, 10h |
mov edx, [esi+edx*4+400h] |
mov ebp, [esi+ebp*4+400h] |
xor ecx, edx |
mov edx, eax |
xor edi, ebp |
shr eax, 8 |
mov ebp, ebx |
and edx, 0FFh |
and ebx, 0FFh |
shr ebp, 8 |
mov eax, [esi+eax*4+800h] |
mov edx, [esi+edx*4+800h] |
xor edi, eax |
xor ecx, edx |
mov ebx, [esi+ebx*4+0C00h] |
mov ebp, [esi+ebp*4+0C00h] |
xor ecx, ebx |
xor edi, ebp |
mov eax, [esp+68h] |
mov ebx, [esp+6Ch] |
xor ecx, eax |
xor edi, ebx |
mov [esp+68h], ecx |
mov [esp+6Ch], edi |
mov eax, [esp+60h] |
mov ecx, [esp+64h] |
mov ebx, eax |
mov edx, ecx |
shr eax, 8 |
mov edi, [esp+68h] |
and ebx, 0FFh |
mov ebp, [esp+6Ch] |
shr ecx, 8 |
and eax, 0FFh |
and edx, 0FFh |
and ecx, 0FFh |
mov ebx, [esi+ebx*4] |
mov eax, [esi+eax*4] |
mov edx, [esi+edx*4+400h] |
mov ecx, [esi+ecx*4+400h] |
xor ebx, edx |
mov edx, edi |
shr edi, 8 |
xor eax, ecx |
mov ecx, ebp |
and edx, 0FFh |
shr ebp, 8 |
and edi, 0FFh |
and ecx, 0FFh |
mov edx, [esi+edx*4+800h] |
and ebp, 0FFh |
mov edi, [esi+edi*4+800h] |
xor ebx, edx |
mov edx, [esp+70h] |
mov ecx, [esi+ecx*4+0C00h] |
xor eax, edi |
xor ebx, ecx |
mov ecx, [esp+74h] |
xor ebx, edx |
xor eax, ecx |
mov ebp, [esi+ebp*4+0C00h] |
mov [esp+70h], ebx |
xor eax, ebp |
mov [esp+74h], eax |
mov ecx, [esp+60h] |
mov edx, [esp+64h] |
mov edi, ecx |
shr ecx, 10h |
mov eax, [esp+68h] |
mov ebp, edx |
mov ebx, [esp+6Ch] |
shr edx, 10h |
and ecx, 0FFh |
shr edi, 18h |
and edx, 0FFh |
shr ebp, 18h |
mov ecx, [esi+ecx*4] |
shr eax, 10h |
mov edi, [esi+edi*4] |
shr ebx, 10h |
mov edx, [esi+edx*4+400h] |
mov ebp, [esi+ebp*4+400h] |
xor ecx, edx |
mov edx, eax |
xor edi, ebp |
shr eax, 8 |
mov ebp, ebx |
and edx, 0FFh |
and ebx, 0FFh |
shr ebp, 8 |
mov eax, [esi+eax*4+800h] |
mov edx, [esi+edx*4+800h] |
xor edi, eax |
xor ecx, edx |
mov ebx, [esi+ebx*4+0C00h] |
mov ebp, [esi+ebp*4+0C00h] |
xor ecx, ebx |
xor edi, ebp |
mov eax, [esp+78h] |
mov ebx, [esp+7Ch] |
xor ecx, eax |
xor edi, ebx |
mov [esp+78h], ecx |
mov [esp+7Ch], edi |
mov esi, [esp+0A0h] |
mov eax, [esp+70h] |
mov ebx, [esp+74h] |
mov ecx, eax |
mov edi, [esp+78h] |
shr eax, 8 |
mov ebp, [esp+7Ch] |
mov edx, ebx |
and ecx, 0FFh |
and eax, 0FFh |
shr ebx, 8 |
and edx, 0FFh |
and ebx, 0FFh |
mov ecx, [esi+ecx*4] |
mov edx, [esi+edx*4] |
mov eax, [esi+eax*4] |
shl edx, 8 |
mov ebx, [esi+ebx*4] |
shl ebx, 8 |
xor ecx, edx |
mov edx, edi |
xor eax, ebx |
shr edi, 8 |
mov ebx, ebp |
shr ebp, 8 |
and edx, 0FFh |
and edi, 0FFh |
and ebx, 0FFh |
and ebp, 0FFh |
mov edx, [esi+edx*4] |
mov edi, [esi+edi*4] |
mov ebx, [esi+ebx*4] |
shl edx, 10h |
mov ebp, [esi+ebp*4] |
shl edi, 10h |
xor ecx, edx |
shl ebx, 18h |
xor eax, edi |
shl ebp, 18h |
mov edx, [esp+94h] |
xor ecx, ebx |
xor eax, ebp |
mov ebx, [edx] |
mov ebp, [edx+4] |
mov edx, [esp+90h] |
xor ecx, ebx |
xor eax, ebp |
mov ebx, [esp+80h] |
mov ebp, [esp+84h] |
xor ecx, ebx |
xor eax, ebp |
mov [edx], ecx |
mov [edx+4], eax |
mov eax, [esp+70h] |
mov ebx, [esp+74h] |
mov ecx, eax |
shr eax, 10h |
mov edi, [esp+78h] |
mov ebp, [esp+7Ch] |
mov edx, ebx |
shr ebx, 10h |
and eax, 0FFh |
shr ecx, 18h |
and ebx, 0FFh |
shr edx, 18h |
mov eax, [esi+eax*4] |
mov ebx, [esi+ebx*4] |
mov ecx, [esi+ecx*4] |
shl ebx, 8 |
mov edx, [esi+edx*4] |
shl edx, 8 |
xor eax, ebx |
mov ebx, edi |
xor ecx, edx |
shr edi, 10h |
mov edx, ebp |
shr ebp, 10h |
and edi, 0FFh |
shr ebx, 18h |
and ebp, 0FFh |
shr edx, 18h |
mov edi, [esi+edi*4] |
mov ebx, [esi+ebx*4] |
mov ebp, [esi+ebp*4] |
shl edi, 10h |
mov edx, [esi+edx*4] |
shl ebp, 18h |
xor eax, edi |
shl ebx, 10h |
xor eax, ebp |
shl edx, 18h |
mov edi, [esp+94h] |
xor ecx, ebx |
mov ebx, [esp+88h] |
xor ecx, edx |
mov edx, [esp+8Ch] |
xor eax, ebx |
mov ebx, [edi+8] |
mov edi, [edi+0Ch] |
xor ecx, edx |
mov edx, [esp+90h] |
mov ebp, [esp+0A4h] |
xor eax, ebx |
mov esp, ebp |
xor ecx, edi |
mov [edx+8], eax |
mov [edx+0Ch], ecx |
pop ebp |
pop edi |
pop esi |
pop ebx |
end; |
{$ENDIF} |
{$IFDEF THash_Snefru128_asm} |
procedure THash_Snefru128.DoTransform(Buffer: PUInt32Array); |
begin |
SwapUInt32Buffer(Buffer[0], FDigest[4], 12); |
asm |
push ebx |
mov eax, Self |
push esi |
push edi |
lea edi, [eax].THash_Snefru128.FDigest |
push ebp |
lea esi, Snefru_Data |
mov ecx, [eax].THash_Snefru128.FRounds |
mov ebp, esp |
add esp, 0FFFFFF94h |
and esp, 0FFFFFFE0h |
mov [esp+60h], edi |
mov [esp+68h], ebp |
mov eax, [edi] |
mov ebx, [edi+4] |
mov ebp, [edi+8] |
mov edx, [edi+0Ch] |
mov [esp], eax |
mov [esp+4], ebx |
mov [esp+8], ebp |
mov [esp+0Ch], edx |
mov [esp+40h], eax |
mov [esp+44h], ebx |
mov [esp+48h], ebp |
mov [esp+4Ch], edx |
mov eax, [edi+10h] |
mov ebx, [edi+14h] |
mov ebp, [edi+18h] |
mov edx, [edi+1Ch] |
mov [esp+10h], eax |
mov [esp+14h], ebx |
mov [esp+18h], ebp |
mov [esp+1Ch], edx |
mov eax, [edi+20h] |
mov ebx, [edi+24h] |
mov ebp, [edi+28h] |
mov edx, [edi+2Ch] |
mov [esp+20h], eax |
mov [esp+24h], ebx |
mov [esp+28h], ebp |
mov [esp+2Ch], edx |
mov eax, [edi+30h] |
mov ebx, [edi+34h] |
mov ebp, [edi+38h] |
mov edx, [edi+3Ch] |
mov [esp+30h], eax |
mov [esp+34h], ebx |
mov [esp+38h], ebp |
mov [esp+3Ch], edx |
@@_level_loop: |
mov [esp+64h], ecx |
mov ebx, [esp] |
mov ecx, [esp+4] |
mov edi, ebx |
and ebx, 0FFh |
mov eax, [esp+3Ch] |
mov ebx, [esi+ebx*4] |
mov edx, [esp+8] |
xor ecx, ebx |
xor eax, ebx |
mov ebp, ecx |
and ecx, 0FFh |
mov [esp+3Ch], eax |
mov ecx, [esi+ecx*4] |
mov ebx, [esp+0Ch] |
xor edx, ecx |
xor edi, ecx |
mov ecx, edx |
and edx, 0FFh |
mov [esp], edi |
mov edx, [esi+edx*4+400h] |
mov edi, [esp+10h] |
xor ebx, edx |
xor ebp, edx |
mov edx, ebx |
and ebx, 0FFh |
ror ebp, 10h |
mov ebx, [esi+ebx*4+400h] |
mov eax, [esp+14h] |
mov [esp+4], ebp |
xor edi, ebx |
xor ecx, ebx |
mov ebx, edi |
and edi, 0FFh |
mov ebp, [esp+18h] |
ror ecx, 10h |
mov edi, [esi+edi*4] |
mov [esp+8], ecx |
xor eax, edi |
xor edx, edi |
mov edi, eax |
and eax, 0FFh |
ror edx, 10h |
mov eax, [esi+eax*4] |
mov ecx, [esp+1Ch] |
mov [esp+0Ch], edx |
xor ebp, eax |
xor ebx, eax |
mov eax, ebp |
and ebp, 0FFh |
mov edx, [esp+20h] |
ror ebx, 10h |
mov ebp, [esi+ebp*4+400h] |
mov [esp+10h], ebx |
xor ecx, ebp |
xor edi, ebp |
mov ebp, ecx |
and ecx, 0FFh |
ror edi, 10h |
mov ecx, [esi+ecx*4+400h] |
mov ebx, [esp+24h] |
mov [esp+14h], edi |
xor edx, ecx |
xor eax, ecx |
mov ecx, edx |
and edx, 0FFh |
mov edi, [esp+28h] |
ror eax, 10h |
mov edx, [esi+edx*4] |
mov [esp+18h], eax |
xor ebx, edx |
xor ebp, edx |
mov edx, ebx |
and ebx, 0FFh |
ror ebp, 10h |
mov ebx, [esi+ebx*4] |
mov eax, [esp+2Ch] |
mov [esp+1Ch], ebp |
xor edi, ebx |
xor ecx, ebx |
mov ebx, edi |
and edi, 0FFh |
mov ebp, [esp+30h] |
ror ecx, 10h |
mov edi, [esi+edi*4+400h] |
mov [esp+20h], ecx |
xor eax, edi |
xor edx, edi |
mov edi, eax |
and eax, 0FFh |
ror edx, 10h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esp+34h] |
mov [esp+24h], edx |
xor ebp, eax |
xor ebx, eax |
mov eax, ebp |
and ebp, 0FFh |
mov edx, [esp+38h] |
ror ebx, 10h |
mov ebp, [esi+ebp*4] |
mov [esp+28h], ebx |
xor ecx, ebp |
xor edi, ebp |
mov ebp, ecx |
and ecx, 0FFh |
ror edi, 10h |
mov ecx, [esi+ecx*4] |
mov ebx, [esp+3Ch] |
mov [esp+2Ch], edi |
xor edx, ecx |
xor eax, ecx |
mov ecx, edx |
and edx, 0FFh |
mov edi, [esp] |
ror eax, 10h |
mov edx, [esi+edx*4+400h] |
mov [esp+30h], eax |
xor ebx, edx |
xor ebp, edx |
mov edx, ebx |
and ebx, 0FFh |
ror ebp, 10h |
ror edx, 10h |
mov ebx, [esi+ebx*4+400h] |
mov [esp+34h], ebp |
xor edi, ebx |
xor ecx, ebx |
ror edi, 10h |
ror ecx, 10h |
mov [esp], edi |
mov [esp+38h], ecx |
mov [esp+3Ch], edx |
mov ebx, [esp] |
mov ecx, [esp+4] |
mov edi, ebx |
and ebx, 0FFh |
mov eax, [esp+3Ch] |
mov ebx, [esi+ebx*4] |
mov edx, [esp+8] |
xor ecx, ebx |
xor eax, ebx |
mov ebp, ecx |
and ecx, 0FFh |
mov [esp+3Ch], eax |
mov ecx, [esi+ecx*4] |
mov ebx, [esp+0Ch] |
xor edx, ecx |
xor edi, ecx |
mov ecx, edx |
and edx, 0FFh |
mov [esp], edi |
mov edx, [esi+edx*4+400h] |
mov edi, [esp+10h] |
xor ebx, edx |
xor ebp, edx |
mov edx, ebx |
and ebx, 0FFh |
ror ebp, 8 |
mov ebx, [esi+ebx*4+400h] |
mov eax, [esp+14h] |
mov [esp+4], ebp |
xor edi, ebx |
xor ecx, ebx |
mov ebx, edi |
and edi, 0FFh |
mov ebp, [esp+18h] |
ror ecx, 8 |
mov edi, [esi+edi*4] |
mov [esp+8], ecx |
xor eax, edi |
xor edx, edi |
mov edi, eax |
and eax, 0FFh |
ror edx, 8 |
mov eax, [esi+eax*4] |
mov ecx, [esp+1Ch] |
mov [esp+0Ch], edx |
xor ebp, eax |
xor ebx, eax |
mov eax, ebp |
and ebp, 0FFh |
mov edx, [esp+20h] |
ror ebx, 8 |
mov ebp, [esi+ebp*4+400h] |
mov [esp+10h], ebx |
xor ecx, ebp |
xor edi, ebp |
mov ebp, ecx |
and ecx, 0FFh |
ror edi, 8 |
mov ecx, [esi+ecx*4+400h] |
mov ebx, [esp+24h] |
mov [esp+14h], edi |
xor edx, ecx |
xor eax, ecx |
mov ecx, edx |
and edx, 0FFh |
mov edi, [esp+28h] |
ror eax, 8 |
mov edx, [esi+edx*4] |
mov [esp+18h], eax |
xor ebx, edx |
xor ebp, edx |
mov edx, ebx |
and ebx, 0FFh |
ror ebp, 8 |
mov ebx, [esi+ebx*4] |
mov eax, [esp+2Ch] |
mov [esp+1Ch], ebp |
xor edi, ebx |
xor ecx, ebx |
mov ebx, edi |
and edi, 0FFh |
mov ebp, [esp+30h] |
ror ecx, 8 |
mov edi, [esi+edi*4+400h] |
mov [esp+20h], ecx |
xor eax, edi |
xor edx, edi |
mov edi, eax |
and eax, 0FFh |
ror edx, 8 |
mov eax, [esi+eax*4+400h] |
mov ecx, [esp+34h] |
mov [esp+24h], edx |
xor ebp, eax |
xor ebx, eax |
mov eax, ebp |
and ebp, 0FFh |
mov edx, [esp+38h] |
ror ebx, 8 |
mov ebp, [esi+ebp*4] |
mov [esp+28h], ebx |
xor ecx, ebp |
xor edi, ebp |
mov ebp, ecx |
and ecx, 0FFh |
ror edi, 8 |
mov ecx, [esi+ecx*4] |
mov ebx, [esp+3Ch] |
mov [esp+2Ch], edi |
xor edx, ecx |
xor eax, ecx |
mov ecx, edx |
and edx, 0FFh |
mov edi, [esp] |
ror eax, 8 |
mov edx, [esi+edx*4+400h] |
mov [esp+30h], eax |
xor ebx, edx |
xor ebp, edx |
mov edx, ebx |
and ebx, 0FFh |
ror ebp, 8 |
ror edx, 8 |
mov ebx, [esi+ebx*4+400h] |
mov [esp+34h], ebp |
xor edi, ebx |
xor ecx, ebx |
ror edi, 8 |
ror ecx, 8 |
mov [esp], edi |
mov [esp+38h], ecx |
mov [esp+3Ch], edx |
mov ebx, [esp] |
mov ecx, [esp+4] |
mov edi, ebx |
and ebx, 0FFh |
mov eax, [esp+3Ch] |
mov ebx, [esi+ebx*4] |
mov edx, [esp+8] |
xor ecx, ebx |
xor eax, ebx |
mov ebp, ecx |
and ecx, 0FFh |
mov [esp+3Ch], eax |
mov ecx, [esi+ecx*4] |
mov ebx, [esp+0Ch] |
xor edx, ecx |
xor edi, ecx |
mov ecx, edx |
and edx, 0FFh |
mov [esp], edi |
mov edx, [esi+edx*4+400h] |
mov edi, [esp+10h] |
xor ebx, edx |
xor ebp, edx |
mov edx, ebx |
and ebx, 0FFh |
ror ebp, 10h |
mov ebx, [esi+ebx*4+400h] |
mov eax, [esp+14h] |
mov [esp+4], ebp |
xor edi, ebx |
xor ecx, ebx |
mov ebx, edi |
and edi, 0FFh |
mov ebp, [esp+18h] |
ror ecx, 10h |
mov edi, [esi+edi*4] |
mov [esp+8], ecx |
xor eax, edi |
xor edx, edi |
mov edi, eax |
and eax, 0FFh |
ror edx, 10h |
mov eax, [esi+eax*4] |
mov ecx, [esp+1Ch] |
mov [esp+0Ch], edx |
xor ebp, eax |
xor ebx, eax |
mov eax, ebp |
and ebp, 0FFh |
mov edx, [esp+20h] |
ror ebx, 10h |
mov ebp, [esi+ebp*4+400h] |
mov [esp+10h], ebx |
xor ecx, ebp |
xor edi, ebp |
mov ebp, ecx |
and ecx, 0FFh |
ror edi, 10h |
mov ecx, [esi+ecx*4+400h] |
mov ebx, [esp+24h] |
mov [esp+14h], edi |
xor edx, ecx |
xor eax, ecx |
mov ecx, edx |
and edx, 0FFh |
mov edi, [esp+28h] |
ror eax, 10h |
mov edx, [esi+edx*4] |
mov [esp+18h], eax |
xor ebx, edx |
xor ebp, edx |
mov edx, ebx |
and ebx, 0FFh |
ror ebp, 10h |
mov ebx, [esi+ebx*4] |
mov eax, [esp+2Ch] |
mov [esp+1Ch], ebp |
xor edi, ebx |
xor ecx, ebx |
mov ebx, edi |
and edi, 0FFh |
mov ebp, [esp+30h] |
ror ecx, 10h |
mov edi, [esi+edi*4+400h] |
mov [esp+20h], ecx |
xor eax, edi |
xor edx, edi |
mov edi, eax |
and eax, 0FFh |
ror edx, 10h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esp+34h] |
mov [esp+24h], edx |
xor ebp, eax |
xor ebx, eax |
mov eax, ebp |
and ebp, 0FFh |
mov edx, [esp+38h] |
ror ebx, 10h |
mov ebp, [esi+ebp*4] |
mov [esp+28h], ebx |
xor ecx, ebp |
xor edi, ebp |
mov ebp, ecx |
and ecx, 0FFh |
ror edi, 10h |
mov ecx, [esi+ecx*4] |
mov ebx, [esp+3Ch] |
mov [esp+2Ch], edi |
xor edx, ecx |
xor eax, ecx |
mov ecx, edx |
and edx, 0FFh |
mov edi, [esp] |
ror eax, 10h |
mov edx, [esi+edx*4+400h] |
mov [esp+30h], eax |
xor ebx, edx |
xor ebp, edx |
mov edx, ebx |
and ebx, 0FFh |
ror ebp, 10h |
ror edx, 10h |
mov ebx, [esi+ebx*4+400h] |
mov [esp+34h], ebp |
xor edi, ebx |
xor ecx, ebx |
ror edi, 10h |
ror ecx, 10h |
mov [esp], edi |
mov [esp+38h], ecx |
mov [esp+3Ch], edx |
mov ebx, [esp] |
mov ecx, [esp+4] |
mov edi, ebx |
and ebx, 0FFh |
mov eax, [esp+3Ch] |
mov ebx, [esi+ebx*4] |
mov edx, [esp+8] |
xor ecx, ebx |
xor eax, ebx |
mov ebp, ecx |
and ecx, 0FFh |
mov [esp+3Ch], eax |
mov ecx, [esi+ecx*4] |
mov ebx, [esp+0Ch] |
xor edx, ecx |
xor edi, ecx |
mov ecx, edx |
and edx, 0FFh |
mov [esp], edi |
mov edx, [esi+edx*4+400h] |
mov edi, [esp+10h] |
xor ebx, edx |
xor ebp, edx |
mov edx, ebx |
and ebx, 0FFh |
rol ebp, 8 |
mov ebx, [esi+ebx*4+400h] |
mov eax, [esp+14h] |
mov [esp+4], ebp |
xor edi, ebx |
xor ecx, ebx |
mov ebx, edi |
and edi, 0FFh |
mov ebp, [esp+18h] |
rol ecx, 8 |
mov edi, [esi+edi*4] |
mov [esp+8], ecx |
xor eax, edi |
xor edx, edi |
mov edi, eax |
and eax, 0FFh |
rol edx, 8 |
mov eax, [esi+eax*4] |
mov ecx, [esp+1Ch] |
mov [esp+0Ch], edx |
xor ebp, eax |
xor ebx, eax |
mov eax, ebp |
and ebp, 0FFh |
mov edx, [esp+20h] |
rol ebx, 8 |
mov ebp, [esi+ebp*4+400h] |
mov [esp+10h], ebx |
xor ecx, ebp |
xor edi, ebp |
mov ebp, ecx |
and ecx, 0FFh |
rol edi, 8 |
mov ecx, [esi+ecx*4+400h] |
mov ebx, [esp+24h] |
mov [esp+14h], edi |
xor edx, ecx |
xor eax, ecx |
mov ecx, edx |
and edx, 0FFh |
mov edi, [esp+28h] |
rol eax, 8 |
mov edx, [esi+edx*4] |
mov [esp+18h], eax |
xor ebx, edx |
xor ebp, edx |
mov edx, ebx |
and ebx, 0FFh |
rol ebp, 8 |
mov ebx, [esi+ebx*4] |
mov eax, [esp+2Ch] |
mov [esp+1Ch], ebp |
xor edi, ebx |
xor ecx, ebx |
mov ebx, edi |
and edi, 0FFh |
mov ebp, [esp+30h] |
rol ecx, 8 |
mov edi, [esi+edi*4+400h] |
mov [esp+20h], ecx |
xor eax, edi |
xor edx, edi |
mov edi, eax |
and eax, 0FFh |
rol edx, 8 |
mov eax, [esi+eax*4+400h] |
mov ecx, [esp+34h] |
mov [esp+24h], edx |
xor ebp, eax |
xor ebx, eax |
mov eax, ebp |
and ebp, 0FFh |
mov edx, [esp+38h] |
rol ebx, 8 |
mov ebp, [esi+ebp*4] |
mov [esp+28h], ebx |
xor ecx, ebp |
xor edi, ebp |
mov ebp, ecx |
and ecx, 0FFh |
rol edi, 8 |
mov ecx, [esi+ecx*4] |
mov ebx, [esp+3Ch] |
mov [esp+2Ch], edi |
xor edx, ecx |
xor eax, ecx |
mov ecx, edx |
and edx, 0FFh |
mov edi, [esp] |
rol eax, 8 |
mov edx, [esi+edx*4+400h] |
mov [esp+30h], eax |
xor ebx, edx |
xor ebp, edx |
mov edx, ebx |
and ebx, 0FFh |
rol ebp, 8 |
rol edx, 8 |
mov ebx, [esi+ebx*4+400h] |
mov [esp+34h], ebp |
xor edi, ebx |
xor ecx, ebx |
rol edi, 8 |
rol ecx, 8 |
mov [esp], edi |
mov [esp+38h], ecx |
mov [esp+3Ch], edx |
mov ecx, [esp+64h] |
add esi, 800h |
dec ecx |
jnz @@_level_loop |
mov edi, [esp+60h] |
mov eax, [esp+40h] |
mov ebx, [esp+44h] |
mov ecx, [esp+3Ch] |
mov edx, [esp+38h] |
xor eax, ecx |
xor ebx, edx |
mov [edi], eax |
mov [edi+4], ebx |
mov eax, [esp+48h] |
mov ebx, [esp+4Ch] |
mov ecx, [esp+34h] |
mov edx, [esp+30h] |
xor eax, ecx |
xor ebx, edx |
mov [edi+8], eax |
mov [edi+0Ch], ebx |
mov ebp, [esp+68h] |
mov esp, ebp |
pop ebp |
pop edi |
pop esi |
pop ebx |
end; |
end; |
{$ENDIF} |
{$IFDEF THash_Snefru256_asm} |
procedure THash_Snefru256.DoTransform(Buffer: PUInt32Array); |
begin |
SwapUInt32Buffer(Buffer[0], FDigest[8], 8); |
asm |
push ebx |
mov eax, Self |
push esi |
push edi |
lea edi, [eax].THash_Snefru256.FDigest |
push ebp |
lea esi, Snefru_Data |
mov ecx, [eax].THash_Snefru256.FRounds |
mov ebp, esp |
add esp, 0FFFFFF94h |
and esp, 0FFFFFFE0h |
mov [esp+60h], edi |
mov [esp+68h], ebp |
mov eax, [edi] |
mov ebx, [edi+4] |
mov ebp, [edi+8] |
mov edx, [edi+0Ch] |
mov [esp], eax |
mov [esp+4], ebx |
mov [esp+8], ebp |
mov [esp+0Ch], edx |
mov [esp+40h], eax |
mov [esp+44h], ebx |
mov [esp+48h], ebp |
mov [esp+4Ch], edx |
mov eax, [edi+10h] |
mov ebx, [edi+14h] |
mov ebp, [edi+18h] |
mov edx, [edi+1Ch] |
mov [esp+10h], eax |
mov [esp+14h], ebx |
mov [esp+18h], ebp |
mov [esp+1Ch], edx |
mov [esp+50h], eax |
mov [esp+54h], ebx |
mov [esp+58h], ebp |
mov [esp+5Ch], edx |
mov eax, [edi+20h] |
mov ebx, [edi+24h] |
mov ebp, [edi+28h] |
mov edx, [edi+2Ch] |
mov [esp+20h], eax |
mov [esp+24h], ebx |
mov [esp+28h], ebp |
mov [esp+2Ch], edx |
mov eax, [edi+30h] |
mov ebx, [edi+34h] |
mov ebp, [edi+38h] |
mov edx, [edi+3Ch] |
mov [esp+30h], eax |
mov [esp+34h], ebx |
mov [esp+38h], ebp |
mov [esp+3Ch], edx |
@@_level_loop: |
mov [esp+64h], ecx |
mov ebx, [esp] |
mov ecx, [esp+4] |
mov edi, ebx |
and ebx, 0FFh |
mov eax, [esp+3Ch] |
mov ebx, [esi+ebx*4] |
mov edx, [esp+8] |
xor ecx, ebx |
xor eax, ebx |
mov ebp, ecx |
and ecx, 0FFh |
mov [esp+3Ch], eax |
mov ecx, [esi+ecx*4] |
mov ebx, [esp+0Ch] |
xor edx, ecx |
xor edi, ecx |
mov ecx, edx |
and edx, 0FFh |
mov [esp], edi |
mov edx, [esi+edx*4+400h] |
mov edi, [esp+10h] |
xor ebx, edx |
xor ebp, edx |
mov edx, ebx |
and ebx, 0FFh |
ror ebp, 10h |
mov ebx, [esi+ebx*4+400h] |
mov eax, [esp+14h] |
mov [esp+4], ebp |
xor edi, ebx |
xor ecx, ebx |
mov ebx, edi |
and edi, 0FFh |
mov ebp, [esp+18h] |
ror ecx, 10h |
mov edi, [esi+edi*4] |
mov [esp+8], ecx |
xor eax, edi |
xor edx, edi |
mov edi, eax |
and eax, 0FFh |
ror edx, 10h |
mov eax, [esi+eax*4] |
mov ecx, [esp+1Ch] |
mov [esp+0Ch], edx |
xor ebp, eax |
xor ebx, eax |
mov eax, ebp |
and ebp, 0FFh |
mov edx, [esp+20h] |
ror ebx, 10h |
mov ebp, [esi+ebp*4+400h] |
mov [esp+10h], ebx |
xor ecx, ebp |
xor edi, ebp |
mov ebp, ecx |
and ecx, 0FFh |
ror edi, 10h |
mov ecx, [esi+ecx*4+400h] |
mov ebx, [esp+24h] |
mov [esp+14h], edi |
xor edx, ecx |
xor eax, ecx |
mov ecx, edx |
and edx, 0FFh |
mov edi, [esp+28h] |
ror eax, 10h |
mov edx, [esi+edx*4] |
mov [esp+18h], eax |
xor ebx, edx |
xor ebp, edx |
mov edx, ebx |
and ebx, 0FFh |
ror ebp, 10h |
mov ebx, [esi+ebx*4] |
mov eax, [esp+2Ch] |
mov [esp+1Ch], ebp |
xor edi, ebx |
xor ecx, ebx |
mov ebx, edi |
and edi, 0FFh |
mov ebp, [esp+30h] |
ror ecx, 10h |
mov edi, [esi+edi*4+400h] |
mov [esp+20h], ecx |
xor eax, edi |
xor edx, edi |
mov edi, eax |
and eax, 0FFh |
ror edx, 10h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esp+34h] |
mov [esp+24h], edx |
xor ebp, eax |
xor ebx, eax |
mov eax, ebp |
and ebp, 0FFh |
mov edx, [esp+38h] |
ror ebx, 10h |
mov ebp, [esi+ebp*4] |
mov [esp+28h], ebx |
xor ecx, ebp |
xor edi, ebp |
mov ebp, ecx |
and ecx, 0FFh |
ror edi, 10h |
mov ecx, [esi+ecx*4] |
mov ebx, [esp+3Ch] |
mov [esp+2Ch], edi |
xor edx, ecx |
xor eax, ecx |
mov ecx, edx |
and edx, 0FFh |
mov edi, [esp] |
ror eax, 10h |
mov edx, [esi+edx*4+400h] |
mov [esp+30h], eax |
xor ebx, edx |
xor ebp, edx |
mov edx, ebx |
and ebx, 0FFh |
ror ebp, 10h |
ror edx, 10h |
mov ebx, [esi+ebx*4+400h] |
mov [esp+34h], ebp |
xor edi, ebx |
xor ecx, ebx |
ror edi, 10h |
ror ecx, 10h |
mov [esp], edi |
mov [esp+38h], ecx |
mov [esp+3Ch], edx |
mov ebx, [esp] |
mov ecx, [esp+4] |
mov edi, ebx |
and ebx, 0FFh |
mov eax, [esp+3Ch] |
mov ebx, [esi+ebx*4] |
mov edx, [esp+8] |
xor ecx, ebx |
xor eax, ebx |
mov ebp, ecx |
and ecx, 0FFh |
mov [esp+3Ch], eax |
mov ecx, [esi+ecx*4] |
mov ebx, [esp+0Ch] |
xor edx, ecx |
xor edi, ecx |
mov ecx, edx |
and edx, 0FFh |
mov [esp], edi |
mov edx, [esi+edx*4+400h] |
mov edi, [esp+10h] |
xor ebx, edx |
xor ebp, edx |
mov edx, ebx |
and ebx, 0FFh |
ror ebp, 8 |
mov ebx, [esi+ebx*4+400h] |
mov eax, [esp+14h] |
mov [esp+4], ebp |
xor edi, ebx |
xor ecx, ebx |
mov ebx, edi |
and edi, 0FFh |
mov ebp, [esp+18h] |
ror ecx, 8 |
mov edi, [esi+edi*4] |
mov [esp+8], ecx |
xor eax, edi |
xor edx, edi |
mov edi, eax |
and eax, 0FFh |
ror edx, 8 |
mov eax, [esi+eax*4] |
mov ecx, [esp+1Ch] |
mov [esp+0Ch], edx |
xor ebp, eax |
xor ebx, eax |
mov eax, ebp |
and ebp, 0FFh |
mov edx, [esp+20h] |
ror ebx, 8 |
mov ebp, [esi+ebp*4+400h] |
mov [esp+10h], ebx |
xor ecx, ebp |
xor edi, ebp |
mov ebp, ecx |
and ecx, 0FFh |
ror edi, 8 |
mov ecx, [esi+ecx*4+400h] |
mov ebx, [esp+24h] |
mov [esp+14h], edi |
xor edx, ecx |
xor eax, ecx |
mov ecx, edx |
and edx, 0FFh |
mov edi, [esp+28h] |
ror eax, 8 |
mov edx, [esi+edx*4] |
mov [esp+18h], eax |
xor ebx, edx |
xor ebp, edx |
mov edx, ebx |
and ebx, 0FFh |
ror ebp, 8 |
mov ebx, [esi+ebx*4] |
mov eax, [esp+2Ch] |
mov [esp+1Ch], ebp |
xor edi, ebx |
xor ecx, ebx |
mov ebx, edi |
and edi, 0FFh |
mov ebp, [esp+30h] |
ror ecx, 8 |
mov edi, [esi+edi*4+400h] |
mov [esp+20h], ecx |
xor eax, edi |
xor edx, edi |
mov edi, eax |
and eax, 0FFh |
ror edx, 8 |
mov eax, [esi+eax*4+400h] |
mov ecx, [esp+34h] |
mov [esp+24h], edx |
xor ebp, eax |
xor ebx, eax |
mov eax, ebp |
and ebp, 0FFh |
mov edx, [esp+38h] |
ror ebx, 8 |
mov ebp, [esi+ebp*4] |
mov [esp+28h], ebx |
xor ecx, ebp |
xor edi, ebp |
mov ebp, ecx |
and ecx, 0FFh |
ror edi, 8 |
mov ecx, [esi+ecx*4] |
mov ebx, [esp+3Ch] |
mov [esp+2Ch], edi |
xor edx, ecx |
xor eax, ecx |
mov ecx, edx |
and edx, 0FFh |
mov edi, [esp] |
ror eax, 8 |
mov edx, [esi+edx*4+400h] |
mov [esp+30h], eax |
xor ebx, edx |
xor ebp, edx |
mov edx, ebx |
and ebx, 0FFh |
ror ebp, 8 |
ror edx, 8 |
mov ebx, [esi+ebx*4+400h] |
mov [esp+34h], ebp |
xor edi, ebx |
xor ecx, ebx |
ror edi, 8 |
ror ecx, 8 |
mov [esp], edi |
mov [esp+38h], ecx |
mov [esp+3Ch], edx |
mov ebx, [esp] |
mov ecx, [esp+4] |
mov edi, ebx |
and ebx, 0FFh |
mov eax, [esp+3Ch] |
mov ebx, [esi+ebx*4] |
mov edx, [esp+8] |
xor ecx, ebx |
xor eax, ebx |
mov ebp, ecx |
and ecx, 0FFh |
mov [esp+3Ch], eax |
mov ecx, [esi+ecx*4] |
mov ebx, [esp+0Ch] |
xor edx, ecx |
xor edi, ecx |
mov ecx, edx |
and edx, 0FFh |
mov [esp], edi |
mov edx, [esi+edx*4+400h] |
mov edi, [esp+10h] |
xor ebx, edx |
xor ebp, edx |
mov edx, ebx |
and ebx, 0FFh |
ror ebp, 10h |
mov ebx, [esi+ebx*4+400h] |
mov eax, [esp+14h] |
mov [esp+4], ebp |
xor edi, ebx |
xor ecx, ebx |
mov ebx, edi |
and edi, 0FFh |
mov ebp, [esp+18h] |
ror ecx, 10h |
mov edi, [esi+edi*4] |
mov [esp+8], ecx |
xor eax, edi |
xor edx, edi |
mov edi, eax |
and eax, 0FFh |
ror edx, 10h |
mov eax, [esi+eax*4] |
mov ecx, [esp+1Ch] |
mov [esp+0Ch], edx |
xor ebp, eax |
xor ebx, eax |
mov eax, ebp |
and ebp, 0FFh |
mov edx, [esp+20h] |
ror ebx, 10h |
mov ebp, [esi+ebp*4+400h] |
mov [esp+10h], ebx |
xor ecx, ebp |
xor edi, ebp |
mov ebp, ecx |
and ecx, 0FFh |
ror edi, 10h |
mov ecx, [esi+ecx*4+400h] |
mov ebx, [esp+24h] |
mov [esp+14h], edi |
xor edx, ecx |
xor eax, ecx |
mov ecx, edx |
and edx, 0FFh |
mov edi, [esp+28h] |
ror eax, 10h |
mov edx, [esi+edx*4] |
mov [esp+18h], eax |
xor ebx, edx |
xor ebp, edx |
mov edx, ebx |
and ebx, 0FFh |
ror ebp, 10h |
mov ebx, [esi+ebx*4] |
mov eax, [esp+2Ch] |
mov [esp+1Ch], ebp |
xor edi, ebx |
xor ecx, ebx |
mov ebx, edi |
and edi, 0FFh |
mov ebp, [esp+30h] |
ror ecx, 10h |
mov edi, [esi+edi*4+400h] |
mov [esp+20h], ecx |
xor eax, edi |
xor edx, edi |
mov edi, eax |
and eax, 0FFh |
ror edx, 10h |
mov eax, [esi+eax*4+400h] |
mov ecx, [esp+34h] |
mov [esp+24h], edx |
xor ebp, eax |
xor ebx, eax |
mov eax, ebp |
and ebp, 0FFh |
mov edx, [esp+38h] |
ror ebx, 10h |
mov ebp, [esi+ebp*4] |
mov [esp+28h], ebx |
xor ecx, ebp |
xor edi, ebp |
mov ebp, ecx |
and ecx, 0FFh |
ror edi, 10h |
mov ecx, [esi+ecx*4] |
mov ebx, [esp+3Ch] |
mov [esp+2Ch], edi |
xor edx, ecx |
xor eax, ecx |
mov ecx, edx |
and edx, 0FFh |
mov edi, [esp] |
ror eax, 10h |
mov edx, [esi+edx*4+400h] |
mov [esp+30h], eax |
xor ebx, edx |
xor ebp, edx |
mov edx, ebx |
and ebx, 0FFh |
ror ebp, 10h |
ror edx, 10h |
mov ebx, [esi+ebx*4+400h] |
mov [esp+34h], ebp |
xor edi, ebx |
xor ecx, ebx |
ror edi, 10h |
ror ecx, 10h |
mov [esp], edi |
mov [esp+38h], ecx |
mov [esp+3Ch], edx |
mov ebx, [esp] |
mov ecx, [esp+4] |
mov edi, ebx |
and ebx, 0FFh |
mov eax, [esp+3Ch] |
mov ebx, [esi+ebx*4] |
mov edx, [esp+8] |
xor ecx, ebx |
xor eax, ebx |
mov ebp, ecx |
and ecx, 0FFh |
mov [esp+3Ch], eax |
mov ecx, [esi+ecx*4] |
mov ebx, [esp+0Ch] |
xor edx, ecx |
xor edi, ecx |
mov ecx, edx |
and edx, 0FFh |
mov [esp], edi |
mov edx, [esi+edx*4+400h] |
mov edi, [esp+10h] |
xor ebx, edx |
xor ebp, edx |
mov edx, ebx |
and ebx, 0FFh |
rol ebp, 8 |
mov ebx, [esi+ebx*4+400h] |
mov eax, [esp+14h] |
mov [esp+4], ebp |
xor edi, ebx |
xor ecx, ebx |
mov ebx, edi |
and edi, 0FFh |
mov ebp, [esp+18h] |
rol ecx, 8 |
mov edi, [esi+edi*4] |
mov [esp+8], ecx |
xor eax, edi |
xor edx, edi |
mov edi, eax |
and eax, 0FFh |
rol edx, 8 |
mov eax, [esi+eax*4] |
mov ecx, [esp+1Ch] |
mov [esp+0Ch], edx |
xor ebp, eax |
xor ebx, eax |
mov eax, ebp |
and ebp, 0FFh |
mov edx, [esp+20h] |
rol ebx, 8 |
mov ebp, [esi+ebp*4+400h] |
mov [esp+10h], ebx |
xor ecx, ebp |
xor edi, ebp |
mov ebp, ecx |
and ecx, 0FFh |
rol edi, 8 |
mov ecx, [esi+ecx*4+400h] |
mov ebx, [esp+24h] |
mov [esp+14h], edi |
xor edx, ecx |
xor eax, ecx |
mov ecx, edx |
and edx, 0FFh |
mov edi, [esp+28h] |
rol eax, 8 |
mov edx, [esi+edx*4] |
mov [esp+18h], eax |
xor ebx, edx |
xor ebp, edx |
mov edx, ebx |
and ebx, 0FFh |
rol ebp, 8 |
mov ebx, [esi+ebx*4] |
mov eax, [esp+2Ch] |
mov [esp+1Ch], ebp |
xor edi, ebx |
xor ecx, ebx |
mov ebx, edi |
and edi, 0FFh |
mov ebp, [esp+30h] |
rol ecx, 8 |
mov edi, [esi+edi*4+400h] |
mov [esp+20h], ecx |
xor eax, edi |
xor edx, edi |
mov edi, eax |
and eax, 0FFh |
rol edx, 8 |
mov eax, [esi+eax*4+400h] |
mov ecx, [esp+34h] |
mov [esp+24h], edx |
xor ebp, eax |
xor ebx, eax |
mov eax, ebp |
and ebp, 0FFh |
mov edx, [esp+38h] |
rol ebx, 8 |
mov ebp, [esi+ebp*4] |
mov [esp+28h], ebx |
xor ecx, ebp |
xor edi, ebp |
mov ebp, ecx |
and ecx, 0FFh |
rol edi, 8 |
mov ecx, [esi+ecx*4] |
mov ebx, [esp+3Ch] |
mov [esp+2Ch], edi |
xor edx, ecx |
xor eax, ecx |
mov ecx, edx |
and edx, 0FFh |
mov edi, [esp] |
rol eax, 8 |
mov edx, [esi+edx*4+400h] |
mov [esp+30h], eax |
xor ebx, edx |
xor ebp, edx |
mov edx, ebx |
and ebx, 0FFh |
rol ebp, 8 |
rol edx, 8 |
mov ebx, [esi+ebx*4+400h] |
mov [esp+34h], ebp |
xor edi, ebx |
xor ecx, ebx |
rol edi, 8 |
rol ecx, 8 |
mov [esp], edi |
mov [esp+38h], ecx |
mov [esp+3Ch], edx |
mov ecx, [esp+64h] |
add esi, 800h |
dec ecx |
jnz @@_level_loop |
mov edi, [esp+60h] |
mov eax, [esp+40h] |
mov ebx, [esp+44h] |
mov ecx, [esp+3Ch] |
mov edx, [esp+38h] |
xor eax, ecx |
xor ebx, edx |
mov [edi], eax |
mov [edi+4], ebx |
mov eax, [esp+48h] |
mov ebx, [esp+4Ch] |
mov ecx, [esp+34h] |
mov edx, [esp+30h] |
xor eax, ecx |
xor ebx, edx |
mov [edi+8], eax |
mov [edi+0Ch], ebx |
mov eax, [esp+50h] |
mov ebx, [esp+54h] |
mov ecx, [esp+2Ch] |
mov edx, [esp+28h] |
xor eax, ecx |
xor ebx, edx |
mov [edi+10h], eax |
mov [edi+14h], ebx |
mov eax, [esp+58h] |
mov ebx, [esp+5Ch] |
mov ecx, [esp+24h] |
mov edx, [esp+20h] |
xor eax, ecx |
xor ebx, edx |
mov [edi+18h], eax |
mov [edi+1Ch], ebx |
mov ebp, [esp+68h] |
mov esp, ebp |
pop ebp |
pop edi |
pop esi |
pop ebx |
end; |
end; |
{$ENDIF} |
{$IFDEF THash_Sapphire_asm} |
procedure THash_Sapphire.Calc(const Data; DataSize: Integer); |
asm |
test ecx,ecx |
jle @Exit |
push ebx |
push esi |
push edi // let edi points to Sapphire partial context (w/o cards array) |
lea esi,[eax].THash_Sapphire.FCards |
lea edi,[eax].THash_Sapphire.FRotor // let esi points to Sapphire cards array |
push ebp // edx points to data, ecx contains DataSize |
mov ebp, esp |
sub esp, 18h |
and esp, 0FFFFFFE0h |
mov eax, [edi] |
mov ebx, [edi+4] |
mov [esp+14h], ebp |
mov ebp, [edi+8] |
mov [esp], ebx |
mov [esp+4], ebp |
mov ebp, eax |
mov eax, [edi+0Ch] |
mov ebx, [edi+10h] |
mov [esp+8], edx |
mov [esp+10h], edi |
@@data_loop: |
mov [esp+0Ch], ecx |
mov ecx, [esi+ebp*4] |
mov edi, [esp] |
inc ebp |
add edi, ecx |
mov ecx, [esi+ebx*4] |
and edi, 0FFh |
and ebp, 0FFh |
mov edx, [esi+edi*4] |
mov [esp], edi |
mov [esi+ebx*4], edx |
mov edx, [esi+eax*4] |
mov [esi+edi*4], edx |
mov edx, [esi+ebp*4] |
mov [esi+eax*4], edx |
mov [esi+ebp*4], ecx |
mov ecx, [esi+ecx*4] |
mov edx, [esi+eax*4] |
mov eax, [esp+4] |
mov edi, [esi+edi*4] |
add ecx, eax |
mov eax, [esi+ebp*4] |
and ecx, 0FFh |
add edi, eax |
mov [esp+4], ecx |
and edi, 0FFh |
mov eax, [esi+ecx*4] |
mov ecx, [esp+8] |
add edx, eax |
mov eax, [esi+ebx*4] |
add edx, eax |
movzx eax, byte ptr [ecx] |
and edx, 0FFh |
mov edi, [esi+edi*4] |
inc ecx |
mov ebx, eax |
mov edx, [esi+edx*4] |
mov [esp+8], ecx |
xor ebx, edi |
mov edx, [esi+edx*4] |
mov ecx, [esp+0Ch] |
xor ebx, edx |
dec ecx |
jnz @@data_loop |
mov edi, [esp+10h] |
mov ecx, [esp] |
mov esi, [esp+4] |
mov edx, [esp+14h] |
mov [edi], ebp |
mov [edi+4], ecx |
mov esp, edx |
mov [edi+8], esi |
mov [edi+0Ch], eax |
mov [edi+10h], ebx |
pop ebp |
pop edi |
pop esi |
pop ebx |
@Exit: |
end; |
{$ENDIF} |
{$ENDIF INCLUDED} |
/trunk/Decoder5/VCL_DEC/DECHash.pas |
---|
0,0 → 1,5703 |
{***************************************************************************** |
The DEC team (see file NOTICE.txt) licenses this file |
to you under the Apache License, Version 2.0 (the |
"License"); you may not use this file except in compliance |
with the License. A copy of this licence is found in the root directory |
of this project in the file LICENCE.txt or alternatively 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. |
*****************************************************************************} |
/// <summary> |
/// Hash functions. Be aware that the x86 ASM implementations, if activated |
/// by the define, are provided by DECHash.asm86.inc! |
/// </summary> |
unit DECHash; |
interface |
{$INCLUDE DECOptions.inc} |
uses |
{$IFDEF FPC} |
SysUtils, Classes, |
{$ELSE} |
System.SysUtils, System.Classes, |
{$ENDIF} |
DECBaseClass, DECFormatBase, DECUtil, DECHashBase, DECHashAuthentication, |
DECHashBitBase, DECHashInterface, DECTypes; |
type |
// Hash Classes |
THash_MD2 = class; |
THash_MD4 = class; |
THash_MD5 = class; |
THash_RipeMD128 = class; |
THash_RipeMD160 = class; |
THash_RipeMD256 = class; |
THash_RipeMD320 = class; |
THash_SHA0 = class; // SHA-0 |
THash_SHA1 = class; // SHA-1 |
THash_SHA224 = class; // SHA-2, SHA-224 |
THash_SHA256 = class; // SHA-2, SHA-256 |
THash_SHA384 = class; // SHA-2, SHA-384 |
THash_SHA512 = class; // SHA-2, SHA-512 |
THash_Keccak_224 = class; // version of THash_SHA3_224 before that became the final standard |
THash_Keccak_256 = class; // version of THash_SHA3_256 before that became the final standard |
THash_Keccak_384 = class; // version of THash_SHA3_384 before that became the final standard |
THash_Keccak_512 = class; // version of THash_SHA3_512 before that became the final standard |
THash_SHA3_224 = class; |
THash_SHA3_256 = class; |
THash_SHA3_384 = class; |
THash_SHA3_512 = class; |
THash_Shake128 = class; |
THash_Shake256 = class; |
THash_Haval128 = class; |
THash_Haval160 = class; // Haval 160, 3 Rounds |
THash_Haval192 = class; // Haval 192, 4 Rounds |
THash_Haval224 = class; // Haval 224, 4 Rounds |
THash_Haval256 = class; // Haval 256, 5 Rounds |
THash_Tiger = class; |
THash_Panama = class; |
{$IFDEF OLD_WHIRLPOOL_NAMES} |
THash_Whirlpool = class; |
THash_Whirlpool1New = class; |
{$ENDIF} |
THash_Whirlpool0 = class; |
THash_Whirlpool1 = class; // differs, depending on OLD_WHIRLPOOL_NAMES define |
THash_WhirlpoolT = class; |
THash_Square = class; |
THash_Snefru128 = class; // derived from the Xerox Secure Hash Function |
THash_Snefru256 = class; // " - " |
THash_Sapphire = class; |
THash_BCrypt = class; |
/// <summary> |
/// Implementation of the MD2 hash algorithm. Considered to be broken, |
/// at least on paper. |
/// </summary> |
THash_MD2 = class(TDECHashExtended) |
private |
FDigest: array[0..63] of Byte; |
protected |
procedure DoInit; override; |
procedure DoTransform(Buffer: PUInt32Array); override; |
procedure DoDone; override; |
public |
function Digest: PUInt8Array; override; |
class function DigestSize: UInt32; override; |
class function BlockSize: UInt32; override; |
end; |
/// <summary> |
/// Base class for the MD4 hash alrogithm and for other hash-algorithms which |
/// are close relatives to the MD4 algorithm like the RipeMD ones. |
/// </summary> |
THashBaseMD4 = class(TDECHashExtended) |
private |
FDigest: array[0..9] of UInt32; |
protected |
procedure DoInit; override; |
procedure DoDone; override; |
public |
function Digest: PUInt8Array; override; |
class function DigestSize: UInt32; override; |
class function BlockSize: UInt32; override; |
end; |
/// <summary> |
/// The MD4 algorithm is considered to be broken, at least on paper. |
/// </summary> |
THash_MD4 = class(THashBaseMD4) |
protected |
procedure DoTransform(Buffer: PUInt32Array); override; |
end; |
/// <summary> |
/// The MD5 algorithm is considered to be broken. Using it in HMAC algorithms |
/// is still ok. |
/// </summary> |
THash_MD5 = class(THashBaseMD4) |
protected |
procedure DoTransform(Buffer: PUInt32Array); override; |
end; |
/// <summary> |
/// Do not confuse with the original RipeMD algorithm which ís being |
/// considered to be unsafe anyway. Considered to be broken due to the only |
/// 128 Bit long message digest result. |
/// </summary> |
THash_RipeMD128 = class(THashBaseMD4) |
protected |
procedure DoTransform(Buffer: PUInt32Array); override; |
end; |
THash_RipeMD160 = class(THashBaseMD4) |
protected |
procedure DoTransform(Buffer: PUInt32Array); override; |
public |
class function DigestSize: UInt32; override; |
end; |
THash_RipeMD256 = class(THashBaseMD4) |
protected |
procedure DoInit; override; |
procedure DoTransform(Buffer: PUInt32Array); override; |
public |
class function DigestSize: UInt32; override; |
end; |
THash_RipeMD320 = class(THashBaseMD4) |
protected |
procedure DoTransform(Buffer: PUInt32Array); override; |
public |
class function DigestSize: UInt32; override; |
end; |
/// <summary> |
/// Implementation of the SHA0 hash algorithm. This is the original version |
/// of the SHA algorithm released in 1993. In 1995 some security issues have |
/// been identified in this algorithm so he got replaced by the slightly |
/// modified SHA1 algorithm. The recommendation is to not use this SHA0 |
/// algorithm at all. It is only being provided for scenarios where |
/// compatibility with this algorithm is required. |
/// </summary> |
THash_SHA0 = class(THashBaseMD4) |
protected |
procedure DoTransform(Buffer: PUInt32Array); override; |
procedure DoDone; override; |
public |
class function DigestSize: UInt32; override; |
end; |
{$IFDEF OLD_SHA_NAME} |
/// <summary> |
/// Implementation of the SHA0 hash algorithm. This is the original version |
/// of the SHA algorithm released in 1993. In 1995 some security issues have |
/// been identified in this algorithm so he got replaced by the slightly |
/// modified SHA1 algorithm. The recommendation is to not use this SHA0 |
/// algorithm at all. It is only being provided for scenarios where |
/// compatibility with this algorithm is required. |
/// </summary> |
THash_SHA = class(THash_SHA0) |
{$IFDEF X86ASM} |
protected |
procedure DoTransform(Buffer: PUInt32Array); override; |
end |
{$ENDIF}; |
{$ENDIF} |
/// <summary> |
/// Implementation of the SHA1 hash algorithm. At least since February 2017 |
/// collisions have been found for this algorithm so it's now completely |
/// clear that it should not be used if possible! Use SHA256 or SHA512 |
/// instead! |
/// </summary> |
THash_SHA1 = class(THash_SHA0); |
/// <summary> |
/// This algorithm is part of the SHA2 series of hash algorithms. |
/// </summary> |
THash_SHA256 = class(THash_SHA0) |
protected |
procedure DoInit; override; |
procedure DoTransform(Buffer: PUInt32Array); override; |
public |
class function DigestSize: UInt32; override; |
end; |
/// <summary> |
/// This algorithm is part of the SHA2 series of hash algorithms. |
/// German BSI recommends not to use this algorithm, they recommend SHA256 |
/// or higher instead. |
/// </summary> |
THash_SHA224 = class(THash_SHA256) |
protected |
procedure DoInit; override; |
public |
class function DigestSize: UInt32; override; |
class function BlockSize: UInt32; override; |
end; |
/// <summary> |
/// This algorithm is part of the SHA2 series of hash algorithms. |
/// </summary> |
THash_SHA384 = class(TDECHashExtended) |
private |
FDigest: array[0..7] of Int64; |
protected |
procedure DoInit; override; |
procedure DoTransform(Buffer: PUInt32Array); override; |
procedure DoDone; override; |
public |
function Digest: PUInt8Array; override; |
class function DigestSize: UInt32; override; |
class function BlockSize: UInt32; override; |
end; |
/// <summary> |
/// This algorithm is part of the SHA2 series of hash algorithms. |
/// </summary> |
THash_SHA512 = class(THash_SHA384) |
protected |
procedure DoInit; override; |
public |
class function DigestSize: UInt32; override; |
end; |
/// <summary> |
/// Base class for tall SHA3 implementations |
/// </summary> |
THash_SHA3Base = class(TDECHashBit) |
strict private |
// Declarations for SHA3. Must be declared here to allow private methods |
// to use these types as well. |
const |
KeccakPermutationSize = 1600; |
/// <summary> |
/// Maximum bitrate? If yes this would be higher than any value listed here: |
/// https://keccak.team/keccak.html |
/// </summary> |
KeccakMaximumRate = 1536; |
/// <summary> |
/// KeccakPermutationSize converted into bytes instead of bits |
/// </summary> |
KeccakPermutationSizeInBytes = KeccakPermutationSize div 8; |
/// <summary> |
/// KeccakMaximumRate converted into bytes instead of bits |
/// </summary> |
KeccakMaximumRateInBytes = KeccakMaximumRate div 8; |
/// <summary> |
/// Precalculated values for the 24 rounds of the algorithm |
/// </summary> |
cRoundConstants : array[0..23] of UInt64 = ( |
UInt64($0000000000000001), UInt64($0000000000008082), |
UInt64($800000000000808A), UInt64($8000000080008000), |
UInt64($000000000000808B), UInt64($0000000080000001), |
UInt64($8000000080008081), UInt64($8000000000008009), |
UInt64($000000000000008A), UInt64($0000000000000088), |
UInt64($0000000080008009), UInt64($000000008000000A), |
UInt64($000000008000808B), UInt64($800000000000008B), |
UInt64($8000000000008089), UInt64($8000000000008003), |
UInt64($8000000000008002), UInt64($8000000000000080), |
UInt64($000000000000800A), UInt64($800000008000000A), |
UInt64($8000000080008081), UInt64($8000000000008080), |
UInt64($0000000080000001), UInt64($8000000080008008) |
); |
type |
TState_B = packed array[0..KeccakPermutationSizeInBytes-1] of UInt8; |
TState_L = packed array[0..(KeccakPermutationSizeInBytes) div 4 - 1] of Int32; |
TKDQueue = packed array[0..KeccakMaximumRateInBytes-1] of UInt8; |
/// <summary> |
/// Calculation status of the algorithm |
/// </summary> |
TSpongeState = packed record |
State : TState_B; |
/// <summary> |
/// Data of the queue to be processed |
/// </summary> |
DataQueue : TKDQueue; |
/// <summary> |
/// Bitrate r of Keccak |
/// </summary> |
Rate : UInt16; |
/// <summary> |
/// Capacity c of Keccak |
/// </summary> |
Capacity : UInt16; |
/// <summary> |
/// How many bits are in the queue |
/// </summary> |
BitsInQueue : UInt16; |
/// <summary> |
/// Length of the hash value to generate in bit |
/// </summary> |
FixedOutputLength : UInt16; |
/// <summary> |
/// Number of bits which can be squeezed |
/// </summary> |
bitsAvailableForSqueezing : UInt16; |
/// <summary> |
/// Flag which is set to true when entering the |
/// squeezing state. Suppresses further absorb calls. |
/// </summary> |
SqueezeActive : Boolean; |
/// <summary> |
/// If an operation fails it sets this error code |
/// </summary> |
// Fill3: packed array[405..HASHCTXSIZE] of byte; |
end; |
/// <summary> |
/// Buffer type |
/// </summary> |
TBABytes = array[0..65535] of UInt8; |
/// <summary> |
/// Pointer to a buffer |
/// </summary> |
PBABytes = ^TBABytes; |
/// <summary> |
/// Type for the generated hash value |
/// </summary> |
TSHA3Digest = array of UInt8; |
/// <summary> |
/// Function to give input data for the sponge function to absorb |
/// </summary> |
/// <param name="Data"> |
/// Pointer to the data to work on |
/// </param> |
/// <param name="DatabitLen"> |
/// Length of the data passed via the pointer in bit |
/// </param> |
/// <remarks> |
/// Raises an EDECHashEception when DataBit len not divideable by 8 without |
/// reminder or when already in squeezin state. |
/// </remarks> |
/// <exception cref="EDECHashException"> |
/// Exception raised if DataBit len not divideable by 8 without |
/// reminder or when already in squeezin state. |
/// </exception> |
procedure Absorb(Data: PBABytes; DatabitLen: Int32); |
/// <summary> |
/// Absorb remaining bits from queue |
/// </summary> |
procedure AbsorbQueue; |
{$IFDEF PUREPASCAL} |
/// <summary> |
/// Circular left shift |
/// </summary> |
/// <param name="x"> |
/// Value to be shifted |
/// </param> |
/// <param name="c"> |
/// Number of bits the value will be shifted |
/// </param> |
/// <returns> |
/// Shifted value |
/// </returns> |
function RotL(const x: UInt64; c: Integer): UInt64; inline; |
/// <summary> |
/// Circular left shift by 1 |
/// </summary> |
/// <param name="x"> |
/// Value to be shifted |
/// </param> |
/// <returns> |
/// Shifted value |
/// </returns> |
function RotL1(var x: UInt64): UInt64; inline; |
{$ENDIF} |
/// <summary> |
/// Permutates the values in the passed state |
/// </summary> |
/// <param name="State"> |
/// State to permutate |
/// </param> |
procedure KeccakPermutation(var State: TState_L); |
/// <summary> |
/// Carries out the XorIntoState and the permutation |
/// </summary> |
/// <param name="State"> |
/// State of the algorithm which gets modified by the permutation in this method |
/// </param> |
/// <param name="Data"> |
/// Pointer to the data to operate on |
/// </param> |
/// <param name="LaneCount"> |
/// Number of times the loop in this algorithm has tpo be carried out |
/// </param> |
procedure KeccakAbsorb(var state: TState_B; data: PUInt64; laneCount: Integer); |
/// <summary> |
/// Include input message data bits into the sponge state |
/// </summary> |
procedure XORIntoState(var state: TState_L; pI: PUInt64; laneCount: Integer); |
/// <summary> |
/// Update state with DataBitLen bits from data. May be called multiple |
/// times, only the last DataBitLen may be a non-multiple of 8 |
/// (the corresponding byte) must be MSB aligned, i.e. in the |
/// (databitlen and 7) most significant bits. |
/// </summary> |
/// <param name="data"> |
/// Data to work on |
/// </param> |
/// <param name="DataBitLen"> |
/// Length of the data in bits |
/// </param> |
procedure DoUpdate(Data: Pointer; DataBitLen: Int32); |
/// <summary> |
/// Squeeze output data from the sponge function. If the sponge function |
/// was in the absorbing phase, this function switches it to the squeezing |
/// phase. |
/// </summary> |
/// <param name="Output"> |
/// pointer to the buffer where to store the output data |
/// </param> |
/// <param name="OutputLength"> |
/// number of output bits desired, must be a multiple of 8. |
/// </param> |
/// <returns> |
/// 0 if successful, 1 otherwise. |
/// </returns> |
/// <exception cref="EDECHashException"> |
/// Exception raised if <c>OutputLength</c> is not a multiple of 8 |
/// </exception> |
procedure Squeeze(var Output: TSHA3Digest; OutputLength: Int32); |
/// <summary> |
/// Update final bits in LSB format, pad them, and compute the hash value |
/// </summary> |
/// <param name="Bits"> |
/// Value used for padding if the length of the message to be hashed |
/// is not a multiple of 8 bit bytes. |
/// </param> |
/// <param name="Bitlen"> |
/// Length of the final byte in bit. Required for supporting message |
/// lengths which are not a multiple of 8 bits. |
/// </param> |
/// <param name="HashValue"> |
/// The hash value which shall be updated by this method |
/// </param> |
procedure FinalBit_LSB(Bits: Byte; Bitlen: UInt16; |
var HashValue: TSHA3Digest); |
/// <summary> |
/// The algorithm starts in the absorb phase (one puts data into the sponge) |
/// and ends with the squeze phase (one squeezes the sponge) and this method |
/// does everything needed at the transition point between these two phases |
/// </summary> |
procedure PadAndSwitchToSqueezingPhase; |
/// <summary> |
/// ??? |
/// </summary> |
/// <param name="Outp"> |
/// Pointer where the output will be stored in |
/// </param> |
/// <param name="State"> |
/// State to work on |
/// </param> |
/// <param name="LaneCount"> |
/// Number of iterations |
/// </param> |
procedure ExtractFromState(Outp: Pointer; const State: TState_L; LaneCount: Integer); |
strict protected |
/// <summary> |
/// Contains the current state of the algorithms sponge part |
/// </summary> |
FSpongeState : TSpongeState; |
/// <summary> |
/// The generated hash value is stored here |
/// </summary> |
FDigest : TSHA3Digest; |
/// <summary> |
/// When true, the output length has been set (applicable for the expandable |
/// output length algorithm variants named Shake) and needs to be preserved |
/// in InitSponge |
/// </summary> |
FOutpLengSet : Boolean; |
/// <summary> |
/// If true the implementation is Keccack instead of SHA3. This changes |
/// how the padding at the end is handled. |
/// </summary> |
FIsKeccack : Boolean; |
/// <summary> |
/// Initializes the state of the Keccak/SHA3 sponge function. It is set to |
/// the absorbing phase by this. If invalid parameter values are specified |
/// a EDECHashException will be raised |
/// </summary> |
/// <param name="rate"> |
/// Block length of the message to be processed, depends directly on the |
/// SHA3 variant (224, 256...) to be used |
/// </param> |
/// <param name="capacity"> |
/// Capacity c (it could directly be calculated from the rate as |
/// c = 1600 - r but the original author Wolfgang Erhardt decided against |
/// this. |
/// The capacity is the size of that part of the state vector which, when |
/// xored with the message blocks and when extracting the resulting hash, |
/// stays untouched. |
/// </param> |
/// <exception cref="EDECHashException"> |
/// Exception raised if invalid parameter values are specified. |
/// </exception> |
procedure InitSponge(Rate, Capacity: UInt16); |
/// <summary> |
/// Init internal data |
/// </summary> |
procedure DoInit; override; |
/// <summary> |
/// Dummy method to avoid the compiler warning about a class with abstract method |
/// </summary> |
procedure DoTransform(Buffer: PUInt32Array); override; |
/// <summary> |
/// Final step of the calculation |
/// </summary> |
procedure DoDone; override; |
/// <summary> |
/// Returns the calculated hash value |
/// </summary> |
/// <returns> |
/// Hash value calculated |
/// </returns> |
function Digest: PUInt8Array; override; |
public |
/// <summary> |
/// Dimension hash result buffer |
/// </summary> |
constructor Create; override; |
/// <summary> |
/// Processes one chunk of data to be hashed. |
/// </summary> |
/// <param name="Data"> |
/// Data on which the hash value shall be calculated on |
/// </param> |
/// <param name="DataSize"> |
/// Size of the data in bytes |
/// </param> |
procedure Calc(const Data; DataSize: Integer); override; |
end; |
/// <summary> |
/// 224 bit SHA3 variant |
/// </summary> |
THash_SHA3_224 = class(THash_SHA3Base) |
protected |
procedure DoInit; override; |
public |
class function BlockSize: UInt32; override; |
class function DigestSize: UInt32; override; |
end; |
/// <summary> |
/// 256 bit SHA3 variant |
/// </summary> |
THash_SHA3_256 = class(THash_SHA3Base) |
protected |
procedure DoInit; override; |
public |
class function BlockSize: UInt32; override; |
class function DigestSize: UInt32; override; |
end; |
/// <summary> |
/// 384 bit SHA3 variant |
/// </summary> |
THash_SHA3_384 = class(THash_SHA3Base) |
protected |
procedure DoInit; override; |
public |
class function BlockSize: UInt32; override; |
class function DigestSize: UInt32; override; |
end; |
/// <summary> |
/// 512 bit SHA3 variant |
/// </summary> |
THash_SHA3_512 = class(THash_SHA3Base) |
protected |
procedure DoInit; override; |
public |
class function BlockSize: UInt32; override; |
class function DigestSize: UInt32; override; |
end; |
/// <summary> |
/// 224 bit Keccack variant, the predecessor of SHA3_224 |
/// </summary> |
THash_Keccak_224 = class(THash_SHA3_224) |
protected |
procedure DoInit; override; |
public |
class function BlockSize: UInt32; override; |
class function DigestSize: UInt32; override; |
end; |
/// <summary> |
/// 256 bit Keccack variant, the predecessor of SHA3_256 |
/// </summary> |
THash_Keccak_256 = class(THash_SHA3_256) |
protected |
procedure DoInit; override; |
public |
class function BlockSize: UInt32; override; |
class function DigestSize: UInt32; override; |
end; |
/// <summary> |
/// 384 bit Keccack variant, the predecessor of SHA3_384 |
/// </summary> |
THash_Keccak_384 = class(THash_SHA3_384) |
protected |
procedure DoInit; override; |
public |
class function BlockSize: UInt32; override; |
class function DigestSize: UInt32; override; |
end; |
/// <summary> |
/// 512 bit Keccack variant, the predecessor of SHA3_512 |
/// </summary> |
THash_Keccak_512 = class(THash_SHA3_512) |
protected |
procedure DoInit; override; |
public |
class function BlockSize: UInt32; override; |
class function DigestSize: UInt32; override; |
end; |
/// <summary> |
/// Base class for the Shake implementations |
/// </summary> |
THash_ShakeBase = class(THash_SHA3Base, IDECHashExtensibleOutput) |
private |
/// <summary> |
/// Returns the length of the calculated hash value in byte |
/// </summary> |
function GetHashSize: UInt16; |
/// <summary> |
/// Defines the length of the calculated hash value |
/// </summary> |
/// <param name="Value"> |
/// Length of the hash value to be returned in byte |
/// </param> |
/// <exception cref="EDECHashException"> |
/// Exception raised if <c>Value</c> is 0. |
/// </exception> |
procedure SetHashSize(const Value: UInt16); |
public |
/// <summary> |
/// Returns the calculated hash value as byte array. Needs to be overriden |
/// here as the length of the output needs to be determined differently due |
/// to Shake being extensible output length. |
/// </summary> |
function DigestAsBytes: TBytes; override; |
/// <summary> |
/// Define the lenght of the resulting hash value in byte as these functions |
/// are extendable output functions |
/// </summary> |
property HashSize : UInt16 |
read GetHashSize |
write SetHashSize; |
end; |
/// <summary> |
/// Shake128 veriant of SHA3 |
/// </summary> |
THash_Shake128 = class(THash_ShakeBase) |
protected |
procedure DoInit; override; |
public |
class function BlockSize: UInt32; override; |
class function DigestSize: UInt32; override; |
end; |
/// <summary> |
/// Shake128 veriant of SHA3 |
/// </summary> |
THash_Shake256 = class(THash_ShakeBase) |
protected |
procedure DoInit; override; |
public |
class function BlockSize: UInt32; override; |
class function DigestSize: UInt32; override; |
end; |
THavalBaseTransformMethod = procedure(Buffer: PUInt32Array) of object; |
/// <summary> |
/// Base class for all Haval implementations |
/// </summary> |
THashBaseHaval = class(TDECHashExtended, IDECHashRounds) |
private |
FDigest: array[0..7] of UInt32; |
/// <summary> |
/// UInt32 for compatibility with 32 bit ASM implementation |
/// </summary> |
FRounds: UInt32; |
FTransform: THavalBaseTransformMethod; |
/// <summary> |
/// Defines the number of calculation rounds and if a value outside the |
/// allowed range is given it sets rounds to a value based on digest size. |
/// </summary> |
procedure SetRounds(Value: UInt32); |
function GetRounds: UInt32; |
protected |
procedure DoInit; override; |
procedure DoTransform(Buffer: PUInt32Array); override; |
procedure DoTransform3(Buffer: PUInt32Array); |
procedure DoTransform4(Buffer: PUInt32Array); |
procedure DoTransform5(Buffer: PUInt32Array); |
procedure DoDone; override; |
public |
function Digest: PUInt8Array; override; |
class function BlockSize: UInt32; override; |
/// <summary> |
/// Returns the minimum possible number for the rounds parameter. |
/// Value depends on Digest size which depends on concrete implementation |
/// </summary> |
function GetMinRounds: UInt32; |
/// <summary> |
/// Returns the maximum possible number for the rounds parameter. |
/// Value depends on Digest size which depends on concrete implementation |
/// </summary> |
function GetMaxRounds: UInt32; |
/// <summary> |
/// Defines the number of rounds the algorithm performs on the input data. |
/// The range for this parameter is 3-5 rounds. If a value outside this |
/// range is assigned, the value used depends on the DigestSize. For |
/// DigestSizes <= 20 it will be set to 3, for values <= 28 to 4 and for |
/// bigger values to 5. For 3 rounds the algorithm is considered unsafe, |
/// as in 2003 collisions could be found with a setting of 3 rounds only. |
/// </summary> |
property Rounds: UInt32 read GetRounds write SetRounds default 3; |
end; |
/// <summary> |
/// In 2004 collisions for this one were found, so this one should be |
/// considered to be unsafe. |
/// </summary> |
THash_Haval128 = class(THashBaseHaval) |
public |
class function DigestSize: UInt32; override; |
end; |
THash_Haval160 = class(THashBaseHaval) |
public |
class function DigestSize: UInt32; override; |
end; |
THash_Haval192 = class(THashBaseHaval) |
public |
class function DigestSize: UInt32; override; |
end; |
THash_Haval224 = class(THashBaseHaval) |
public |
class function DigestSize: UInt32; override; |
end; |
THash_Haval256 = class(THashBaseHaval) |
public |
class function DigestSize: UInt32; override; |
end; |
/// <summary> |
/// This is actually an implementation of the 192 bit variant of the Tiger |
/// hash algorithm with 3 rounds, unless a different value is assigned |
/// to the rounds property. It is considered to be unsafe at least in the |
/// 192 Bit variant! |
/// </summary> |
THash_Tiger = class(THashBaseMD4, IDECHashRounds) |
private |
const |
/// <summary> |
/// Minimum number of rounds for the Tigher hash function. Trying to set a |
/// lower one sets the rounds to this value. |
/// </summary> |
cTigerMinRounds = 3; |
/// <summary> |
/// Maximum number of rounds for the Tigher hash function. Trying to set a |
/// higher one sets the rounds to this value. |
/// </summary> |
cTigerMaxRounds = 32; |
var |
/// <summary> |
/// UInt32 for compatibility with 32 bit ASM implementation |
/// </summary> |
FRounds: UInt32; |
function GetRounds: UInt32; |
procedure SetRounds(Value: UInt32); |
protected |
procedure DoInit; override; |
procedure DoTransform(Buffer: PUInt32Array); override; |
public |
class function DigestSize: UInt32; override; |
/// <summary> |
/// Returns the minimum possible number for the rounds parameter |
/// </summary> |
function GetMinRounds: UInt32; |
/// <summary> |
/// Returns the maximum possible number for the rounds parameter |
/// </summary> |
function GetMaxRounds: UInt32; |
/// <summary> |
/// Defines the number of rounds the algorithm will perform on the data |
/// passed. Valid values are in the range from 3-32 rounds and values |
/// outside this range will lead to a rounds value of 3 or 32 to be used, |
/// depending on whether a lower or higher value has been given. |
/// </summary> |
property Rounds: UInt32 read GetRounds write SetRounds default 3; |
end; |
/// <summary> |
/// As there seem to exist 128 and 160 bit variants of Tiger, which seem to |
/// be truncated variants of Tiger 192, but we want to keep compatibility |
/// with old code we introduce an alias for the time being. |
/// It is considered to be unsafe at least in the 192 Bit variant! |
/// </summary> |
THash_Tiger192 = THash_Tiger; |
/// <summary> |
/// The Panama algorithm is being considered to be unsafe. Support is only |
/// being provided for backward compatibility. |
/// </summary> |
THash_Panama = class(TDECHashExtended) |
private |
FLFSRBuffer: array[0..31, 0..7] of UInt32; |
FDigest: array[0..16] of UInt32; |
FTap: UInt32; |
protected |
procedure DoInit; override; |
procedure DoTransform(Buffer: PUInt32Array); override; |
procedure DoDone; override; |
procedure DoPull; |
public |
function Digest: PUInt8Array; override; |
class function DigestSize: UInt32; override; |
class function BlockSize: UInt32; override; // 32 |
end; |
THashBaseWhirlpool = class(TDECHashExtended) |
private |
FDigest: array[0..15] of UInt32; |
FTableC: Pointer; |
FTableR: Pointer; |
protected |
procedure DoTransform(Buffer: PUInt32Array); override; |
procedure DoDone; override; |
public |
function Digest: PUInt8Array; override; |
class function DigestSize: UInt32; override; |
class function BlockSize: UInt32; override; |
end; |
/// <summary> |
/// This is the original variant of the algorithmus. Do not use it as some |
/// security flaw has been detected early on by its inventors. DEC contains |
/// it for backwards compatibility and completeness. |
/// </summary> |
THash_Whirlpool0 = class(THashBaseWhirlpool) |
protected |
procedure DoInit; override; |
end; |
/// <summary> |
/// This is variant of the algorithmus fixing the security flaw of the |
/// original version Whirlpool0. Do not use it in new code as it has been |
/// superseeded by the optimized Whirlpool1 (THash_Whirlpool1 class in DEC) |
/// variant which is additionally more safe as well! It is there for |
/// backwards compatibility and completeness only. |
/// </summary> |
THash_WhirlpoolT = class(THashBaseWhirlpool) |
protected |
procedure DoInit; override; |
end; |
/// <summary> |
/// The current version of Whirlpool but not the one used in code developed |
/// against the older DEC 5.x versions. The name of the one used in your |
/// code differs, depending whether you opt tu use the old DEC 5.2 compatible |
/// class names where the name Whirlpool1 was already taken by the variant |
/// nowadays known as Whirlpool-T. |
/// </summary> |
THash_Whirlpool1_ = class(THashBaseWhirlpool) |
protected |
procedure DoInit; override; |
end; |
{$IFDEF OLD_WHIRLPOOL_NAMES} |
/// <summary> |
/// This is the original variant of the algorithmus. Do not use it as some |
/// security flaw has been detected early on by its inventors. DEC contains |
/// it for backwards compatibility and completeness. |
/// </summary> |
THash_Whirlpool = class(THash_Whirlpool0); |
/// <summary> |
/// This is variant of the algorithmus fixing the security flaw of the |
/// original version Whirlpool0. Do not use it in new code as it has been |
/// superseeded by the optimized Whirlpool1 (THash_Whirlpool1 class in DEC) |
/// variant which is additionally more safe as well! It is there for |
/// backwards compatibility and completeness only. |
/// </summary> |
THash_Whirlpool1 = class(THash_WhirlpoolT); |
/// <summary> |
/// The current version of Whirlpool but not the one used in code developed |
/// against the older DEC 5.x versions. The name of the one used in your |
/// code differs, depending whether you opt tu use the old DEC 5.2 compatible |
/// class names where the name Whirlpool1 was already taken by the variant |
/// nowadays known as Whirlpool-T. |
/// </summary> |
THash_Whirlpool1New = class(THash_Whirlpool1_); |
{$ELSE} |
/// <summary> |
/// The current version of Whirlpool but not the one used in code developed |
/// against the older DEC 5.x versions. The name of the one used in your |
/// code differs, depending whether you opt tu use the old DEC 5.2 compatible |
/// class names where the name Whirlpool1 was already taken by the variant |
/// nowadays known as Whirlpool-T. |
/// </summary> |
THash_Whirlpool1 = class(THash_Whirlpool1_); |
{$ENDIF} |
THash_Square = class(TDECHashExtended) |
private |
FDigest: array[0..3] of UInt32; |
protected |
procedure DoInit; override; |
procedure DoTransform(Buffer: PUInt32Array); override; |
procedure DoDone; override; |
public |
function Digest: PUInt8Array; override; |
class function DigestSize: UInt32; override; |
class function BlockSize: UInt32; override; |
end; |
/// <summary> |
/// This 1990 developed hash function was named after the Egyptian Pharaoh |
/// Sneferu. Be sure to set SecurityLevel to at least 8. See remark there. |
/// </summary> |
THashBaseSnefru = class(TDECHashExtended, IDECHashRounds) |
private |
FDigest: array[0..23] of UInt32; |
/// <summary> |
/// Number of rounds the loop will do on the data. |
/// UInt32 for compatibility with 32 bit ASM implementation |
/// </summary> |
FRounds: UInt32; |
/// <summary> |
/// Sets the number of rounds for the looping over the data |
/// </summary> |
procedure SetRounds(Value: UInt32); |
function GetRounds: UInt32; |
protected |
procedure DoInit; override; |
procedure DoDone; override; |
public |
function Digest: PUInt8Array; override; |
/// Returns the minimum possible number for the rounds parameter. |
/// Value depends on Digest size which depends on concrete implementation |
/// </summary> |
function GetMinRounds: UInt32; |
/// Returns the maximum possible number for the rounds parameter. |
/// Value depends on Digest size which depends on concrete implementation |
/// </summary> |
function GetMaxRounds: UInt32; |
/// <summary> |
/// Can be set from 2 to 8, default is 8. This is the number of rounds the |
/// algorithm will use. With the default of 8 rounds it is being considered |
/// as safe as of spring 2016, with less rounds this algorithm is considered |
/// to be unsafe and even with 8 rounds it is not really strong. |
/// </summary> |
property Rounds: UInt32 |
read GetRounds |
write SetRounds; |
end; |
/// <summary> |
/// This 1990 developed hash function was named after the Egyptian Pharaoh |
/// Sneferu. Be sure to set SecurityLevel to at least 8. See remark for |
/// THashBaseSnefru.SecurityLevel. |
/// </summary> |
THash_Snefru128 = class(THashBaseSnefru) |
protected |
procedure DoTransform(Buffer: PUInt32Array); override; |
public |
class function DigestSize: UInt32; override; |
class function BlockSize: UInt32; override; // 48 |
end; |
/// <summary> |
/// This 1990 developed hash function was named after the Egyptian Pharaoh |
/// Sneferu. Be sure to set SecurityLevel to at least 8. See remark |
/// THashBaseSnefru.SecurityLevel. |
/// </summary> |
THash_Snefru256 = class(THashBaseSnefru) |
protected |
procedure DoTransform(Buffer: PUInt32Array); override; |
public |
class function DigestSize: UInt32; override; |
class function BlockSize: UInt32; override; // 32 |
end; |
THash_Sapphire = class(TDECHashExtended) |
private |
FCards: array[0..255] of UInt32; |
FDigest: array[0..15] of UInt32; |
FRotor: UInt32; |
FRatchet: UInt32; |
FAvalanche: UInt32; |
FPlain: UInt32; |
FCipher: UInt32; |
FDigestSize: UInt8; |
/// <summary> |
/// Set the length of the output hash value in byte. |
/// </summary> |
/// <param name="Value"> |
/// Minimum value is 1 byte, maximum value is 64 byte = 512 bit. |
/// Sets the size to the default size returned by DigestSize otherwise. |
/// is specified. |
/// </param> |
procedure SetDigestSize(Value: UInt8); |
protected |
procedure DoInit; override; |
procedure DoDone; override; |
procedure DoTransform(Buffer: PUInt32Array); override; |
public |
function Digest: PUInt8Array; override; |
function DigestAsBytes: TBytes; override; |
/// <summary> |
/// Returns the default digest/hash size in bit. If RequestedDigestSize is |
/// not set, the defauilt size returned here is being used. |
/// </summary> |
class function DigestSize: UInt32; override; |
/// <summary> |
/// Returns on which block size this algorithm operates. Since the Sapphire |
/// hash originates from a Sapphire stream cipher algorithm this is always 1. |
/// </summary> |
class function BlockSize: UInt32; override; |
procedure Calc(const Data; DataSize: Integer); override; |
/// <summary> |
/// This property defines the length of the output from the hash calculation |
/// in byte. The maximum value is 64 byte = 512 bit. Values bigger 64 byte |
/// and a value of 0 lead to the default size returned by DigestSize otherwise. |
/// This setting is only respected by the DigestAsBytes method and all other |
/// convenience methods using that one like CalcStream, CalcString, |
/// DigestAsString or DigestAsRawString. |
/// </summary> |
property RequestedDigestSize: UInt8 |
read FDigestSize |
write SetDigestSize; |
end; |
/// <summary> |
/// Implementation of the bcrypt password hash algorithm. Maximum password |
/// length is 72 byte. When encoding typed in passwords in UTF8 that can mean |
/// 18 chars in worst case of all typed chars being encoded in 4 byte each |
/// </summary> |
THash_BCrypt = class(TDECPasswordHash) |
private |
type |
TBFBlock = packed array[0..7] of UInt8; |
PBFBlock = ^TBFBlock; |
TBCDigest = packed array[0..23] of byte; |
TBF2Long = packed record |
L,R: UInt32; |
end; |
/// <summary> |
/// user supplied IncCTR proc |
/// </summary> |
TBFIncProc = procedure(var CTR: TBFBlock); |
TBFContext = packed record |
/// <summary> |
/// key dependend SBox: 0..3, 0..255 |
/// </summary> |
SBox : TBlowfishMatrix; |
/// <summary> |
/// key dependend PArray |
/// </summary> |
PArray : TBlowfishKey; |
/// <summary> |
/// InitVector or CTR |
/// </summary> |
IV : TBFBlock; |
/// <summary> |
/// Working buffer |
/// </summary> |
buf : TBFBlock; |
/// <summary> |
/// Bytes used in buf |
/// </summary> |
bLen : UInt16; |
/// <summary> |
/// Bit 1: Short block |
/// </summary> |
Flag : UInt16; |
/// <summary> |
/// Increment proc CTR-Mode |
/// </summary> |
IncProc : TBFIncProc; |
end; |
/// <summary> |
/// Parts of the BSD/Crypt style password storage for BCrypt |
/// </summary> |
TBCryptBSDData = record |
/// <summary> |
/// Algorithm ID |
/// </summary> |
ID : string; |
/// <summary> |
/// Salt in Crypt encoding |
/// </summary> |
Salt : string; |
/// <summary> |
/// Cost factor |
/// </summary> |
Cost : string; |
end; |
var |
/// <summary> |
/// The calculated hash value |
/// Should have been 192 bit = 24 byte, but original author's |
/// imnplementation had a flaw not returning the last byte, which has |
/// been kept instead of fixing it. Thus DigestSize returns 23 instead |
/// of 24! |
/// </summary> |
FDigest : array[0..23] of Byte; |
/// <summary> |
/// Context with the working data used by all the initialization and |
/// calculation methods |
/// </summary> |
FContext : TBFContext; |
/// <summary> |
/// Cost factor which might be used to adapt the algorithm to increased |
/// processing power. |
/// </summary> |
FCost : UInt8; |
/// <summary> |
/// Sets the cost factor. Throws an EDECHashException when a value of 0 |
/// is to be set. |
/// </summary> |
/// <exception cref="EDECHashException"> |
/// Exception raised if <c>Value</c> is lower than <c>MinCost</c> or |
/// higher than <c>MaxCost</c>. |
/// </exception> |
procedure SetCost(const Value: UInt8); |
/// <summary> |
/// Special setup for the bcrypt variant of the blowfish implementation. |
/// Designed to be unavoidably slow. |
/// </summary> |
/// <param name="Password"> |
/// Password from which the salt shall be calculated |
/// </param> |
/// <param name="PasswordSize"> |
/// Length of the password in byte |
/// </param> |
procedure EksBlowfishSetup(var Password: TBytes; |
PasswordSize: Integer); |
/// <summary> |
/// Expensive key setup for Blowfish |
/// </summary> |
/// <param name="Salt"> |
/// Needed as parameter here as something else than FSalt has to be |
/// passed sometimes. |
/// </param> |
/// <param name="Password"> |
/// Password from which the salt shall be calculated |
/// </param> |
/// <param name="PasswordSize"> |
/// Length of the password in byte |
/// </param> |
procedure Expandkey(Salt : TBytes; |
var Password : TBytes; |
PasswordSize : Integer); |
/// <summary> |
/// Encrypt one block (in ECB mode) |
/// </summary> |
procedure BF_Encrypt(const BI: TBFBlock; var BO: TBFBlock); |
/// <summary> |
/// xors two blocks and returns the result in a 3rd one result in third |
/// </summary> |
/// <param name="B1"> |
/// 1st block to xor |
/// </param> |
/// <param name="B2"> |
/// 2nd block to xor |
/// </param> |
/// <param name="B3"> |
/// Block to store the result in |
/// </param> |
procedure BF_XorBlock(const B1, B2: TBFBlock; var B3: TBFBlock); |
/// <summary> |
/// Splits a given Crypt/BSD style password record into its parts |
/// </summary> |
/// <param name="Vector"> |
/// Data to split |
/// </param> |
/// <param name="SplittedData"> |
/// Data splitted in ID, Cost and Salt |
/// </param> |
/// <returns> |
/// true if splitting resulted in the right number of parts, |
/// otherwise false |
/// </returns> |
function SplitTestVector(const Vector : string; |
var SplittedData : TBCryptBSDData):Boolean; |
strict protected |
procedure DoInit; override; |
procedure DoTransform(Buffer: PUInt32Array); override; |
procedure DoDone; override; |
{$Region CryptFormat} |
/// <summary> |
/// Returns the ID code for Crypt/BSD like storing of passwords. |
/// </summary> |
/// <returns> |
/// A Crypt/BSD ID |
/// </returns> |
class function GetCryptID:string; override; |
/// <summary> |
/// Returns the parameters required for the crypt-like password storing |
/// in that format. |
/// </summary> |
/// <param name="Params"> |
/// In case of BCrypt this has to be the numeric integer value of "Cost". |
/// This method will ensure it is prefixed with 0 when having too few chars |
/// </param> |
/// <param name="Format"> |
/// Format class for formatting the output |
/// </param> |
function GetCryptParams(const Params : string; |
Format : TDECFormatClass):string; override; |
/// <summary> |
/// Returns the hash required for the crypt-like password storing |
/// in that format. If a salt etc. is needed that needs to be specified |
/// before calling this method. |
/// </summary> |
/// <param name="Password"> |
/// Password entered which shall be hashed. |
/// </param> |
/// <param name="Params"> |
/// In case of BCrypt this has to be the numeric integer value of "Cost" |
/// </param> |
/// <param name="Salt"> |
/// Salt value used by the password hash calculation in binary raw format, |
/// means not Radix64 encoded or so. |
/// </param> |
/// <param name="Format"> |
/// Format class for formatting the output |
/// </param> |
/// <returns> |
/// Calculated hash value |
/// </returns> |
function GetCryptHash(Password : TBytes; |
const Params : string; |
const Salt : TBytes; |
Format : TDECFormatClass):string; override; |
{$EndRegion} |
public |
/// <summary> |
/// Initialize internal fields |
/// </summary> |
constructor Create; override; |
/// <summary> |
/// Returns the maximum supported length of the salt value in byte |
/// </summary> |
function MaxSaltLength:UInt8; override; |
/// <summary> |
/// Returns the minimum supported length of the salt value in byte |
/// </summary> |
function MinSaltLength:UInt8; override; |
/// <summary> |
/// Returns the maximum length of a user supplied password given for the |
/// algorithm in byte |
/// </summary> |
/// <remarks> |
/// For BCrypt version "2a" it is specified that the password ends with a |
/// null-terminator, which will be added internally in our implementation |
/// </remarks> |
class function MaxPasswordLength:UInt8; override; |
/// <summary> |
/// Returns the minimum allowed value for the Cost property |
/// </summary> |
function MinCost:UInt8; |
/// <summary> |
/// Returns the maximum allowed value for the Cost property |
/// </summary> |
function MaxCost:UInt8; |
// /// <summary> |
// /// Checks whether a given password is the correct one for a password |
// /// storage "record"/entry in Crypt/BSD format. |
// /// </summary> |
// /// <param name="Password"> |
// /// Password to check for validity |
// /// </param> |
// /// <param name="CryptData"> |
// /// The data needed to "compare" the password against in Crypt/BSD like |
// /// format: $<id>[$<param>=<value>(,<param>=<value>)*][$<salt>[$<hash>]] |
// /// </param> |
// /// <param name="Format"> |
// /// Must be the right type for the Crypt/BSD encoding used by the |
// /// algorithm used. This was implemented this way to avoid making the |
// /// DECHashAuthentication unit dependant on the DECFormat unit not needed |
// /// otherwise. |
// /// </param> |
// /// <returns> |
// /// True if the password given is correct. |
// /// </returns> |
// function IsValidPassword(const Password : string; |
// const CryptData : string; |
// Format : TDECFormatClass): Boolean; override; |
/// <summary> |
/// Checks whether a given password is the correct one for a password |
/// storage "record"/entry in Crypt/BSD format. |
/// </summary> |
/// <param name="Password"> |
/// Password to check for validity |
/// </param> |
/// <param name="CryptData"> |
/// The data needed to "compare" the password against in Crypt/BSD like |
/// format: $<id>[$<param>=<value>(,<param>=<value>)*][$<salt>[$<hash>]] |
/// </param> |
/// <param name="Format"> |
/// Must be the right type for the Crypt/BSD encoding used by the |
/// algorithm used. This was implemented this way to avoid making the |
/// DECHashAuthentication unit dependant on the DECFormat unit not needed |
/// otherwise. |
/// </param> |
/// <returns> |
/// True if the password given is correct. |
/// </returns> |
function IsValidPassword(Password : TBytes; |
const CryptData : string; |
Format : TDECFormatClass): Boolean; override; |
/// <summary> |
/// Processes one chunk of data to be hashed. |
/// </summary> |
/// <param name="Data"> |
/// Data on which the hash value shall be calculated on |
/// </param> |
/// <param name="DataSize"> |
/// Size of the data in bytes |
/// </param> |
/// <exception cref="EDECHashException"> |
/// Exception raised if <c>DataSize</c> is higher than |
/// <c>MaxPasswordLength</c> or if a salt with a different length than |
/// 128 bit has been specified. |
/// </exception> |
procedure Calc(const Data; DataSize: Integer); override; |
function Digest: PUInt8Array; override; |
class function DigestSize: UInt32; override; |
class function BlockSize: UInt32; override; |
/// <summary> |
/// Defines the cost factor of the calculation. Real factor will be 2^Cost. |
/// This is used to adapt to increasing CPU power and must be stored along |
/// with the hash value and salt to be able to verify a password against it. |
/// Value must be between 4 and 31, other values will raise a |
/// EDECHashException |
/// </summary> |
/// <exception cref="EDECHashException"> |
/// Exception raised if a value outside of the range 4..31 is given. |
/// </exception> |
property Cost: UInt8 |
read FCost |
write SetCost; |
end; |
implementation |
{$IFOPT Q+}{$DEFINE RESTORE_OVERFLOWCHECKS}{$Q-}{$ENDIF} |
{$IFOPT R+}{$DEFINE RESTORE_RANGECHECKS}{$R-}{$ENDIF} |
uses |
DECData, DECDataHash; |
{$IFDEF X86ASM} |
{$DEFINE INCLUDED} // allows having the DECHash.inc in the IDE's project manager |
{$INCLUDE DECHash.asm86.inc} |
{$ENDIF !X86ASM} |
{ Speed comparison of ASM vs. PurePascal Implementation. Valid only for Win32 compiler |
and this was for DEC 5.1 and thus compiler versions < D2009! |
assembler pascal |
THash_SHA512 : 85.1 cycles/byte 17.62 Mb/sec 220.9 cycles/byte 6.79 Mb/sec 159% |
THash_SHA384 : 85.2 cycles/byte 17.61 Mb/sec 220.0 cycles/byte 6.82 Mb/sec 158% |
THash_Tiger : 24.6 cycles/byte 60.98 Mb/sec 60.7 cycles/byte 24.69 Mb/sec 147% |
THash_Haval128 : 13.3 cycles/byte 112.55 Mb/sec 26.0 cycles/byte 57.77 Mb/sec 95% |
THash_SHA1 : 20.1 cycles/byte 74.80 Mb/sec 36.1 cycles/byte 41.51 Mb/sec 80% |
THash_SHA : 20.0 cycles/byte 75.03 Mb/sec 35.5 cycles/byte 42.21 Mb/sec 78% |
THash_Haval160 : 13.2 cycles/byte 113.30 Mb/sec 22.7 cycles/byte 66.12 Mb/sec 71% |
THash_Haval256 : 25.9 cycles/byte 57.84 Mb/sec 40.5 cycles/byte 37.07 Mb/sec 56% |
THash_Snefru128 : 159.7 cycles/byte 9.39 Mb/sec 248.2 cycles/byte 6.04 Mb/sec 55% |
THash_Snefru256 : 239.3 cycles/byte 6.27 Mb/sec 367.9 cycles/byte 4.08 Mb/sec 54% |
THash_RipeMD256 : 14.5 cycles/byte 103.16 Mb/sec 21.4 cycles/byte 70.08 Mb/sec 47% |
THash_MD4 : 5.8 cycles/byte 256.73 Mb/sec 8.5 cycles/byte 176.92 Mb/sec 45% |
THash_MD2 : 251.6 cycles/byte 5.96 Mb/sec 366.1 cycles/byte 4.10 Mb/sec 45% |
THash_RipeMD128 : 15.2 cycles/byte 98.89 Mb/sec 21.2 cycles/byte 70.61 Mb/sec 40% |
THash_RipeMD320 : 25.5 cycles/byte 58.73 Mb/sec 35.8 cycles/byte 41.87 Mb/sec 40% |
THash_MD5 : 8.9 cycles/byte 169.43 Mb/sec 11.4 cycles/byte 131.01 Mb/sec 29% |
THash_RipeMD160 : 26.5 cycles/byte 56.66 Mb/sec 31.4 cycles/byte 47.79 Mb/sec 19% |
THash_Square : 44.7 cycles/byte 33.58 Mb/sec 53.1 cycles/byte 28.23 Mb/sec 19% |
THash_Haval192 : 32.5 cycles/byte 46.17 Mb/sec 37.6 cycles/byte 39.87 Mb/sec 18% |
THash_WhirlpoolT: 104.9 cycles/byte 14.30 Mb/sec 122.8 cycles/byte 12.22 Mb/sec 17% |
THash_Whirlpool0: 104.7 cycles/byte 14.33 Mb/sec 119.9 cycles/byte 12.51 Mb/sec 15% |
THash_Sapphire : 52.9 cycles/byte 28.35 Mb/sec 53.8 cycles/byte 27.86 Mb/sec 2% |
THash_Haval224 : 32.0 cycles/byte 46.82 Mb/sec 32.3 cycles/byte 46.46 Mb/sec 1% |
THash_SHA256 : 47.8 cycles/byte 31.35 Mb/sec 47.8 cycles/byte 31.39 Mb/sec 0% |
THash_Panama : 8.9 cycles/byte 169.01 Mb/sec 7.3 cycles/byte 206.55 Mb/sec -18% |
} |
resourcestring |
/// <summary> |
/// Failure message when a hash algorithm is initialized with wrong parameters |
/// </summary> |
sHashInitFailure = 'Invalid %0:s algorithm initialization parameters '+ |
'specified: %1:s'; |
/// <summary> |
/// Failure message when absorb is callt with a bitlength not divideable by 8 |
/// without reminder or when it is called while already in squeezing state |
/// </summary> |
sSHA3AbsorbFailure = 'Absorb: number of bits mod 8 <> 0 or squeezing active. '+ |
'Bits: %0:d, Squeezing: %1:s'; |
/// <summary> |
/// Part of the failure message shown when setting HashSize of Shake |
/// algorithms to 0. |
/// </summary> |
sHashOutputLength0 = 'HashSize must not be 0'; |
/// <summary> |
/// Some password hash algorithms have a cost factor to be able to adopt |
/// them to increasing CPU power. This text is the exception message when |
/// the user specifies 0 for this. |
/// </summary> |
sCostFactorInvalid = 'Specified cost factor must be in the range of %0:d-%1:d'; |
/// <summary> |
/// Exception message for password hashes when a too long password is specified |
/// </summary> |
sPasswordTooLong = 'Password to be hashed is too long. Max. length: %0:d bytes'; |
/// <summary> |
/// Exception message for password hashes requiring a salt when a salt value |
/// which is either too short or too long has been specified |
/// </summary> |
sWrongSaltLength = 'Length of specified salt value must be between %0:d '+ |
'and %1:d bytes'; |
{ THash_MD2 } |
{$IFNDEF THash_MD2_asm} |
procedure THash_MD2.DoTransform(Buffer: PUInt32Array); |
var |
I, J, T: UInt32; |
begin |
for I := 0 to 3 do |
begin |
PUInt32Array(@FDigest[16])[I] := Buffer[I]; |
PUInt32Array(@FDigest[32])[I] := PUInt32Array(@FDigest[0])[I] xor PUInt32Array(@FDigest[16])[I]; |
end; |
T := FDigest[63]; |
for I := 0 to 15 do |
begin |
T := FDigest[I + 48] xor MD2_PISubst[FDigest[I + 16] xor Byte(T)]; |
FDigest[I + 48] := Byte(T); |
end; |
T := 0; |
for I := 0 to 17 do |
begin |
for J := 0 to 47 do |
begin |
T := FDigest[J] xor MD2_PISubst[T]; |
FDigest[J] := Byte(T); |
end; |
T := (T + I) and $FF; |
end; |
end; |
{$ENDIF !THash_MD2_asm} |
procedure THash_MD2.DoInit; |
begin |
FillChar(FDigest, SizeOf(FDigest), 0); |
end; |
procedure THash_MD2.DoDone; |
var |
Remain: Integer; |
begin |
Remain := FBufferSize - FBufferIndex; |
FillChar(FBuffer[FBufferIndex], Remain, Remain); |
DoTransform(Pointer(FBuffer)); |
Move(FDigest[48], FBuffer^, FBufferSize); |
DoTransform(Pointer(FBuffer)); |
end; |
function THash_MD2.Digest: PUInt8Array; |
begin |
Result := @FDigest; |
end; |
class function THash_MD2.DigestSize: UInt32; |
begin |
Result := 16; |
end; |
class function THash_MD2.BlockSize: UInt32; |
begin |
Result := 16; |
end; |
{ THashBaseMD4 } |
procedure THashBaseMD4.DoInit; |
begin |
FDigest[0] := $67452301; |
FDigest[1] := $EFCDAB89; |
FDigest[2] := $98BADCFE; |
FDigest[3] := $10325476; |
FDigest[4] := $C3D2E1F0; |
FDigest[5] := $76543210; |
FDigest[6] := $FEDCBA98; |
FDigest[7] := $89ABCDEF; |
FDigest[8] := $01234567; |
FDigest[9] := $3C2D1E0F; |
end; |
procedure THashBaseMD4.DoDone; |
begin |
if FCount[2] or FCount[3] <> 0 then |
RaiseHashOverflowError; |
if FPaddingByte = 0 then |
FPaddingByte := $80; |
FBuffer[FBufferIndex] := FPaddingByte; |
Inc(FBufferIndex); |
if FBufferIndex > FBufferSize - 8 then |
begin |
FillChar(FBuffer[FBufferIndex], FBufferSize - FBufferIndex, 0); |
DoTransform(Pointer(FBuffer)); |
FBufferIndex := 0; |
end; |
FillChar(FBuffer[FBufferIndex], FBufferSize - FBufferIndex, 0); |
Move(FCount, FBuffer[FBufferSize - 8], 8); |
DoTransform(Pointer(FBuffer)); |
end; |
function THashBaseMD4.Digest: PUInt8Array; |
begin |
Result := @FDigest; |
end; |
class function THashBaseMD4.DigestSize: UInt32; |
begin |
Result := 16; |
end; |
class function THashBaseMD4.BlockSize: UInt32; |
begin |
Result := 64; |
end; |
{ THash_MD4 } |
{$IFNDEF THash_MD4_asm} |
procedure THash_MD4.DoTransform(Buffer: PUInt32Array); |
const |
S1 = $5A827999; |
S2 = $6ED9EBA1; |
var |
A, B, C, D: UInt32; |
begin |
A := FDigest[0]; |
B := FDigest[1]; |
C := FDigest[2]; |
D := FDigest[3]; |
Inc(A, B and C or not B and D + Buffer[ 0]); A := A shl 3 or A shr 29; |
Inc(D, A and B or not A and C + Buffer[ 1]); D := D shl 7 or D shr 25; |
Inc(C, D and A or not D and B + Buffer[ 2]); C := C shl 11 or C shr 21; |
Inc(B, C and D or not C and A + Buffer[ 3]); B := B shl 19 or B shr 13; |
Inc(A, B and C or not B and D + Buffer[ 4]); A := A shl 3 or A shr 29; |
Inc(D, A and B or not A and C + Buffer[ 5]); D := D shl 7 or D shr 25; |
Inc(C, D and A or not D and B + Buffer[ 6]); C := C shl 11 or C shr 21; |
Inc(B, C and D or not C and A + Buffer[ 7]); B := B shl 19 or B shr 13; |
Inc(A, B and C or not B and D + Buffer[ 8]); A := A shl 3 or A shr 29; |
Inc(D, A and B or not A and C + Buffer[ 9]); D := D shl 7 or D shr 25; |
Inc(C, D and A or not D and B + Buffer[10]); C := C shl 11 or C shr 21; |
Inc(B, C and D or not C and A + Buffer[11]); B := B shl 19 or B shr 13; |
Inc(A, B and C or not B and D + Buffer[12]); A := A shl 3 or A shr 29; |
Inc(D, A and B or not A and C + Buffer[13]); D := D shl 7 or D shr 25; |
Inc(C, D and A or not D and B + Buffer[14]); C := C shl 11 or C shr 21; |
Inc(B, C and D or not C and A + Buffer[15]); B := B shl 19 or B shr 13; |
Inc(A, B and C or B and D or C and D + Buffer[ 0] + S1); A := A shl 3 or A shr 29; |
Inc(D, A and B or A and C or B and C + Buffer[ 4] + S1); D := D shl 5 or D shr 27; |
Inc(C, D and A or D and B or A and B + Buffer[ 8] + S1); C := C shl 9 or C shr 23; |
Inc(B, C and D or C and A or D and A + Buffer[12] + S1); B := B shl 13 or B shr 19; |
Inc(A, B and C or B and D or C and D + Buffer[ 1] + S1); A := A shl 3 or A shr 29; |
Inc(D, A and B or A and C or B and C + Buffer[ 5] + S1); D := D shl 5 or D shr 27; |
Inc(C, D and A or D and B or A and B + Buffer[ 9] + S1); C := C shl 9 or C shr 23; |
Inc(B, C and D or C and A or D and A + Buffer[13] + S1); B := B shl 13 or B shr 19; |
Inc(A, B and C or B and D or C and D + Buffer[ 2] + S1); A := A shl 3 or A shr 29; |
Inc(D, A and B or A and C or B and C + Buffer[ 6] + S1); D := D shl 5 or D shr 27; |
Inc(C, D and A or D and B or A and B + Buffer[10] + S1); C := C shl 9 or C shr 23; |
Inc(B, C and D or C and A or D and A + Buffer[14] + S1); B := B shl 13 or B shr 19; |
Inc(A, B and C or B and D or C and D + Buffer[ 3] + S1); A := A shl 3 or A shr 29; |
Inc(D, A and B or A and C or B and C + Buffer[ 7] + S1); D := D shl 5 or D shr 27; |
Inc(C, D and A or D and B or A and B + Buffer[11] + S1); C := C shl 9 or C shr 23; |
Inc(B, C and D or C and A or D and A + Buffer[15] + S1); B := B shl 13 or B shr 19; |
Inc(A, B xor C xor D + Buffer[ 0] + S2); A := A shl 3 or A shr 29; |
Inc(D, A xor B xor C + Buffer[ 8] + S2); D := D shl 9 or D shr 23; |
Inc(C, D xor A xor B + Buffer[ 4] + S2); C := C shl 11 or C shr 21; |
Inc(B, C xor D xor A + Buffer[12] + S2); B := B shl 15 or B shr 17; |
Inc(A, B xor C xor D + Buffer[ 2] + S2); A := A shl 3 or A shr 29; |
Inc(D, A xor B xor C + Buffer[10] + S2); D := D shl 9 or D shr 23; |
Inc(C, D xor A xor B + Buffer[ 6] + S2); C := C shl 11 or C shr 21; |
Inc(B, C xor D xor A + Buffer[14] + S2); B := B shl 15 or B shr 17; |
Inc(A, B xor C xor D + Buffer[ 1] + S2); A := A shl 3 or A shr 29; |
Inc(D, A xor B xor C + Buffer[ 9] + S2); D := D shl 9 or D shr 23; |
Inc(C, D xor A xor B + Buffer[ 5] + S2); C := C shl 11 or C shr 21; |
Inc(B, C xor D xor A + Buffer[13] + S2); B := B shl 15 or B shr 17; |
Inc(A, B xor C xor D + Buffer[ 3] + S2); A := A shl 3 or A shr 29; |
Inc(D, A xor B xor C + Buffer[11] + S2); D := D shl 9 or D shr 23; |
Inc(C, D xor A xor B + Buffer[ 7] + S2); C := C shl 11 or C shr 21; |
Inc(B, C xor D xor A + Buffer[15] + S2); B := B shl 15 or B shr 17; |
Inc(FDigest[0], A); |
Inc(FDigest[1], B); |
Inc(FDigest[2], C); |
Inc(FDigest[3], D); |
end; |
{$ENDIF} |
{ THash_MD5 } |
{$IFNDEF THash_MD5_asm} |
procedure THash_MD5.DoTransform(Buffer: PUInt32Array); |
var |
A, B, C, D: UInt32; |
begin |
A := FDigest[0]; |
B := FDigest[1]; |
C := FDigest[2]; |
D := FDigest[3]; |
Inc(A, Buffer[ 0] + $D76AA478 + (D xor (B and (C xor D)))); A := A shl 7 or A shr 25 + B; |
Inc(D, Buffer[ 1] + $E8C7B756 + (C xor (A and (B xor C)))); D := D shl 12 or D shr 20 + A; |
Inc(C, Buffer[ 2] + $242070DB + (B xor (D and (A xor B)))); C := C shl 17 or C shr 15 + D; |
Inc(B, Buffer[ 3] + $C1BDCEEE + (A xor (C and (D xor A)))); B := B shl 22 or B shr 10 + C; |
Inc(A, Buffer[ 4] + $F57C0FAF + (D xor (B and (C xor D)))); A := A shl 7 or A shr 25 + B; |
Inc(D, Buffer[ 5] + $4787C62A + (C xor (A and (B xor C)))); D := D shl 12 or D shr 20 + A; |
Inc(C, Buffer[ 6] + $A8304613 + (B xor (D and (A xor B)))); C := C shl 17 or C shr 15 + D; |
Inc(B, Buffer[ 7] + $FD469501 + (A xor (C and (D xor A)))); B := B shl 22 or B shr 10 + C; |
Inc(A, Buffer[ 8] + $698098D8 + (D xor (B and (C xor D)))); A := A shl 7 or A shr 25 + B; |
Inc(D, Buffer[ 9] + $8B44F7AF + (C xor (A and (B xor C)))); D := D shl 12 or D shr 20 + A; |
Inc(C, Buffer[10] + $FFFF5BB1 + (B xor (D and (A xor B)))); C := C shl 17 or C shr 15 + D; |
Inc(B, Buffer[11] + $895CD7BE + (A xor (C and (D xor A)))); B := B shl 22 or B shr 10 + C; |
Inc(A, Buffer[12] + $6B901122 + (D xor (B and (C xor D)))); A := A shl 7 or A shr 25 + B; |
Inc(D, Buffer[13] + $FD987193 + (C xor (A and (B xor C)))); D := D shl 12 or D shr 20 + A; |
Inc(C, Buffer[14] + $A679438E + (B xor (D and (A xor B)))); C := C shl 17 or C shr 15 + D; |
Inc(B, Buffer[15] + $49B40821 + (A xor (C and (D xor A)))); B := B shl 22 or B shr 10 + C; |
Inc(A, Buffer[ 1] + $F61E2562 + (C xor (D and (B xor C)))); A := A shl 5 or A shr 27 + B; |
Inc(D, Buffer[ 6] + $C040B340 + (B xor (C and (A xor B)))); D := D shl 9 or D shr 23 + A; |
Inc(C, Buffer[11] + $265E5A51 + (A xor (B and (D xor A)))); C := C shl 14 or C shr 18 + D; |
Inc(B, Buffer[ 0] + $E9B6C7AA + (D xor (A and (C xor D)))); B := B shl 20 or B shr 12 + C; |
Inc(A, Buffer[ 5] + $D62F105D + (C xor (D and (B xor C)))); A := A shl 5 or A shr 27 + B; |
Inc(D, Buffer[10] + $02441453 + (B xor (C and (A xor B)))); D := D shl 9 or D shr 23 + A; |
Inc(C, Buffer[15] + $D8A1E681 + (A xor (B and (D xor A)))); C := C shl 14 or C shr 18 + D; |
Inc(B, Buffer[ 4] + $E7D3FBC8 + (D xor (A and (C xor D)))); B := B shl 20 or B shr 12 + C; |
Inc(A, Buffer[ 9] + $21E1CDE6 + (C xor (D and (B xor C)))); A := A shl 5 or A shr 27 + B; |
Inc(D, Buffer[14] + $C33707D6 + (B xor (C and (A xor B)))); D := D shl 9 or D shr 23 + A; |
Inc(C, Buffer[ 3] + $F4D50D87 + (A xor (B and (D xor A)))); C := C shl 14 or C shr 18 + D; |
Inc(B, Buffer[ 8] + $455A14ED + (D xor (A and (C xor D)))); B := B shl 20 or B shr 12 + C; |
Inc(A, Buffer[13] + $A9E3E905 + (C xor (D and (B xor C)))); A := A shl 5 or A shr 27 + B; |
Inc(D, Buffer[ 2] + $FCEFA3F8 + (B xor (C and (A xor B)))); D := D shl 9 or D shr 23 + A; |
Inc(C, Buffer[ 7] + $676F02D9 + (A xor (B and (D xor A)))); C := C shl 14 or C shr 18 + D; |
Inc(B, Buffer[12] + $8D2A4C8A + (D xor (A and (C xor D)))); B := B shl 20 or B shr 12 + C; |
Inc(A, Buffer[ 5] + $FFFA3942 + (B xor C xor D)); A := A shl 4 or A shr 28 + B; |
Inc(D, Buffer[ 8] + $8771F681 + (A xor B xor C)); D := D shl 11 or D shr 21 + A; |
Inc(C, Buffer[11] + $6D9D6122 + (D xor A xor B)); C := C shl 16 or C shr 16 + D; |
Inc(B, Buffer[14] + $FDE5380C + (C xor D xor A)); B := B shl 23 or B shr 9 + C; |
Inc(A, Buffer[ 1] + $A4BEEA44 + (B xor C xor D)); A := A shl 4 or A shr 28 + B; |
Inc(D, Buffer[ 4] + $4BDECFA9 + (A xor B xor C)); D := D shl 11 or D shr 21 + A; |
Inc(C, Buffer[ 7] + $F6BB4B60 + (D xor A xor B)); C := C shl 16 or C shr 16 + D; |
Inc(B, Buffer[10] + $BEBFBC70 + (C xor D xor A)); B := B shl 23 or B shr 9 + C; |
Inc(A, Buffer[13] + $289B7EC6 + (B xor C xor D)); A := A shl 4 or A shr 28 + B; |
Inc(D, Buffer[ 0] + $EAA127FA + (A xor B xor C)); D := D shl 11 or D shr 21 + A; |
Inc(C, Buffer[ 3] + $D4EF3085 + (D xor A xor B)); C := C shl 16 or C shr 16 + D; |
Inc(B, Buffer[ 6] + $04881D05 + (C xor D xor A)); B := B shl 23 or B shr 9 + C; |
Inc(A, Buffer[ 9] + $D9D4D039 + (B xor C xor D)); A := A shl 4 or A shr 28 + B; |
Inc(D, Buffer[12] + $E6DB99E5 + (A xor B xor C)); D := D shl 11 or D shr 21 + A; |
Inc(C, Buffer[15] + $1FA27CF8 + (D xor A xor B)); C := C shl 16 or C shr 16 + D; |
Inc(B, Buffer[ 2] + $C4AC5665 + (C xor D xor A)); B := B shl 23 or B shr 9 + C; |
Inc(A, Buffer[ 0] + $F4292244 + (C xor (B or not D))); A := A shl 6 or A shr 26 + B; |
Inc(D, Buffer[ 7] + $432AFF97 + (B xor (A or not C))); D := D shl 10 or D shr 22 + A; |
Inc(C, Buffer[14] + $AB9423A7 + (A xor (D or not B))); C := C shl 15 or C shr 17 + D; |
Inc(B, Buffer[ 5] + $FC93A039 + (D xor (C or not A))); B := B shl 21 or B shr 11 + C; |
Inc(A, Buffer[12] + $655B59C3 + (C xor (B or not D))); A := A shl 6 or A shr 26 + B; |
Inc(D, Buffer[ 3] + $8F0CCC92 + (B xor (A or not C))); D := D shl 10 or D shr 22 + A; |
Inc(C, Buffer[10] + $FFEFF47D + (A xor (D or not B))); C := C shl 15 or C shr 17 + D; |
Inc(B, Buffer[ 1] + $85845DD1 + (D xor (C or not A))); B := B shl 21 or B shr 11 + C; |
Inc(A, Buffer[ 8] + $6FA87E4F + (C xor (B or not D))); A := A shl 6 or A shr 26 + B; |
Inc(D, Buffer[15] + $FE2CE6E0 + (B xor (A or not C))); D := D shl 10 or D shr 22 + A; |
Inc(C, Buffer[ 6] + $A3014314 + (A xor (D or not B))); C := C shl 15 or C shr 17 + D; |
Inc(B, Buffer[13] + $4E0811A1 + (D xor (C or not A))); B := B shl 21 or B shr 11 + C; |
Inc(A, Buffer[ 4] + $F7537E82 + (C xor (B or not D))); A := A shl 6 or A shr 26 + B; |
Inc(D, Buffer[11] + $BD3AF235 + (B xor (A or not C))); D := D shl 10 or D shr 22 + A; |
Inc(C, Buffer[ 2] + $2AD7D2BB + (A xor (D or not B))); C := C shl 15 or C shr 17 + D; |
Inc(B, Buffer[ 9] + $EB86D391 + (D xor (C or not A))); B := B shl 21 or B shr 11 + C; |
Inc(FDigest[0], A); |
Inc(FDigest[1], B); |
Inc(FDigest[2], C); |
Inc(FDigest[3], D); |
end; |
{$ENDIF} |
{ THash_RipeMD128 } |
{$IFNDEF X86ASM} |
const |
RipeS1 = $5A827999; |
RipeS2 = $6ED9EBA1; |
RipeS3 = $8F1BBCDC; |
RipeS4 = $A953FD4E; |
RipeS5 = $50A28BE6; |
RipeS6 = $5C4DD124; |
RipeS7 = $6D703EF3; |
RipeS8 = $7A6D76E9; |
{$ENDIF !X86ASM} |
{$IFNDEF THash_RipeMD128_asm} |
procedure THash_RipeMD128.DoTransform(Buffer: PUInt32Array); |
var |
A1, B1, C1, D1: UInt32; |
A2, B2, C2, D2: UInt32; |
T: UInt32; |
begin |
A1 := FDigest[0]; |
B1 := FDigest[1]; |
C1 := FDigest[2]; |
D1 := FDigest[3]; |
A2 := FDigest[0]; |
B2 := FDigest[1]; |
C2 := FDigest[2]; |
D2 := FDigest[3]; |
Inc(A1, B1 xor C1 xor D1 + Buffer[ 0]); A1 := A1 shl 11 or A1 shr 21; |
Inc(D1, A1 xor B1 xor C1 + Buffer[ 1]); D1 := D1 shl 14 or D1 shr 18; |
Inc(C1, D1 xor A1 xor B1 + Buffer[ 2]); C1 := C1 shl 15 or C1 shr 17; |
Inc(B1, C1 xor D1 xor A1 + Buffer[ 3]); B1 := B1 shl 12 or B1 shr 20; |
Inc(A1, B1 xor C1 xor D1 + Buffer[ 4]); A1 := A1 shl 5 or A1 shr 27; |
Inc(D1, A1 xor B1 xor C1 + Buffer[ 5]); D1 := D1 shl 8 or D1 shr 24; |
Inc(C1, D1 xor A1 xor B1 + Buffer[ 6]); C1 := C1 shl 7 or C1 shr 25; |
Inc(B1, C1 xor D1 xor A1 + Buffer[ 7]); B1 := B1 shl 9 or B1 shr 23; |
Inc(A1, B1 xor C1 xor D1 + Buffer[ 8]); A1 := A1 shl 11 or A1 shr 21; |
Inc(D1, A1 xor B1 xor C1 + Buffer[ 9]); D1 := D1 shl 13 or D1 shr 19; |
Inc(C1, D1 xor A1 xor B1 + Buffer[10]); C1 := C1 shl 14 or C1 shr 18; |
Inc(B1, C1 xor D1 xor A1 + Buffer[11]); B1 := B1 shl 15 or B1 shr 17; |
Inc(A1, B1 xor C1 xor D1 + Buffer[12]); A1 := A1 shl 6 or A1 shr 26; |
Inc(D1, A1 xor B1 xor C1 + Buffer[13]); D1 := D1 shl 7 or D1 shr 25; |
Inc(C1, D1 xor A1 xor B1 + Buffer[14]); C1 := C1 shl 9 or C1 shr 23; |
Inc(B1, C1 xor D1 xor A1 + Buffer[15]); B1 := B1 shl 8 or B1 shr 24; |
Inc(A1, B1 and C1 or not B1 and D1 + Buffer[ 7] + RipeS1); A1 := A1 shl 7 or A1 shr 25; |
Inc(D1, A1 and B1 or not A1 and C1 + Buffer[ 4] + RipeS1); D1 := D1 shl 6 or D1 shr 26; |
Inc(C1, D1 and A1 or not D1 and B1 + Buffer[13] + RipeS1); C1 := C1 shl 8 or C1 shr 24; |
Inc(B1, C1 and D1 or not C1 and A1 + Buffer[ 1] + RipeS1); B1 := B1 shl 13 or B1 shr 19; |
Inc(A1, B1 and C1 or not B1 and D1 + Buffer[10] + RipeS1); A1 := A1 shl 11 or A1 shr 21; |
Inc(D1, A1 and B1 or not A1 and C1 + Buffer[ 6] + RipeS1); D1 := D1 shl 9 or D1 shr 23; |
Inc(C1, D1 and A1 or not D1 and B1 + Buffer[15] + RipeS1); C1 := C1 shl 7 or C1 shr 25; |
Inc(B1, C1 and D1 or not C1 and A1 + Buffer[ 3] + RipeS1); B1 := B1 shl 15 or B1 shr 17; |
Inc(A1, B1 and C1 or not B1 and D1 + Buffer[12] + RipeS1); A1 := A1 shl 7 or A1 shr 25; |
Inc(D1, A1 and B1 or not A1 and C1 + Buffer[ 0] + RipeS1); D1 := D1 shl 12 or D1 shr 20; |
Inc(C1, D1 and A1 or not D1 and B1 + Buffer[ 9] + RipeS1); C1 := C1 shl 15 or C1 shr 17; |
Inc(B1, C1 and D1 or not C1 and A1 + Buffer[ 5] + RipeS1); B1 := B1 shl 9 or B1 shr 23; |
Inc(A1, B1 and C1 or not B1 and D1 + Buffer[ 2] + RipeS1); A1 := A1 shl 11 or A1 shr 21; |
Inc(D1, A1 and B1 or not A1 and C1 + Buffer[14] + RipeS1); D1 := D1 shl 7 or D1 shr 25; |
Inc(C1, D1 and A1 or not D1 and B1 + Buffer[11] + RipeS1); C1 := C1 shl 13 or C1 shr 19; |
Inc(B1, C1 and D1 or not C1 and A1 + Buffer[ 8] + RipeS1); B1 := B1 shl 12 or B1 shr 20; |
Inc(A1, B1 or not C1 xor D1 + Buffer[ 3] + RipeS2); A1 := A1 shl 11 or A1 shr 21; |
Inc(D1, A1 or not B1 xor C1 + Buffer[10] + RipeS2); D1 := D1 shl 13 or D1 shr 19; |
Inc(C1, D1 or not A1 xor B1 + Buffer[14] + RipeS2); C1 := C1 shl 6 or C1 shr 26; |
Inc(B1, C1 or not D1 xor A1 + Buffer[ 4] + RipeS2); B1 := B1 shl 7 or B1 shr 25; |
Inc(A1, B1 or not C1 xor D1 + Buffer[ 9] + RipeS2); A1 := A1 shl 14 or A1 shr 18; |
Inc(D1, A1 or not B1 xor C1 + Buffer[15] + RipeS2); D1 := D1 shl 9 or D1 shr 23; |
Inc(C1, D1 or not A1 xor B1 + Buffer[ 8] + RipeS2); C1 := C1 shl 13 or C1 shr 19; |
Inc(B1, C1 or not D1 xor A1 + Buffer[ 1] + RipeS2); B1 := B1 shl 15 or B1 shr 17; |
Inc(A1, B1 or not C1 xor D1 + Buffer[ 2] + RipeS2); A1 := A1 shl 14 or A1 shr 18; |
Inc(D1, A1 or not B1 xor C1 + Buffer[ 7] + RipeS2); D1 := D1 shl 8 or D1 shr 24; |
Inc(C1, D1 or not A1 xor B1 + Buffer[ 0] + RipeS2); C1 := C1 shl 13 or C1 shr 19; |
Inc(B1, C1 or not D1 xor A1 + Buffer[ 6] + RipeS2); B1 := B1 shl 6 or B1 shr 26; |
Inc(A1, B1 or not C1 xor D1 + Buffer[13] + RipeS2); A1 := A1 shl 5 or A1 shr 27; |
Inc(D1, A1 or not B1 xor C1 + Buffer[11] + RipeS2); D1 := D1 shl 12 or D1 shr 20; |
Inc(C1, D1 or not A1 xor B1 + Buffer[ 5] + RipeS2); C1 := C1 shl 7 or C1 shr 25; |
Inc(B1, C1 or not D1 xor A1 + Buffer[12] + RipeS2); B1 := B1 shl 5 or B1 shr 27; |
Inc(A1, B1 and D1 or C1 and not D1 + Buffer[ 1] + RipeS3); A1 := A1 shl 11 or A1 shr 21; |
Inc(D1, A1 and C1 or B1 and not C1 + Buffer[ 9] + RipeS3); D1 := D1 shl 12 or D1 shr 20; |
Inc(C1, D1 and B1 or A1 and not B1 + Buffer[11] + RipeS3); C1 := C1 shl 14 or C1 shr 18; |
Inc(B1, C1 and A1 or D1 and not A1 + Buffer[10] + RipeS3); B1 := B1 shl 15 or B1 shr 17; |
Inc(A1, B1 and D1 or C1 and not D1 + Buffer[ 0] + RipeS3); A1 := A1 shl 14 or A1 shr 18; |
Inc(D1, A1 and C1 or B1 and not C1 + Buffer[ 8] + RipeS3); D1 := D1 shl 15 or D1 shr 17; |
Inc(C1, D1 and B1 or A1 and not B1 + Buffer[12] + RipeS3); C1 := C1 shl 9 or C1 shr 23; |
Inc(B1, C1 and A1 or D1 and not A1 + Buffer[ 4] + RipeS3); B1 := B1 shl 8 or B1 shr 24; |
Inc(A1, B1 and D1 or C1 and not D1 + Buffer[13] + RipeS3); A1 := A1 shl 9 or A1 shr 23; |
Inc(D1, A1 and C1 or B1 and not C1 + Buffer[ 3] + RipeS3); D1 := D1 shl 14 or D1 shr 18; |
Inc(C1, D1 and B1 or A1 and not B1 + Buffer[ 7] + RipeS3); C1 := C1 shl 5 or C1 shr 27; |
Inc(B1, C1 and A1 or D1 and not A1 + Buffer[15] + RipeS3); B1 := B1 shl 6 or B1 shr 26; |
Inc(A1, B1 and D1 or C1 and not D1 + Buffer[14] + RipeS3); A1 := A1 shl 8 or A1 shr 24; |
Inc(D1, A1 and C1 or B1 and not C1 + Buffer[ 5] + RipeS3); D1 := D1 shl 6 or D1 shr 26; |
Inc(C1, D1 and B1 or A1 and not B1 + Buffer[ 6] + RipeS3); C1 := C1 shl 5 or C1 shr 27; |
Inc(B1, C1 and A1 or D1 and not A1 + Buffer[ 2] + RipeS3); B1 := B1 shl 12 or B1 shr 20; |
T := A1; A1 := A2; A2 := T; |
T := B1; B1 := B2; B2 := T; |
T := C1; C1 := C2; C2 := T; |
T := D1; D1 := D2; D2 := T; |
Inc(A1, B1 and D1 or C1 and not D1 + Buffer[ 5] + RipeS5); A1 := A1 shl 8 or A1 shr 24; |
Inc(D1, A1 and C1 or B1 and not C1 + Buffer[14] + RipeS5); D1 := D1 shl 9 or D1 shr 23; |
Inc(C1, D1 and B1 or A1 and not B1 + Buffer[ 7] + RipeS5); C1 := C1 shl 9 or C1 shr 23; |
Inc(B1, C1 and A1 or D1 and not A1 + Buffer[ 0] + RipeS5); B1 := B1 shl 11 or B1 shr 21; |
Inc(A1, B1 and D1 or C1 and not D1 + Buffer[ 9] + RipeS5); A1 := A1 shl 13 or A1 shr 19; |
Inc(D1, A1 and C1 or B1 and not C1 + Buffer[ 2] + RipeS5); D1 := D1 shl 15 or D1 shr 17; |
Inc(C1, D1 and B1 or A1 and not B1 + Buffer[11] + RipeS5); C1 := C1 shl 15 or C1 shr 17; |
Inc(B1, C1 and A1 or D1 and not A1 + Buffer[ 4] + RipeS5); B1 := B1 shl 5 or B1 shr 27; |
Inc(A1, B1 and D1 or C1 and not D1 + Buffer[13] + RipeS5); A1 := A1 shl 7 or A1 shr 25; |
Inc(D1, A1 and C1 or B1 and not C1 + Buffer[ 6] + RipeS5); D1 := D1 shl 7 or D1 shr 25; |
Inc(C1, D1 and B1 or A1 and not B1 + Buffer[15] + RipeS5); C1 := C1 shl 8 or C1 shr 24; |
Inc(B1, C1 and A1 or D1 and not A1 + Buffer[ 8] + RipeS5); B1 := B1 shl 11 or B1 shr 21; |
Inc(A1, B1 and D1 or C1 and not D1 + Buffer[ 1] + RipeS5); A1 := A1 shl 14 or A1 shr 18; |
Inc(D1, A1 and C1 or B1 and not C1 + Buffer[10] + RipeS5); D1 := D1 shl 14 or D1 shr 18; |
Inc(C1, D1 and B1 or A1 and not B1 + Buffer[ 3] + RipeS5); C1 := C1 shl 12 or C1 shr 20; |
Inc(B1, C1 and A1 or D1 and not A1 + Buffer[12] + RipeS5); B1 := B1 shl 6 or B1 shr 26; |
Inc(A1, B1 or not C1 xor D1 + Buffer[ 6] + RipeS6); A1 := A1 shl 9 or A1 shr 23; |
Inc(D1, A1 or not B1 xor C1 + Buffer[11] + RipeS6); D1 := D1 shl 13 or D1 shr 19; |
Inc(C1, D1 or not A1 xor B1 + Buffer[ 3] + RipeS6); C1 := C1 shl 15 or C1 shr 17; |
Inc(B1, C1 or not D1 xor A1 + Buffer[ 7] + RipeS6); B1 := B1 shl 7 or B1 shr 25; |
Inc(A1, B1 or not C1 xor D1 + Buffer[ 0] + RipeS6); A1 := A1 shl 12 or A1 shr 20; |
Inc(D1, A1 or not B1 xor C1 + Buffer[13] + RipeS6); D1 := D1 shl 8 or D1 shr 24; |
Inc(C1, D1 or not A1 xor B1 + Buffer[ 5] + RipeS6); C1 := C1 shl 9 or C1 shr 23; |
Inc(B1, C1 or not D1 xor A1 + Buffer[10] + RipeS6); B1 := B1 shl 11 or B1 shr 21; |
Inc(A1, B1 or not C1 xor D1 + Buffer[14] + RipeS6); A1 := A1 shl 7 or A1 shr 25; |
Inc(D1, A1 or not B1 xor C1 + Buffer[15] + RipeS6); D1 := D1 shl 7 or D1 shr 25; |
Inc(C1, D1 or not A1 xor B1 + Buffer[ 8] + RipeS6); C1 := C1 shl 12 or C1 shr 20; |
Inc(B1, C1 or not D1 xor A1 + Buffer[12] + RipeS6); B1 := B1 shl 7 or B1 shr 25; |
Inc(A1, B1 or not C1 xor D1 + Buffer[ 4] + RipeS6); A1 := A1 shl 6 or A1 shr 26; |
Inc(D1, A1 or not B1 xor C1 + Buffer[ 9] + RipeS6); D1 := D1 shl 15 or D1 shr 17; |
Inc(C1, D1 or not A1 xor B1 + Buffer[ 1] + RipeS6); C1 := C1 shl 13 or C1 shr 19; |
Inc(B1, C1 or not D1 xor A1 + Buffer[ 2] + RipeS6); B1 := B1 shl 11 or B1 shr 21; |
Inc(A1, B1 and C1 or not B1 and D1 + Buffer[15] + RipeS7); A1 := A1 shl 9 or A1 shr 23; |
Inc(D1, A1 and B1 or not A1 and C1 + Buffer[ 5] + RipeS7); D1 := D1 shl 7 or D1 shr 25; |
Inc(C1, D1 and A1 or not D1 and B1 + Buffer[ 1] + RipeS7); C1 := C1 shl 15 or C1 shr 17; |
Inc(B1, C1 and D1 or not C1 and A1 + Buffer[ 3] + RipeS7); B1 := B1 shl 11 or B1 shr 21; |
Inc(A1, B1 and C1 or not B1 and D1 + Buffer[ 7] + RipeS7); A1 := A1 shl 8 or A1 shr 24; |
Inc(D1, A1 and B1 or not A1 and C1 + Buffer[14] + RipeS7); D1 := D1 shl 6 or D1 shr 26; |
Inc(C1, D1 and A1 or not D1 and B1 + Buffer[ 6] + RipeS7); C1 := C1 shl 6 or C1 shr 26; |
Inc(B1, C1 and D1 or not C1 and A1 + Buffer[ 9] + RipeS7); B1 := B1 shl 14 or B1 shr 18; |
Inc(A1, B1 and C1 or not B1 and D1 + Buffer[11] + RipeS7); A1 := A1 shl 12 or A1 shr 20; |
Inc(D1, A1 and B1 or not A1 and C1 + Buffer[ 8] + RipeS7); D1 := D1 shl 13 or D1 shr 19; |
Inc(C1, D1 and A1 or not D1 and B1 + Buffer[12] + RipeS7); C1 := C1 shl 5 or C1 shr 27; |
Inc(B1, C1 and D1 or not C1 and A1 + Buffer[ 2] + RipeS7); B1 := B1 shl 14 or B1 shr 18; |
Inc(A1, B1 and C1 or not B1 and D1 + Buffer[10] + RipeS7); A1 := A1 shl 13 or A1 shr 19; |
Inc(D1, A1 and B1 or not A1 and C1 + Buffer[ 0] + RipeS7); D1 := D1 shl 13 or D1 shr 19; |
Inc(C1, D1 and A1 or not D1 and B1 + Buffer[ 4] + RipeS7); C1 := C1 shl 7 or C1 shr 25; |
Inc(B1, C1 and D1 or not C1 and A1 + Buffer[13] + RipeS7); B1 := B1 shl 5 or B1 shr 27; |
Inc(A1, B1 xor C1 xor D1 + Buffer[ 8]); A1 := A1 shl 15 or A1 shr 17; |
Inc(D1, A1 xor B1 xor C1 + Buffer[ 6]); D1 := D1 shl 5 or D1 shr 27; |
Inc(C1, D1 xor A1 xor B1 + Buffer[ 4]); C1 := C1 shl 8 or C1 shr 24; |
Inc(B1, C1 xor D1 xor A1 + Buffer[ 1]); B1 := B1 shl 11 or B1 shr 21; |
Inc(A1, B1 xor C1 xor D1 + Buffer[ 3]); A1 := A1 shl 14 or A1 shr 18; |
Inc(D1, A1 xor B1 xor C1 + Buffer[11]); D1 := D1 shl 14 or D1 shr 18; |
Inc(C1, D1 xor A1 xor B1 + Buffer[15]); C1 := C1 shl 6 or C1 shr 26; |
Inc(B1, C1 xor D1 xor A1 + Buffer[ 0]); B1 := B1 shl 14 or B1 shr 18; |
Inc(A1, B1 xor C1 xor D1 + Buffer[ 5]); A1 := A1 shl 6 or A1 shr 26; |
Inc(D1, A1 xor B1 xor C1 + Buffer[12]); D1 := D1 shl 9 or D1 shr 23; |
Inc(C1, D1 xor A1 xor B1 + Buffer[ 2]); C1 := C1 shl 12 or C1 shr 20; |
Inc(B1, C1 xor D1 xor A1 + Buffer[13]); B1 := B1 shl 9 or B1 shr 23; |
Inc(A1, B1 xor C1 xor D1 + Buffer[ 9]); A1 := A1 shl 12 or A1 shr 20; |
Inc(D1, A1 xor B1 xor C1 + Buffer[ 7]); D1 := D1 shl 5 or D1 shr 27; |
Inc(C1, D1 xor A1 xor B1 + Buffer[10]); C1 := C1 shl 15 or C1 shr 17; |
Inc(B1, C1 xor D1 xor A1 + Buffer[14]); B1 := B1 shl 8 or B1 shr 24; |
Inc(D1, C2 + FDigest[1]); |
FDigest[1] := FDigest[2] + D2 + A1; |
FDigest[2] := FDigest[3] + A2 + B1; |
FDigest[3] := FDIgest[0] + B2 + C1; |
FDigest[0] := D1; |
end; |
{$ENDIF !THash_RipeMD128_asm} |
{ THash_RipeMD160 } |
{$IFNDEF THash_RipeMD160_asm} |
procedure THash_RipeMD160.DoTransform(Buffer: PUInt32Array); |
var |
A1, B1, C1, D1, E1: UInt32; |
A2, B2, C2, D2, E2: UInt32; |
T: UInt32; |
begin |
A1 := FDigest[0]; |
B1 := FDigest[1]; |
C1 := FDigest[2]; |
D1 := FDigest[3]; |
E1 := FDigest[4]; |
A2 := FDigest[0]; |
B2 := FDigest[1]; |
C2 := FDigest[2]; |
D2 := FDigest[3]; |
E2 := FDigest[4]; |
Inc(A1, B1 xor C1 xor D1 + Buffer[ 0]); A1 := A1 shl 11 or A1 shr 21 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 xor B1 xor C1 + Buffer[ 1]); E1 := E1 shl 14 or E1 shr 18 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 xor A1 xor B1 + Buffer[ 2]); D1 := D1 shl 15 or D1 shr 17 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 xor E1 xor A1 + Buffer[ 3]); C1 := C1 shl 12 or C1 shr 20 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 xor D1 xor E1 + Buffer[ 4]); B1 := B1 shl 5 or B1 shr 27 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 xor C1 xor D1 + Buffer[ 5]); A1 := A1 shl 8 or A1 shr 24 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 xor B1 xor C1 + Buffer[ 6]); E1 := E1 shl 7 or E1 shr 25 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 xor A1 xor B1 + Buffer[ 7]); D1 := D1 shl 9 or D1 shr 23 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 xor E1 xor A1 + Buffer[ 8]); C1 := C1 shl 11 or C1 shr 21 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 xor D1 xor E1 + Buffer[ 9]); B1 := B1 shl 13 or B1 shr 19 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 xor C1 xor D1 + Buffer[10]); A1 := A1 shl 14 or A1 shr 18 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 xor B1 xor C1 + Buffer[11]); E1 := E1 shl 15 or E1 shr 17 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 xor A1 xor B1 + Buffer[12]); D1 := D1 shl 6 or D1 shr 26 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 xor E1 xor A1 + Buffer[13]); C1 := C1 shl 7 or C1 shr 25 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 xor D1 xor E1 + Buffer[14]); B1 := B1 shl 9 or B1 shr 23 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 xor C1 xor D1 + Buffer[15]); A1 := A1 shl 8 or A1 shr 24 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 and B1 or not A1 and C1 + Buffer[ 7] + RipeS1); E1 := E1 shl 7 or E1 shr 25 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 and A1 or not E1 and B1 + Buffer[ 4] + RipeS1); D1 := D1 shl 6 or D1 shr 26 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 and E1 or not D1 and A1 + Buffer[13] + RipeS1); C1 := C1 shl 8 or C1 shr 24 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 and D1 or not C1 and E1 + Buffer[ 1] + RipeS1); B1 := B1 shl 13 or B1 shr 19 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 and C1 or not B1 and D1 + Buffer[10] + RipeS1); A1 := A1 shl 11 or A1 shr 21 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 and B1 or not A1 and C1 + Buffer[ 6] + RipeS1); E1 := E1 shl 9 or E1 shr 23 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 and A1 or not E1 and B1 + Buffer[15] + RipeS1); D1 := D1 shl 7 or D1 shr 25 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 and E1 or not D1 and A1 + Buffer[ 3] + RipeS1); C1 := C1 shl 15 or C1 shr 17 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 and D1 or not C1 and E1 + Buffer[12] + RipeS1); B1 := B1 shl 7 or B1 shr 25 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 and C1 or not B1 and D1 + Buffer[ 0] + RipeS1); A1 := A1 shl 12 or A1 shr 20 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 and B1 or not A1 and C1 + Buffer[ 9] + RipeS1); E1 := E1 shl 15 or E1 shr 17 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 and A1 or not E1 and B1 + Buffer[ 5] + RipeS1); D1 := D1 shl 9 or D1 shr 23 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 and E1 or not D1 and A1 + Buffer[ 2] + RipeS1); C1 := C1 shl 11 or C1 shr 21 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 and D1 or not C1 and E1 + Buffer[14] + RipeS1); B1 := B1 shl 7 or B1 shr 25 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 and C1 or not B1 and D1 + Buffer[11] + RipeS1); A1 := A1 shl 13 or A1 shr 19 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 and B1 or not A1 and C1 + Buffer[ 8] + RipeS1); E1 := E1 shl 12 or E1 shr 20 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 or not A1 xor B1 + Buffer[ 3] + RipeS2); D1 := D1 shl 11 or D1 shr 21 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 or not E1 xor A1 + Buffer[10] + RipeS2); C1 := C1 shl 13 or C1 shr 19 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 or not D1 xor E1 + Buffer[14] + RipeS2); B1 := B1 shl 6 or B1 shr 26 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 or not C1 xor D1 + Buffer[ 4] + RipeS2); A1 := A1 shl 7 or A1 shr 25 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 or not B1 xor C1 + Buffer[ 9] + RipeS2); E1 := E1 shl 14 or E1 shr 18 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 or not A1 xor B1 + Buffer[15] + RipeS2); D1 := D1 shl 9 or D1 shr 23 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 or not E1 xor A1 + Buffer[ 8] + RipeS2); C1 := C1 shl 13 or C1 shr 19 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 or not D1 xor E1 + Buffer[ 1] + RipeS2); B1 := B1 shl 15 or B1 shr 17 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 or not C1 xor D1 + Buffer[ 2] + RipeS2); A1 := A1 shl 14 or A1 shr 18 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 or not B1 xor C1 + Buffer[ 7] + RipeS2); E1 := E1 shl 8 or E1 shr 24 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 or not A1 xor B1 + Buffer[ 0] + RipeS2); D1 := D1 shl 13 or D1 shr 19 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 or not E1 xor A1 + Buffer[ 6] + RipeS2); C1 := C1 shl 6 or C1 shr 26 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 or not D1 xor E1 + Buffer[13] + RipeS2); B1 := B1 shl 5 or B1 shr 27 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 or not C1 xor D1 + Buffer[11] + RipeS2); A1 := A1 shl 12 or A1 shr 20 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 or not B1 xor C1 + Buffer[ 5] + RipeS2); E1 := E1 shl 7 or E1 shr 25 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 or not A1 xor B1 + Buffer[12] + RipeS2); D1 := D1 shl 5 or D1 shr 27 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 and A1 or E1 and not A1 + Buffer[ 1] + RipeS3); C1 := C1 shl 11 or C1 shr 21 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 and E1 or D1 and not E1 + Buffer[ 9] + RipeS3); B1 := B1 shl 12 or B1 shr 20 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 and D1 or C1 and not D1 + Buffer[11] + RipeS3); A1 := A1 shl 14 or A1 shr 18 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 and C1 or B1 and not C1 + Buffer[10] + RipeS3); E1 := E1 shl 15 or E1 shr 17 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 and B1 or A1 and not B1 + Buffer[ 0] + RipeS3); D1 := D1 shl 14 or D1 shr 18 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 and A1 or E1 and not A1 + Buffer[ 8] + RipeS3); C1 := C1 shl 15 or C1 shr 17 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 and E1 or D1 and not E1 + Buffer[12] + RipeS3); B1 := B1 shl 9 or B1 shr 23 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 and D1 or C1 and not D1 + Buffer[ 4] + RipeS3); A1 := A1 shl 8 or A1 shr 24 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 and C1 or B1 and not C1 + Buffer[13] + RipeS3); E1 := E1 shl 9 or E1 shr 23 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 and B1 or A1 and not B1 + Buffer[ 3] + RipeS3); D1 := D1 shl 14 or D1 shr 18 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 and A1 or E1 and not A1 + Buffer[ 7] + RipeS3); C1 := C1 shl 5 or C1 shr 27 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 and E1 or D1 and not E1 + Buffer[15] + RipeS3); B1 := B1 shl 6 or B1 shr 26 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 and D1 or C1 and not D1 + Buffer[14] + RipeS3); A1 := A1 shl 8 or A1 shr 24 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 and C1 or B1 and not C1 + Buffer[ 5] + RipeS3); E1 := E1 shl 6 or E1 shr 26 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 and B1 or A1 and not B1 + Buffer[ 6] + RipeS3); D1 := D1 shl 5 or D1 shr 27 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 and A1 or E1 and not A1 + Buffer[ 2] + RipeS3); C1 := C1 shl 12 or C1 shr 20 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, D1 or not E1 xor C1 + Buffer[ 4] + RipeS4); B1 := B1 shl 9 or B1 shr 23 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, C1 or not D1 xor B1 + Buffer[ 0] + RipeS4); A1 := A1 shl 15 or A1 shr 17 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, B1 or not C1 xor A1 + Buffer[ 5] + RipeS4); E1 := E1 shl 5 or E1 shr 27 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, A1 or not B1 xor E1 + Buffer[ 9] + RipeS4); D1 := D1 shl 11 or D1 shr 21 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, E1 or not A1 xor D1 + Buffer[ 7] + RipeS4); C1 := C1 shl 6 or C1 shr 26 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, D1 or not E1 xor C1 + Buffer[12] + RipeS4); B1 := B1 shl 8 or B1 shr 24 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, C1 or not D1 xor B1 + Buffer[ 2] + RipeS4); A1 := A1 shl 13 or A1 shr 19 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, B1 or not C1 xor A1 + Buffer[10] + RipeS4); E1 := E1 shl 12 or E1 shr 20 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, A1 or not B1 xor E1 + Buffer[14] + RipeS4); D1 := D1 shl 5 or D1 shr 27 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, E1 or not A1 xor D1 + Buffer[ 1] + RipeS4); C1 := C1 shl 12 or C1 shr 20 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, D1 or not E1 xor C1 + Buffer[ 3] + RipeS4); B1 := B1 shl 13 or B1 shr 19 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, C1 or not D1 xor B1 + Buffer[ 8] + RipeS4); A1 := A1 shl 14 or A1 shr 18 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, B1 or not C1 xor A1 + Buffer[11] + RipeS4); E1 := E1 shl 11 or E1 shr 21 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, A1 or not B1 xor E1 + Buffer[ 6] + RipeS4); D1 := D1 shl 8 or D1 shr 24 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, E1 or not A1 xor D1 + Buffer[15] + RipeS4); C1 := C1 shl 5 or C1 shr 27 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, D1 or not E1 xor C1 + Buffer[13] + RipeS4); B1 := B1 shl 6 or B1 shr 26 + A1; D1 := D1 shl 10 or D1 shr 22; |
T := A1; A1 := A2; A2 := T; |
T := B1; B1 := B2; B2 := T; |
T := C1; C1 := C2; C2 := T; |
T := D1; D1 := D2; D2 := T; |
T := E1; E1 := E2; E2 := T; |
Inc(A1, C1 or not D1 xor B1 + Buffer[ 5] + RipeS5); A1 := A1 shl 8 or A1 shr 24 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, B1 or not C1 xor A1 + Buffer[14] + RipeS5); E1 := E1 shl 9 or E1 shr 23 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, A1 or not B1 xor E1 + Buffer[ 7] + RipeS5); D1 := D1 shl 9 or D1 shr 23 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, E1 or not A1 xor D1 + Buffer[ 0] + RipeS5); C1 := C1 shl 11 or C1 shr 21 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, D1 or not E1 xor C1 + Buffer[ 9] + RipeS5); B1 := B1 shl 13 or B1 shr 19 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, C1 or not D1 xor B1 + Buffer[ 2] + RipeS5); A1 := A1 shl 15 or A1 shr 17 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, B1 or not C1 xor A1 + Buffer[11] + RipeS5); E1 := E1 shl 15 or E1 shr 17 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, A1 or not B1 xor E1 + Buffer[ 4] + RipeS5); D1 := D1 shl 5 or D1 shr 27 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, E1 or not A1 xor D1 + Buffer[13] + RipeS5); C1 := C1 shl 7 or C1 shr 25 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, D1 or not E1 xor C1 + Buffer[ 6] + RipeS5); B1 := B1 shl 7 or B1 shr 25 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, C1 or not D1 xor B1 + Buffer[15] + RipeS5); A1 := A1 shl 8 or A1 shr 24 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, B1 or not C1 xor A1 + Buffer[ 8] + RipeS5); E1 := E1 shl 11 or E1 shr 21 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, A1 or not B1 xor E1 + Buffer[ 1] + RipeS5); D1 := D1 shl 14 or D1 shr 18 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, E1 or not A1 xor D1 + Buffer[10] + RipeS5); C1 := C1 shl 14 or C1 shr 18 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, D1 or not E1 xor C1 + Buffer[ 3] + RipeS5); B1 := B1 shl 12 or B1 shr 20 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, C1 or not D1 xor B1 + Buffer[12] + RipeS5); A1 := A1 shl 6 or A1 shr 26 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 and C1 or B1 and not C1 + Buffer[ 6] + RipeS6); E1 := E1 shl 9 or E1 shr 23 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 and B1 or A1 and not B1 + Buffer[11] + RipeS6); D1 := D1 shl 13 or D1 shr 19 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 and A1 or E1 and not A1 + Buffer[ 3] + RipeS6); C1 := C1 shl 15 or C1 shr 17 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 and E1 or D1 and not E1 + Buffer[ 7] + RipeS6); B1 := B1 shl 7 or B1 shr 25 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 and D1 or C1 and not D1 + Buffer[ 0] + RipeS6); A1 := A1 shl 12 or A1 shr 20 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 and C1 or B1 and not C1 + Buffer[13] + RipeS6); E1 := E1 shl 8 or E1 shr 24 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 and B1 or A1 and not B1 + Buffer[ 5] + RipeS6); D1 := D1 shl 9 or D1 shr 23 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 and A1 or E1 and not A1 + Buffer[10] + RipeS6); C1 := C1 shl 11 or C1 shr 21 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 and E1 or D1 and not E1 + Buffer[14] + RipeS6); B1 := B1 shl 7 or B1 shr 25 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 and D1 or C1 and not D1 + Buffer[15] + RipeS6); A1 := A1 shl 7 or A1 shr 25 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 and C1 or B1 and not C1 + Buffer[ 8] + RipeS6); E1 := E1 shl 12 or E1 shr 20 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 and B1 or A1 and not B1 + Buffer[12] + RipeS6); D1 := D1 shl 7 or D1 shr 25 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 and A1 or E1 and not A1 + Buffer[ 4] + RipeS6); C1 := C1 shl 6 or C1 shr 26 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 and E1 or D1 and not E1 + Buffer[ 9] + RipeS6); B1 := B1 shl 15 or B1 shr 17 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 and D1 or C1 and not D1 + Buffer[ 1] + RipeS6); A1 := A1 shl 13 or A1 shr 19 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 and C1 or B1 and not C1 + Buffer[ 2] + RipeS6); E1 := E1 shl 11 or E1 shr 21 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 or not A1 xor B1 + Buffer[15] + RipeS7); D1 := D1 shl 9 or D1 shr 23 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 or not E1 xor A1 + Buffer[ 5] + RipeS7); C1 := C1 shl 7 or C1 shr 25 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 or not D1 xor E1 + Buffer[ 1] + RipeS7); B1 := B1 shl 15 or B1 shr 17 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 or not C1 xor D1 + Buffer[ 3] + RipeS7); A1 := A1 shl 11 or A1 shr 21 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 or not B1 xor C1 + Buffer[ 7] + RipeS7); E1 := E1 shl 8 or E1 shr 24 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 or not A1 xor B1 + Buffer[14] + RipeS7); D1 := D1 shl 6 or D1 shr 26 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 or not E1 xor A1 + Buffer[ 6] + RipeS7); C1 := C1 shl 6 or C1 shr 26 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 or not D1 xor E1 + Buffer[ 9] + RipeS7); B1 := B1 shl 14 or B1 shr 18 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 or not C1 xor D1 + Buffer[11] + RipeS7); A1 := A1 shl 12 or A1 shr 20 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 or not B1 xor C1 + Buffer[ 8] + RipeS7); E1 := E1 shl 13 or E1 shr 19 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 or not A1 xor B1 + Buffer[12] + RipeS7); D1 := D1 shl 5 or D1 shr 27 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 or not E1 xor A1 + Buffer[ 2] + RipeS7); C1 := C1 shl 14 or C1 shr 18 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 or not D1 xor E1 + Buffer[10] + RipeS7); B1 := B1 shl 13 or B1 shr 19 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 or not C1 xor D1 + Buffer[ 0] + RipeS7); A1 := A1 shl 13 or A1 shr 19 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 or not B1 xor C1 + Buffer[ 4] + RipeS7); E1 := E1 shl 7 or E1 shr 25 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 or not A1 xor B1 + Buffer[13] + RipeS7); D1 := D1 shl 5 or D1 shr 27 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 and E1 or not D1 and A1 + Buffer[ 8] + RipeS8); C1 := C1 shl 15 or C1 shr 17 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 and D1 or not C1 and E1 + Buffer[ 6] + RipeS8); B1 := B1 shl 5 or B1 shr 27 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 and C1 or not B1 and D1 + Buffer[ 4] + RipeS8); A1 := A1 shl 8 or A1 shr 24 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 and B1 or not A1 and C1 + Buffer[ 1] + RipeS8); E1 := E1 shl 11 or E1 shr 21 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 and A1 or not E1 and B1 + Buffer[ 3] + RipeS8); D1 := D1 shl 14 or D1 shr 18 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 and E1 or not D1 and A1 + Buffer[11] + RipeS8); C1 := C1 shl 14 or C1 shr 18 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 and D1 or not C1 and E1 + Buffer[15] + RipeS8); B1 := B1 shl 6 or B1 shr 26 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 and C1 or not B1 and D1 + Buffer[ 0] + RipeS8); A1 := A1 shl 14 or A1 shr 18 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 and B1 or not A1 and C1 + Buffer[ 5] + RipeS8); E1 := E1 shl 6 or E1 shr 26 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 and A1 or not E1 and B1 + Buffer[12] + RipeS8); D1 := D1 shl 9 or D1 shr 23 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 and E1 or not D1 and A1 + Buffer[ 2] + RipeS8); C1 := C1 shl 12 or C1 shr 20 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 and D1 or not C1 and E1 + Buffer[13] + RipeS8); B1 := B1 shl 9 or B1 shr 23 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 and C1 or not B1 and D1 + Buffer[ 9] + RipeS8); A1 := A1 shl 12 or A1 shr 20 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 and B1 or not A1 and C1 + Buffer[ 7] + RipeS8); E1 := E1 shl 5 or E1 shr 27 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 and A1 or not E1 and B1 + Buffer[10] + RipeS8); D1 := D1 shl 15 or D1 shr 17 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 and E1 or not D1 and A1 + Buffer[14] + RipeS8); C1 := C1 shl 8 or C1 shr 24 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 xor D1 xor E1 + Buffer[12]); B1 := B1 shl 8 or B1 shr 24 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 xor C1 xor D1 + Buffer[15]); A1 := A1 shl 5 or A1 shr 27 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 xor B1 xor C1 + Buffer[10]); E1 := E1 shl 12 or E1 shr 20 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 xor A1 xor B1 + Buffer[ 4]); D1 := D1 shl 9 or D1 shr 23 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 xor E1 xor A1 + Buffer[ 1]); C1 := C1 shl 12 or C1 shr 20 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 xor D1 xor E1 + Buffer[ 5]); B1 := B1 shl 5 or B1 shr 27 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 xor C1 xor D1 + Buffer[ 8]); A1 := A1 shl 14 or A1 shr 18 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 xor B1 xor C1 + Buffer[ 7]); E1 := E1 shl 6 or E1 shr 26 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 xor A1 xor B1 + Buffer[ 6]); D1 := D1 shl 8 or D1 shr 24 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 xor E1 xor A1 + Buffer[ 2]); C1 := C1 shl 13 or C1 shr 19 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 xor D1 xor E1 + Buffer[13]); B1 := B1 shl 6 or B1 shr 26 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 xor C1 xor D1 + Buffer[14]); A1 := A1 shl 5 or A1 shr 27 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 xor B1 xor C1 + Buffer[ 0]); E1 := E1 shl 15 or E1 shr 17 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 xor A1 xor B1 + Buffer[ 3]); D1 := D1 shl 13 or D1 shr 19 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 xor E1 xor A1 + Buffer[ 9]); C1 := C1 shl 11 or C1 shr 21 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 xor D1 xor E1 + Buffer[11]); B1 := B1 shl 11 or B1 shr 21 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(D1, C2 + FDigest[1]); |
FDigest[1] := FDigest[2] + D2 + E1; |
FDigest[2] := FDigest[3] + E2 + A1; |
FDigest[3] := FDigest[4] + A2 + B1; |
FDigest[4] := FDigest[0] + B2 + C1; |
FDigest[0] := D1; |
end; |
{$ENDIF !THash_RipeMD160_asm} |
class function THash_RipeMD160.DigestSize: UInt32; |
begin |
Result := 20; |
end; |
{ THash_RipeMD256 } |
{$IFNDEF THash_RipeMD256_asm} |
procedure THash_RipeMD256.DoTransform(Buffer: PUInt32Array); |
var |
A1, B1, C1, D1: UInt32; |
A2, B2, C2, D2: UInt32; |
T: UInt32; |
begin |
A1 := FDigest[0]; |
B1 := FDigest[1]; |
C1 := FDigest[2]; |
D1 := FDigest[3]; |
A2 := FDigest[4]; |
B2 := FDigest[5]; |
C2 := FDigest[6]; |
D2 := FDigest[7]; |
Inc(A1, B1 xor C1 xor D1 + Buffer[ 0]); A1 := A1 shl 11 or A1 shr 21; |
Inc(D1, A1 xor B1 xor C1 + Buffer[ 1]); D1 := D1 shl 14 or D1 shr 18; |
Inc(C1, D1 xor A1 xor B1 + Buffer[ 2]); C1 := C1 shl 15 or C1 shr 17; |
Inc(B1, C1 xor D1 xor A1 + Buffer[ 3]); B1 := B1 shl 12 or B1 shr 20; |
Inc(A1, B1 xor C1 xor D1 + Buffer[ 4]); A1 := A1 shl 5 or A1 shr 27; |
Inc(D1, A1 xor B1 xor C1 + Buffer[ 5]); D1 := D1 shl 8 or D1 shr 24; |
Inc(C1, D1 xor A1 xor B1 + Buffer[ 6]); C1 := C1 shl 7 or C1 shr 25; |
Inc(B1, C1 xor D1 xor A1 + Buffer[ 7]); B1 := B1 shl 9 or B1 shr 23; |
Inc(A1, B1 xor C1 xor D1 + Buffer[ 8]); A1 := A1 shl 11 or A1 shr 21; |
Inc(D1, A1 xor B1 xor C1 + Buffer[ 9]); D1 := D1 shl 13 or D1 shr 19; |
Inc(C1, D1 xor A1 xor B1 + Buffer[10]); C1 := C1 shl 14 or C1 shr 18; |
Inc(B1, C1 xor D1 xor A1 + Buffer[11]); B1 := B1 shl 15 or B1 shr 17; |
Inc(A1, B1 xor C1 xor D1 + Buffer[12]); A1 := A1 shl 6 or A1 shr 26; |
Inc(D1, A1 xor B1 xor C1 + Buffer[13]); D1 := D1 shl 7 or D1 shr 25; |
Inc(C1, D1 xor A1 xor B1 + Buffer[14]); C1 := C1 shl 9 or C1 shr 23; |
Inc(B1, C1 xor D1 xor A1 + Buffer[15]); B1 := B1 shl 8 or B1 shr 24; |
T := A1; A1 := A2; A2 := T; |
T := B1; B1 := B2; B2 := T; |
T := C1; C1 := C2; C2 := T; |
T := D1; D1 := D2; D2 := T; |
Inc(A1, B1 and D1 or C1 and not D1 + Buffer[ 5] + RipeS5); A1 := A1 shl 8 or A1 shr 24; |
Inc(D1, A1 and C1 or B1 and not C1 + Buffer[14] + RipeS5); D1 := D1 shl 9 or D1 shr 23; |
Inc(C1, D1 and B1 or A1 and not B1 + Buffer[ 7] + RipeS5); C1 := C1 shl 9 or C1 shr 23; |
Inc(B1, C1 and A1 or D1 and not A1 + Buffer[ 0] + RipeS5); B1 := B1 shl 11 or B1 shr 21; |
Inc(A1, B1 and D1 or C1 and not D1 + Buffer[ 9] + RipeS5); A1 := A1 shl 13 or A1 shr 19; |
Inc(D1, A1 and C1 or B1 and not C1 + Buffer[ 2] + RipeS5); D1 := D1 shl 15 or D1 shr 17; |
Inc(C1, D1 and B1 or A1 and not B1 + Buffer[11] + RipeS5); C1 := C1 shl 15 or C1 shr 17; |
Inc(B1, C1 and A1 or D1 and not A1 + Buffer[ 4] + RipeS5); B1 := B1 shl 5 or B1 shr 27; |
Inc(A1, B1 and D1 or C1 and not D1 + Buffer[13] + RipeS5); A1 := A1 shl 7 or A1 shr 25; |
Inc(D1, A1 and C1 or B1 and not C1 + Buffer[ 6] + RipeS5); D1 := D1 shl 7 or D1 shr 25; |
Inc(C1, D1 and B1 or A1 and not B1 + Buffer[15] + RipeS5); C1 := C1 shl 8 or C1 shr 24; |
Inc(B1, C1 and A1 or D1 and not A1 + Buffer[ 8] + RipeS5); B1 := B1 shl 11 or B1 shr 21; |
Inc(A1, B1 and D1 or C1 and not D1 + Buffer[ 1] + RipeS5); A1 := A1 shl 14 or A1 shr 18; |
Inc(D1, A1 and C1 or B1 and not C1 + Buffer[10] + RipeS5); D1 := D1 shl 14 or D1 shr 18; |
Inc(C1, D1 and B1 or A1 and not B1 + Buffer[ 3] + RipeS5); C1 := C1 shl 12 or C1 shr 20; |
Inc(B1, C1 and A1 or D1 and not A1 + Buffer[12] + RipeS5); B1 := B1 shl 6 or B1 shr 26; |
T := B1; B1 := B2; B2 := T; |
T := C1; C1 := C2; C2 := T; |
T := D1; D1 := D2; D2 := T; |
Inc(A1, B1 and C1 or not B1 and D1 + Buffer[ 7] + RipeS1); A1 := A1 shl 7 or A1 shr 25; |
Inc(D1, A1 and B1 or not A1 and C1 + Buffer[ 4] + RipeS1); D1 := D1 shl 6 or D1 shr 26; |
Inc(C1, D1 and A1 or not D1 and B1 + Buffer[13] + RipeS1); C1 := C1 shl 8 or C1 shr 24; |
Inc(B1, C1 and D1 or not C1 and A1 + Buffer[ 1] + RipeS1); B1 := B1 shl 13 or B1 shr 19; |
Inc(A1, B1 and C1 or not B1 and D1 + Buffer[10] + RipeS1); A1 := A1 shl 11 or A1 shr 21; |
Inc(D1, A1 and B1 or not A1 and C1 + Buffer[ 6] + RipeS1); D1 := D1 shl 9 or D1 shr 23; |
Inc(C1, D1 and A1 or not D1 and B1 + Buffer[15] + RipeS1); C1 := C1 shl 7 or C1 shr 25; |
Inc(B1, C1 and D1 or not C1 and A1 + Buffer[ 3] + RipeS1); B1 := B1 shl 15 or B1 shr 17; |
Inc(A1, B1 and C1 or not B1 and D1 + Buffer[12] + RipeS1); A1 := A1 shl 7 or A1 shr 25; |
Inc(D1, A1 and B1 or not A1 and C1 + Buffer[ 0] + RipeS1); D1 := D1 shl 12 or D1 shr 20; |
Inc(C1, D1 and A1 or not D1 and B1 + Buffer[ 9] + RipeS1); C1 := C1 shl 15 or C1 shr 17; |
Inc(B1, C1 and D1 or not C1 and A1 + Buffer[ 5] + RipeS1); B1 := B1 shl 9 or B1 shr 23; |
Inc(A1, B1 and C1 or not B1 and D1 + Buffer[ 2] + RipeS1); A1 := A1 shl 11 or A1 shr 21; |
Inc(D1, A1 and B1 or not A1 and C1 + Buffer[14] + RipeS1); D1 := D1 shl 7 or D1 shr 25; |
Inc(C1, D1 and A1 or not D1 and B1 + Buffer[11] + RipeS1); C1 := C1 shl 13 or C1 shr 19; |
Inc(B1, C1 and D1 or not C1 and A1 + Buffer[ 8] + RipeS1); B1 := B1 shl 12 or B1 shr 20; |
T := A1; A1 := A2; A2 := T; |
T := B1; B1 := B2; B2 := T; |
T := C1; C1 := C2; C2 := T; |
T := D1; D1 := D2; D2 := T; |
Inc(A1, B1 or not C1 xor D1 + Buffer[ 6] + RipeS6); A1 := A1 shl 9 or A1 shr 23; |
Inc(D1, A1 or not B1 xor C1 + Buffer[11] + RipeS6); D1 := D1 shl 13 or D1 shr 19; |
Inc(C1, D1 or not A1 xor B1 + Buffer[ 3] + RipeS6); C1 := C1 shl 15 or C1 shr 17; |
Inc(B1, C1 or not D1 xor A1 + Buffer[ 7] + RipeS6); B1 := B1 shl 7 or B1 shr 25; |
Inc(A1, B1 or not C1 xor D1 + Buffer[ 0] + RipeS6); A1 := A1 shl 12 or A1 shr 20; |
Inc(D1, A1 or not B1 xor C1 + Buffer[13] + RipeS6); D1 := D1 shl 8 or D1 shr 24; |
Inc(C1, D1 or not A1 xor B1 + Buffer[ 5] + RipeS6); C1 := C1 shl 9 or C1 shr 23; |
Inc(B1, C1 or not D1 xor A1 + Buffer[10] + RipeS6); B1 := B1 shl 11 or B1 shr 21; |
Inc(A1, B1 or not C1 xor D1 + Buffer[14] + RipeS6); A1 := A1 shl 7 or A1 shr 25; |
Inc(D1, A1 or not B1 xor C1 + Buffer[15] + RipeS6); D1 := D1 shl 7 or D1 shr 25; |
Inc(C1, D1 or not A1 xor B1 + Buffer[ 8] + RipeS6); C1 := C1 shl 12 or C1 shr 20; |
Inc(B1, C1 or not D1 xor A1 + Buffer[12] + RipeS6); B1 := B1 shl 7 or B1 shr 25; |
Inc(A1, B1 or not C1 xor D1 + Buffer[ 4] + RipeS6); A1 := A1 shl 6 or A1 shr 26; |
Inc(D1, A1 or not B1 xor C1 + Buffer[ 9] + RipeS6); D1 := D1 shl 15 or D1 shr 17; |
Inc(C1, D1 or not A1 xor B1 + Buffer[ 1] + RipeS6); C1 := C1 shl 13 or C1 shr 19; |
Inc(B1, C1 or not D1 xor A1 + Buffer[ 2] + RipeS6); B1 := B1 shl 11 or B1 shr 21; |
T := A1; A1 := A2; A2 := T; |
T := C1; C1 := C2; C2 := T; |
T := D1; D1 := D2; D2 := T; |
Inc(A1, B1 or not C1 xor D1 + Buffer[ 3] + RipeS2); A1 := A1 shl 11 or A1 shr 21; |
Inc(D1, A1 or not B1 xor C1 + Buffer[10] + RipeS2); D1 := D1 shl 13 or D1 shr 19; |
Inc(C1, D1 or not A1 xor B1 + Buffer[14] + RipeS2); C1 := C1 shl 6 or C1 shr 26; |
Inc(B1, C1 or not D1 xor A1 + Buffer[ 4] + RipeS2); B1 := B1 shl 7 or B1 shr 25; |
Inc(A1, B1 or not C1 xor D1 + Buffer[ 9] + RipeS2); A1 := A1 shl 14 or A1 shr 18; |
Inc(D1, A1 or not B1 xor C1 + Buffer[15] + RipeS2); D1 := D1 shl 9 or D1 shr 23; |
Inc(C1, D1 or not A1 xor B1 + Buffer[ 8] + RipeS2); C1 := C1 shl 13 or C1 shr 19; |
Inc(B1, C1 or not D1 xor A1 + Buffer[ 1] + RipeS2); B1 := B1 shl 15 or B1 shr 17; |
Inc(A1, B1 or not C1 xor D1 + Buffer[ 2] + RipeS2); A1 := A1 shl 14 or A1 shr 18; |
Inc(D1, A1 or not B1 xor C1 + Buffer[ 7] + RipeS2); D1 := D1 shl 8 or D1 shr 24; |
Inc(C1, D1 or not A1 xor B1 + Buffer[ 0] + RipeS2); C1 := C1 shl 13 or C1 shr 19; |
Inc(B1, C1 or not D1 xor A1 + Buffer[ 6] + RipeS2); B1 := B1 shl 6 or B1 shr 26; |
Inc(A1, B1 or not C1 xor D1 + Buffer[13] + RipeS2); A1 := A1 shl 5 or A1 shr 27; |
Inc(D1, A1 or not B1 xor C1 + Buffer[11] + RipeS2); D1 := D1 shl 12 or D1 shr 20; |
Inc(C1, D1 or not A1 xor B1 + Buffer[ 5] + RipeS2); C1 := C1 shl 7 or C1 shr 25; |
Inc(B1, C1 or not D1 xor A1 + Buffer[12] + RipeS2); B1 := B1 shl 5 or B1 shr 27; |
T := A1; A1 := A2; A2 := T; |
T := B1; B1 := B2; B2 := T; |
T := C1; C1 := C2; C2 := T; |
T := D1; D1 := D2; D2 := T; |
Inc(A1, B1 and C1 or not B1 and D1 + Buffer[15] + RipeS7); A1 := A1 shl 9 or A1 shr 23; |
Inc(D1, A1 and B1 or not A1 and C1 + Buffer[ 5] + RipeS7); D1 := D1 shl 7 or D1 shr 25; |
Inc(C1, D1 and A1 or not D1 and B1 + Buffer[ 1] + RipeS7); C1 := C1 shl 15 or C1 shr 17; |
Inc(B1, C1 and D1 or not C1 and A1 + Buffer[ 3] + RipeS7); B1 := B1 shl 11 or B1 shr 21; |
Inc(A1, B1 and C1 or not B1 and D1 + Buffer[ 7] + RipeS7); A1 := A1 shl 8 or A1 shr 24; |
Inc(D1, A1 and B1 or not A1 and C1 + Buffer[14] + RipeS7); D1 := D1 shl 6 or D1 shr 26; |
Inc(C1, D1 and A1 or not D1 and B1 + Buffer[ 6] + RipeS7); C1 := C1 shl 6 or C1 shr 26; |
Inc(B1, C1 and D1 or not C1 and A1 + Buffer[ 9] + RipeS7); B1 := B1 shl 14 or B1 shr 18; |
Inc(A1, B1 and C1 or not B1 and D1 + Buffer[11] + RipeS7); A1 := A1 shl 12 or A1 shr 20; |
Inc(D1, A1 and B1 or not A1 and C1 + Buffer[ 8] + RipeS7); D1 := D1 shl 13 or D1 shr 19; |
Inc(C1, D1 and A1 or not D1 and B1 + Buffer[12] + RipeS7); C1 := C1 shl 5 or C1 shr 27; |
Inc(B1, C1 and D1 or not C1 and A1 + Buffer[ 2] + RipeS7); B1 := B1 shl 14 or B1 shr 18; |
Inc(A1, B1 and C1 or not B1 and D1 + Buffer[10] + RipeS7); A1 := A1 shl 13 or A1 shr 19; |
Inc(D1, A1 and B1 or not A1 and C1 + Buffer[ 0] + RipeS7); D1 := D1 shl 13 or D1 shr 19; |
Inc(C1, D1 and A1 or not D1 and B1 + Buffer[ 4] + RipeS7); C1 := C1 shl 7 or C1 shr 25; |
Inc(B1, C1 and D1 or not C1 and A1 + Buffer[13] + RipeS7); B1 := B1 shl 5 or B1 shr 27; |
T := A1; A1 := A2; A2 := T; |
T := B1; B1 := B2; B2 := T; |
T := D1; D1 := D2; D2 := T; |
Inc(A1, B1 and D1 or C1 and not D1 + Buffer[ 1] + RipeS3); A1 := A1 shl 11 or A1 shr 21; |
Inc(D1, A1 and C1 or B1 and not C1 + Buffer[ 9] + RipeS3); D1 := D1 shl 12 or D1 shr 20; |
Inc(C1, D1 and B1 or A1 and not B1 + Buffer[11] + RipeS3); C1 := C1 shl 14 or C1 shr 18; |
Inc(B1, C1 and A1 or D1 and not A1 + Buffer[10] + RipeS3); B1 := B1 shl 15 or B1 shr 17; |
Inc(A1, B1 and D1 or C1 and not D1 + Buffer[ 0] + RipeS3); A1 := A1 shl 14 or A1 shr 18; |
Inc(D1, A1 and C1 or B1 and not C1 + Buffer[ 8] + RipeS3); D1 := D1 shl 15 or D1 shr 17; |
Inc(C1, D1 and B1 or A1 and not B1 + Buffer[12] + RipeS3); C1 := C1 shl 9 or C1 shr 23; |
Inc(B1, C1 and A1 or D1 and not A1 + Buffer[ 4] + RipeS3); B1 := B1 shl 8 or B1 shr 24; |
Inc(A1, B1 and D1 or C1 and not D1 + Buffer[13] + RipeS3); A1 := A1 shl 9 or A1 shr 23; |
Inc(D1, A1 and C1 or B1 and not C1 + Buffer[ 3] + RipeS3); D1 := D1 shl 14 or D1 shr 18; |
Inc(C1, D1 and B1 or A1 and not B1 + Buffer[ 7] + RipeS3); C1 := C1 shl 5 or C1 shr 27; |
Inc(B1, C1 and A1 or D1 and not A1 + Buffer[15] + RipeS3); B1 := B1 shl 6 or B1 shr 26; |
Inc(A1, B1 and D1 or C1 and not D1 + Buffer[14] + RipeS3); A1 := A1 shl 8 or A1 shr 24; |
Inc(D1, A1 and C1 or B1 and not C1 + Buffer[ 5] + RipeS3); D1 := D1 shl 6 or D1 shr 26; |
Inc(C1, D1 and B1 or A1 and not B1 + Buffer[ 6] + RipeS3); C1 := C1 shl 5 or C1 shr 27; |
Inc(B1, C1 and A1 or D1 and not A1 + Buffer[ 2] + RipeS3); B1 := B1 shl 12 or B1 shr 20; |
T := A1; A1 := A2; A2 := T; |
T := B1; B1 := B2; B2 := T; |
T := C1; C1 := C2; C2 := T; |
T := D1; D1 := D2; D2 := T; |
Inc(A1, B1 xor C1 xor D1 + Buffer[ 8]); A1 := A1 shl 15 or A1 shr 17; |
Inc(D1, A1 xor B1 xor C1 + Buffer[ 6]); D1 := D1 shl 5 or D1 shr 27; |
Inc(C1, D1 xor A1 xor B1 + Buffer[ 4]); C1 := C1 shl 8 or C1 shr 24; |
Inc(B1, C1 xor D1 xor A1 + Buffer[ 1]); B1 := B1 shl 11 or B1 shr 21; |
Inc(A1, B1 xor C1 xor D1 + Buffer[ 3]); A1 := A1 shl 14 or A1 shr 18; |
Inc(D1, A1 xor B1 xor C1 + Buffer[11]); D1 := D1 shl 14 or D1 shr 18; |
Inc(C1, D1 xor A1 xor B1 + Buffer[15]); C1 := C1 shl 6 or C1 shr 26; |
Inc(B1, C1 xor D1 xor A1 + Buffer[ 0]); B1 := B1 shl 14 or B1 shr 18; |
Inc(A1, B1 xor C1 xor D1 + Buffer[ 5]); A1 := A1 shl 6 or A1 shr 26; |
Inc(D1, A1 xor B1 xor C1 + Buffer[12]); D1 := D1 shl 9 or D1 shr 23; |
Inc(C1, D1 xor A1 xor B1 + Buffer[ 2]); C1 := C1 shl 12 or C1 shr 20; |
Inc(B1, C1 xor D1 xor A1 + Buffer[13]); B1 := B1 shl 9 or B1 shr 23; |
Inc(A1, B1 xor C1 xor D1 + Buffer[ 9]); A1 := A1 shl 12 or A1 shr 20; |
Inc(D1, A1 xor B1 xor C1 + Buffer[ 7]); D1 := D1 shl 5 or D1 shr 27; |
Inc(C1, D1 xor A1 xor B1 + Buffer[10]); C1 := C1 shl 15 or C1 shr 17; |
Inc(B1, C1 xor D1 xor A1 + Buffer[14]); B1 := B1 shl 8 or B1 shr 24; |
Inc(FDigest[0], A2); |
Inc(FDigest[1], B2); |
Inc(FDigest[2], C2); |
Inc(FDigest[3], D1); |
Inc(FDigest[4], A1); |
Inc(FDigest[5], B1); |
Inc(FDigest[6], C1); |
Inc(FDigest[7], D2); |
end; |
{$ENDIF !THash_RipeMD256_asm} |
procedure THash_RipeMD256.DoInit; |
begin |
FDigest[0] := $67452301; |
FDigest[1] := $EFCDAB89; |
FDigest[2] := $98BADCFE; |
FDigest[3] := $10325476; |
FDigest[4] := $76543210; |
FDigest[5] := $FEDCBA98; |
FDigest[6] := $89ABCDEF; |
FDigest[7] := $01234567; |
FDigest[8] := $01234567; |
FDigest[9] := $3C2D1E0F; |
end; |
class function THash_RipeMD256.DigestSize: UInt32; |
begin |
Result := 32; |
end; |
{ THash_RipeMD320 } |
{$IFNDEF THash_RipeMD320_asm} |
procedure THash_RipeMD320.DoTransform(Buffer: PUInt32Array); |
var |
A1, B1, C1, D1, E1: UInt32; |
A2, B2, C2, D2, E2: UInt32; |
T: UInt32; |
begin |
A1 := FDigest[0]; |
B1 := FDigest[1]; |
C1 := FDigest[2]; |
D1 := FDigest[3]; |
E1 := FDigest[4]; |
A2 := FDigest[5]; |
B2 := FDigest[6]; |
C2 := FDigest[7]; |
D2 := FDigest[8]; |
E2 := FDigest[9]; |
Inc(A1, B1 xor C1 xor D1 + Buffer[ 0]); A1 := A1 shl 11 or A1 shr 21 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 xor B1 xor C1 + Buffer[ 1]); E1 := E1 shl 14 or E1 shr 18 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 xor A1 xor B1 + Buffer[ 2]); D1 := D1 shl 15 or D1 shr 17 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 xor E1 xor A1 + Buffer[ 3]); C1 := C1 shl 12 or C1 shr 20 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 xor D1 xor E1 + Buffer[ 4]); B1 := B1 shl 5 or B1 shr 27 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 xor C1 xor D1 + Buffer[ 5]); A1 := A1 shl 8 or A1 shr 24 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 xor B1 xor C1 + Buffer[ 6]); E1 := E1 shl 7 or E1 shr 25 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 xor A1 xor B1 + Buffer[ 7]); D1 := D1 shl 9 or D1 shr 23 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 xor E1 xor A1 + Buffer[ 8]); C1 := C1 shl 11 or C1 shr 21 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 xor D1 xor E1 + Buffer[ 9]); B1 := B1 shl 13 or B1 shr 19 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 xor C1 xor D1 + Buffer[10]); A1 := A1 shl 14 or A1 shr 18 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 xor B1 xor C1 + Buffer[11]); E1 := E1 shl 15 or E1 shr 17 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 xor A1 xor B1 + Buffer[12]); D1 := D1 shl 6 or D1 shr 26 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 xor E1 xor A1 + Buffer[13]); C1 := C1 shl 7 or C1 shr 25 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 xor D1 xor E1 + Buffer[14]); B1 := B1 shl 9 or B1 shr 23 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 xor C1 xor D1 + Buffer[15]); A1 := A1 shl 8 or A1 shr 24 + E1; C1 := C1 shl 10 or C1 shr 22; |
T := A1; A1 := A2; A2 := T; |
T := B1; B1 := B2; B2 := T; |
T := C1; C1 := C2; C2 := T; |
T := D1; D1 := D2; D2 := T; |
T := E1; E1 := E2; E2 := T; |
Inc(A1, C1 or not D1 xor B1 + Buffer[ 5] + RipeS5); A1 := A1 shl 8 or A1 shr 24 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, B1 or not C1 xor A1 + Buffer[14] + RipeS5); E1 := E1 shl 9 or E1 shr 23 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, A1 or not B1 xor E1 + Buffer[ 7] + RipeS5); D1 := D1 shl 9 or D1 shr 23 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, E1 or not A1 xor D1 + Buffer[ 0] + RipeS5); C1 := C1 shl 11 or C1 shr 21 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, D1 or not E1 xor C1 + Buffer[ 9] + RipeS5); B1 := B1 shl 13 or B1 shr 19 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, C1 or not D1 xor B1 + Buffer[ 2] + RipeS5); A1 := A1 shl 15 or A1 shr 17 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, B1 or not C1 xor A1 + Buffer[11] + RipeS5); E1 := E1 shl 15 or E1 shr 17 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, A1 or not B1 xor E1 + Buffer[ 4] + RipeS5); D1 := D1 shl 5 or D1 shr 27 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, E1 or not A1 xor D1 + Buffer[13] + RipeS5); C1 := C1 shl 7 or C1 shr 25 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, D1 or not E1 xor C1 + Buffer[ 6] + RipeS5); B1 := B1 shl 7 or B1 shr 25 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, C1 or not D1 xor B1 + Buffer[15] + RipeS5); A1 := A1 shl 8 or A1 shr 24 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, B1 or not C1 xor A1 + Buffer[ 8] + RipeS5); E1 := E1 shl 11 or E1 shr 21 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, A1 or not B1 xor E1 + Buffer[ 1] + RipeS5); D1 := D1 shl 14 or D1 shr 18 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, E1 or not A1 xor D1 + Buffer[10] + RipeS5); C1 := C1 shl 14 or C1 shr 18 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, D1 or not E1 xor C1 + Buffer[ 3] + RipeS5); B1 := B1 shl 12 or B1 shr 20 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, C1 or not D1 xor B1 + Buffer[12] + RipeS5); A1 := A1 shl 6 or A1 shr 26 + E1; C1 := C1 shl 10 or C1 shr 22; |
T := B1; B1 := B2; B2 := T; |
T := C1; C1 := C2; C2 := T; |
T := D1; D1 := D2; D2 := T; |
T := E1; E1 := E2; E2 := T; |
Inc(E1, A1 and B1 or not A1 and C1 + Buffer[ 7] + RipeS1); E1 := E1 shl 7 or E1 shr 25 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 and A1 or not E1 and B1 + Buffer[ 4] + RipeS1); D1 := D1 shl 6 or D1 shr 26 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 and E1 or not D1 and A1 + Buffer[13] + RipeS1); C1 := C1 shl 8 or C1 shr 24 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 and D1 or not C1 and E1 + Buffer[ 1] + RipeS1); B1 := B1 shl 13 or B1 shr 19 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 and C1 or not B1 and D1 + Buffer[10] + RipeS1); A1 := A1 shl 11 or A1 shr 21 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 and B1 or not A1 and C1 + Buffer[ 6] + RipeS1); E1 := E1 shl 9 or E1 shr 23 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 and A1 or not E1 and B1 + Buffer[15] + RipeS1); D1 := D1 shl 7 or D1 shr 25 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 and E1 or not D1 and A1 + Buffer[ 3] + RipeS1); C1 := C1 shl 15 or C1 shr 17 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 and D1 or not C1 and E1 + Buffer[12] + RipeS1); B1 := B1 shl 7 or B1 shr 25 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 and C1 or not B1 and D1 + Buffer[ 0] + RipeS1); A1 := A1 shl 12 or A1 shr 20 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 and B1 or not A1 and C1 + Buffer[ 9] + RipeS1); E1 := E1 shl 15 or E1 shr 17 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 and A1 or not E1 and B1 + Buffer[ 5] + RipeS1); D1 := D1 shl 9 or D1 shr 23 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 and E1 or not D1 and A1 + Buffer[ 2] + RipeS1); C1 := C1 shl 11 or C1 shr 21 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 and D1 or not C1 and E1 + Buffer[14] + RipeS1); B1 := B1 shl 7 or B1 shr 25 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 and C1 or not B1 and D1 + Buffer[11] + RipeS1); A1 := A1 shl 13 or A1 shr 19 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 and B1 or not A1 and C1 + Buffer[ 8] + RipeS1); E1 := E1 shl 12 or E1 shr 20 + D1; B1 := B1 shl 10 or B1 shr 22; |
T := A1; A1 := A2; A2 := T; |
T := B1; B1 := B2; B2 := T; |
T := C1; C1 := C2; C2 := T; |
T := D1; D1 := D2; D2 := T; |
T := E1; E1 := E2; E2 := T; |
Inc(E1, A1 and C1 or B1 and not C1 + Buffer[ 6] + RipeS6); E1 := E1 shl 9 or E1 shr 23 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 and B1 or A1 and not B1 + Buffer[11] + RipeS6); D1 := D1 shl 13 or D1 shr 19 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 and A1 or E1 and not A1 + Buffer[ 3] + RipeS6); C1 := C1 shl 15 or C1 shr 17 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 and E1 or D1 and not E1 + Buffer[ 7] + RipeS6); B1 := B1 shl 7 or B1 shr 25 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 and D1 or C1 and not D1 + Buffer[ 0] + RipeS6); A1 := A1 shl 12 or A1 shr 20 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 and C1 or B1 and not C1 + Buffer[13] + RipeS6); E1 := E1 shl 8 or E1 shr 24 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 and B1 or A1 and not B1 + Buffer[ 5] + RipeS6); D1 := D1 shl 9 or D1 shr 23 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 and A1 or E1 and not A1 + Buffer[10] + RipeS6); C1 := C1 shl 11 or C1 shr 21 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 and E1 or D1 and not E1 + Buffer[14] + RipeS6); B1 := B1 shl 7 or B1 shr 25 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 and D1 or C1 and not D1 + Buffer[15] + RipeS6); A1 := A1 shl 7 or A1 shr 25 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 and C1 or B1 and not C1 + Buffer[ 8] + RipeS6); E1 := E1 shl 12 or E1 shr 20 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 and B1 or A1 and not B1 + Buffer[12] + RipeS6); D1 := D1 shl 7 or D1 shr 25 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 and A1 or E1 and not A1 + Buffer[ 4] + RipeS6); C1 := C1 shl 6 or C1 shr 26 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 and E1 or D1 and not E1 + Buffer[ 9] + RipeS6); B1 := B1 shl 15 or B1 shr 17 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 and D1 or C1 and not D1 + Buffer[ 1] + RipeS6); A1 := A1 shl 13 or A1 shr 19 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 and C1 or B1 and not C1 + Buffer[ 2] + RipeS6); E1 := E1 shl 11 or E1 shr 21 + D1; B1 := B1 shl 10 or B1 shr 22; |
T := A1; A1 := A2; A2 := T; |
T := C1; C1 := C2; C2 := T; |
T := D1; D1 := D2; D2 := T; |
T := E1; E1 := E2; E2 := T; |
Inc(D1, E1 or not A1 xor B1 + Buffer[ 3] + RipeS2); D1 := D1 shl 11 or D1 shr 21 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 or not E1 xor A1 + Buffer[10] + RipeS2); C1 := C1 shl 13 or C1 shr 19 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 or not D1 xor E1 + Buffer[14] + RipeS2); B1 := B1 shl 6 or B1 shr 26 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 or not C1 xor D1 + Buffer[ 4] + RipeS2); A1 := A1 shl 7 or A1 shr 25 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 or not B1 xor C1 + Buffer[ 9] + RipeS2); E1 := E1 shl 14 or E1 shr 18 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 or not A1 xor B1 + Buffer[15] + RipeS2); D1 := D1 shl 9 or D1 shr 23 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 or not E1 xor A1 + Buffer[ 8] + RipeS2); C1 := C1 shl 13 or C1 shr 19 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 or not D1 xor E1 + Buffer[ 1] + RipeS2); B1 := B1 shl 15 or B1 shr 17 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 or not C1 xor D1 + Buffer[ 2] + RipeS2); A1 := A1 shl 14 or A1 shr 18 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 or not B1 xor C1 + Buffer[ 7] + RipeS2); E1 := E1 shl 8 or E1 shr 24 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 or not A1 xor B1 + Buffer[ 0] + RipeS2); D1 := D1 shl 13 or D1 shr 19 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 or not E1 xor A1 + Buffer[ 6] + RipeS2); C1 := C1 shl 6 or C1 shr 26 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 or not D1 xor E1 + Buffer[13] + RipeS2); B1 := B1 shl 5 or B1 shr 27 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 or not C1 xor D1 + Buffer[11] + RipeS2); A1 := A1 shl 12 or A1 shr 20 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 or not B1 xor C1 + Buffer[ 5] + RipeS2); E1 := E1 shl 7 or E1 shr 25 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 or not A1 xor B1 + Buffer[12] + RipeS2); D1 := D1 shl 5 or D1 shr 27 + C1; A1 := A1 shl 10 or A1 shr 22; |
T := A1; A1 := A2; A2 := T; |
T := B1; B1 := B2; B2 := T; |
T := C1; C1 := C2; C2 := T; |
T := D1; D1 := D2; D2 := T; |
T := E1; E1 := E2; E2 := T; |
Inc(D1, E1 or not A1 xor B1 + Buffer[15] + RipeS7); D1 := D1 shl 9 or D1 shr 23 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 or not E1 xor A1 + Buffer[ 5] + RipeS7); C1 := C1 shl 7 or C1 shr 25 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 or not D1 xor E1 + Buffer[ 1] + RipeS7); B1 := B1 shl 15 or B1 shr 17 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 or not C1 xor D1 + Buffer[ 3] + RipeS7); A1 := A1 shl 11 or A1 shr 21 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 or not B1 xor C1 + Buffer[ 7] + RipeS7); E1 := E1 shl 8 or E1 shr 24 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 or not A1 xor B1 + Buffer[14] + RipeS7); D1 := D1 shl 6 or D1 shr 26 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 or not E1 xor A1 + Buffer[ 6] + RipeS7); C1 := C1 shl 6 or C1 shr 26 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 or not D1 xor E1 + Buffer[ 9] + RipeS7); B1 := B1 shl 14 or B1 shr 18 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 or not C1 xor D1 + Buffer[11] + RipeS7); A1 := A1 shl 12 or A1 shr 20 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 or not B1 xor C1 + Buffer[ 8] + RipeS7); E1 := E1 shl 13 or E1 shr 19 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 or not A1 xor B1 + Buffer[12] + RipeS7); D1 := D1 shl 5 or D1 shr 27 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 or not E1 xor A1 + Buffer[ 2] + RipeS7); C1 := C1 shl 14 or C1 shr 18 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 or not D1 xor E1 + Buffer[10] + RipeS7); B1 := B1 shl 13 or B1 shr 19 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 or not C1 xor D1 + Buffer[ 0] + RipeS7); A1 := A1 shl 13 or A1 shr 19 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 or not B1 xor C1 + Buffer[ 4] + RipeS7); E1 := E1 shl 7 or E1 shr 25 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 or not A1 xor B1 + Buffer[13] + RipeS7); D1 := D1 shl 5 or D1 shr 27 + C1; A1 := A1 shl 10 or A1 shr 22; |
T := A1; A1 := A2; A2 := T; |
T := B1; B1 := B2; B2 := T; |
T := D1; D1 := D2; D2 := T; |
T := E1; E1 := E2; E2 := T; |
Inc(C1, D1 and A1 or E1 and not A1 + Buffer[ 1] + RipeS3); C1 := C1 shl 11 or C1 shr 21 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 and E1 or D1 and not E1 + Buffer[ 9] + RipeS3); B1 := B1 shl 12 or B1 shr 20 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 and D1 or C1 and not D1 + Buffer[11] + RipeS3); A1 := A1 shl 14 or A1 shr 18 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 and C1 or B1 and not C1 + Buffer[10] + RipeS3); E1 := E1 shl 15 or E1 shr 17 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 and B1 or A1 and not B1 + Buffer[ 0] + RipeS3); D1 := D1 shl 14 or D1 shr 18 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 and A1 or E1 and not A1 + Buffer[ 8] + RipeS3); C1 := C1 shl 15 or C1 shr 17 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 and E1 or D1 and not E1 + Buffer[12] + RipeS3); B1 := B1 shl 9 or B1 shr 23 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 and D1 or C1 and not D1 + Buffer[ 4] + RipeS3); A1 := A1 shl 8 or A1 shr 24 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 and C1 or B1 and not C1 + Buffer[13] + RipeS3); E1 := E1 shl 9 or E1 shr 23 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 and B1 or A1 and not B1 + Buffer[ 3] + RipeS3); D1 := D1 shl 14 or D1 shr 18 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 and A1 or E1 and not A1 + Buffer[ 7] + RipeS3); C1 := C1 shl 5 or C1 shr 27 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 and E1 or D1 and not E1 + Buffer[15] + RipeS3); B1 := B1 shl 6 or B1 shr 26 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 and D1 or C1 and not D1 + Buffer[14] + RipeS3); A1 := A1 shl 8 or A1 shr 24 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 and C1 or B1 and not C1 + Buffer[ 5] + RipeS3); E1 := E1 shl 6 or E1 shr 26 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 and B1 or A1 and not B1 + Buffer[ 6] + RipeS3); D1 := D1 shl 5 or D1 shr 27 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 and A1 or E1 and not A1 + Buffer[ 2] + RipeS3); C1 := C1 shl 12 or C1 shr 20 + B1; E1 := E1 shl 10 or E1 shr 22; |
T := A1; A1 := A2; A2 := T; |
T := B1; B1 := B2; B2 := T; |
T := C1; C1 := C2; C2 := T; |
T := D1; D1 := D2; D2 := T; |
T := E1; E1 := E2; E2 := T; |
Inc(C1, D1 and E1 or not D1 and A1 + Buffer[ 8] + RipeS8); C1 := C1 shl 15 or C1 shr 17 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 and D1 or not C1 and E1 + Buffer[ 6] + RipeS8); B1 := B1 shl 5 or B1 shr 27 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 and C1 or not B1 and D1 + Buffer[ 4] + RipeS8); A1 := A1 shl 8 or A1 shr 24 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 and B1 or not A1 and C1 + Buffer[ 1] + RipeS8); E1 := E1 shl 11 or E1 shr 21 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 and A1 or not E1 and B1 + Buffer[ 3] + RipeS8); D1 := D1 shl 14 or D1 shr 18 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 and E1 or not D1 and A1 + Buffer[11] + RipeS8); C1 := C1 shl 14 or C1 shr 18 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 and D1 or not C1 and E1 + Buffer[15] + RipeS8); B1 := B1 shl 6 or B1 shr 26 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 and C1 or not B1 and D1 + Buffer[ 0] + RipeS8); A1 := A1 shl 14 or A1 shr 18 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 and B1 or not A1 and C1 + Buffer[ 5] + RipeS8); E1 := E1 shl 6 or E1 shr 26 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 and A1 or not E1 and B1 + Buffer[12] + RipeS8); D1 := D1 shl 9 or D1 shr 23 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 and E1 or not D1 and A1 + Buffer[ 2] + RipeS8); C1 := C1 shl 12 or C1 shr 20 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 and D1 or not C1 and E1 + Buffer[13] + RipeS8); B1 := B1 shl 9 or B1 shr 23 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 and C1 or not B1 and D1 + Buffer[ 9] + RipeS8); A1 := A1 shl 12 or A1 shr 20 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 and B1 or not A1 and C1 + Buffer[ 7] + RipeS8); E1 := E1 shl 5 or E1 shr 27 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 and A1 or not E1 and B1 + Buffer[10] + RipeS8); D1 := D1 shl 15 or D1 shr 17 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 and E1 or not D1 and A1 + Buffer[14] + RipeS8); C1 := C1 shl 8 or C1 shr 24 + B1; E1 := E1 shl 10 or E1 shr 22; |
T := A1; A1 := A2; A2 := T; |
T := B1; B1 := B2; B2 := T; |
T := C1; C1 := C2; C2 := T; |
T := E1; E1 := E2; E2 := T; |
Inc(B1, D1 or not E1 xor C1 + Buffer[ 4] + RipeS4); B1 := B1 shl 9 or B1 shr 23 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, C1 or not D1 xor B1 + Buffer[ 0] + RipeS4); A1 := A1 shl 15 or A1 shr 17 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, B1 or not C1 xor A1 + Buffer[ 5] + RipeS4); E1 := E1 shl 5 or E1 shr 27 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, A1 or not B1 xor E1 + Buffer[ 9] + RipeS4); D1 := D1 shl 11 or D1 shr 21 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, E1 or not A1 xor D1 + Buffer[ 7] + RipeS4); C1 := C1 shl 6 or C1 shr 26 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, D1 or not E1 xor C1 + Buffer[12] + RipeS4); B1 := B1 shl 8 or B1 shr 24 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, C1 or not D1 xor B1 + Buffer[ 2] + RipeS4); A1 := A1 shl 13 or A1 shr 19 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, B1 or not C1 xor A1 + Buffer[10] + RipeS4); E1 := E1 shl 12 or E1 shr 20 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, A1 or not B1 xor E1 + Buffer[14] + RipeS4); D1 := D1 shl 5 or D1 shr 27 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, E1 or not A1 xor D1 + Buffer[ 1] + RipeS4); C1 := C1 shl 12 or C1 shr 20 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, D1 or not E1 xor C1 + Buffer[ 3] + RipeS4); B1 := B1 shl 13 or B1 shr 19 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, C1 or not D1 xor B1 + Buffer[ 8] + RipeS4); A1 := A1 shl 14 or A1 shr 18 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, B1 or not C1 xor A1 + Buffer[11] + RipeS4); E1 := E1 shl 11 or E1 shr 21 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, A1 or not B1 xor E1 + Buffer[ 6] + RipeS4); D1 := D1 shl 8 or D1 shr 24 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, E1 or not A1 xor D1 + Buffer[15] + RipeS4); C1 := C1 shl 5 or C1 shr 27 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, D1 or not E1 xor C1 + Buffer[13] + RipeS4); B1 := B1 shl 6 or B1 shr 26 + A1; D1 := D1 shl 10 or D1 shr 22; |
T := A1; A1 := A2; A2 := T; |
T := B1; B1 := B2; B2 := T; |
T := C1; C1 := C2; C2 := T; |
T := D1; D1 := D2; D2 := T; |
T := E1; E1 := E2; E2 := T; |
Inc(B1, C1 xor D1 xor E1 + Buffer[12]); B1 := B1 shl 8 or B1 shr 24 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 xor C1 xor D1 + Buffer[15]); A1 := A1 shl 5 or A1 shr 27 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 xor B1 xor C1 + Buffer[10]); E1 := E1 shl 12 or E1 shr 20 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 xor A1 xor B1 + Buffer[ 4]); D1 := D1 shl 9 or D1 shr 23 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 xor E1 xor A1 + Buffer[ 1]); C1 := C1 shl 12 or C1 shr 20 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 xor D1 xor E1 + Buffer[ 5]); B1 := B1 shl 5 or B1 shr 27 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 xor C1 xor D1 + Buffer[ 8]); A1 := A1 shl 14 or A1 shr 18 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 xor B1 xor C1 + Buffer[ 7]); E1 := E1 shl 6 or E1 shr 26 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 xor A1 xor B1 + Buffer[ 6]); D1 := D1 shl 8 or D1 shr 24 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 xor E1 xor A1 + Buffer[ 2]); C1 := C1 shl 13 or C1 shr 19 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 xor D1 xor E1 + Buffer[13]); B1 := B1 shl 6 or B1 shr 26 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(A1, B1 xor C1 xor D1 + Buffer[14]); A1 := A1 shl 5 or A1 shr 27 + E1; C1 := C1 shl 10 or C1 shr 22; |
Inc(E1, A1 xor B1 xor C1 + Buffer[ 0]); E1 := E1 shl 15 or E1 shr 17 + D1; B1 := B1 shl 10 or B1 shr 22; |
Inc(D1, E1 xor A1 xor B1 + Buffer[ 3]); D1 := D1 shl 13 or D1 shr 19 + C1; A1 := A1 shl 10 or A1 shr 22; |
Inc(C1, D1 xor E1 xor A1 + Buffer[ 9]); C1 := C1 shl 11 or C1 shr 21 + B1; E1 := E1 shl 10 or E1 shr 22; |
Inc(B1, C1 xor D1 xor E1 + Buffer[11]); B1 := B1 shl 11 or B1 shr 21 + A1; D1 := D1 shl 10 or D1 shr 22; |
Inc(FDigest[0], A2); |
Inc(FDigest[1], B2); |
Inc(FDigest[2], C2); |
Inc(FDigest[3], D2); |
Inc(FDigest[4], E1); |
Inc(FDigest[5], A1); |
Inc(FDigest[6], B1); |
Inc(FDigest[7], C1); |
Inc(FDigest[8], D1); |
Inc(FDigest[9], E2); |
end; |
{$ENDIF !THash_RipeMD320_asm} |
class function THash_RipeMD320.DigestSize: UInt32; |
begin |
Result := 40; |
end; |
{ THash_SHA } |
{$IFNDEF THash_SHA_asm} |
procedure THash_SHA0.DoTransform(Buffer: PUInt32Array); |
var |
A, B, C, D, E, T: UInt32; |
W: array[0..79] of UInt32; |
I: Integer; |
begin |
SwapUInt32Buffer(Buffer[0], W, 16); |
if ClassType <> THash_SHA1 then |
begin |
for I := 16 to 79 do |
begin |
T := W[I - 3] xor W[I - 8] xor W[I - 14] xor W[I - 16]; |
W[I] := T; |
end; |
end |
else |
begin |
for I := 16 to 79 do |
begin |
T := W[I - 3] xor W[I - 8] xor W[I - 14] xor W[I - 16]; |
W[I] := T shl 1 or T shr 31; |
end; |
end; |
A := FDigest[0]; |
B := FDigest[1]; |
C := FDigest[2]; |
D := FDigest[3]; |
E := FDigest[4]; |
Inc(E, (A shl 5 or A shr 27) + (D xor (B and (C xor D))) + W[ 0] + $5A827999); B := B shr 2 or B shl 30; |
Inc(D, (E shl 5 or E shr 27) + (C xor (A and (B xor C))) + W[ 1] + $5A827999); A := A shr 2 or A shl 30; |
Inc(C, (D shl 5 or D shr 27) + (B xor (E and (A xor B))) + W[ 2] + $5A827999); E := E shr 2 or E shl 30; |
Inc(B, (C shl 5 or C shr 27) + (A xor (D and (E xor A))) + W[ 3] + $5A827999); D := D shr 2 or D shl 30; |
Inc(A, (B shl 5 or B shr 27) + (E xor (C and (D xor E))) + W[ 4] + $5A827999); C := C shr 2 or C shl 30; |
Inc(E, (A shl 5 or A shr 27) + (D xor (B and (C xor D))) + W[ 5] + $5A827999); B := B shr 2 or B shl 30; |
Inc(D, (E shl 5 or E shr 27) + (C xor (A and (B xor C))) + W[ 6] + $5A827999); A := A shr 2 or A shl 30; |
Inc(C, (D shl 5 or D shr 27) + (B xor (E and (A xor B))) + W[ 7] + $5A827999); E := E shr 2 or E shl 30; |
Inc(B, (C shl 5 or C shr 27) + (A xor (D and (E xor A))) + W[ 8] + $5A827999); D := D shr 2 or D shl 30; |
Inc(A, (B shl 5 or B shr 27) + (E xor (C and (D xor E))) + W[ 9] + $5A827999); C := C shr 2 or C shl 30; |
Inc(E, (A shl 5 or A shr 27) + (D xor (B and (C xor D))) + W[10] + $5A827999); B := B shr 2 or B shl 30; |
Inc(D, (E shl 5 or E shr 27) + (C xor (A and (B xor C))) + W[11] + $5A827999); A := A shr 2 or A shl 30; |
Inc(C, (D shl 5 or D shr 27) + (B xor (E and (A xor B))) + W[12] + $5A827999); E := E shr 2 or E shl 30; |
Inc(B, (C shl 5 or C shr 27) + (A xor (D and (E xor A))) + W[13] + $5A827999); D := D shr 2 or D shl 30; |
Inc(A, (B shl 5 or B shr 27) + (E xor (C and (D xor E))) + W[14] + $5A827999); C := C shr 2 or C shl 30; |
Inc(E, (A shl 5 or A shr 27) + (D xor (B and (C xor D))) + W[15] + $5A827999); B := B shr 2 or B shl 30; |
Inc(D, (E shl 5 or E shr 27) + (C xor (A and (B xor C))) + W[16] + $5A827999); A := A shr 2 or A shl 30; |
Inc(C, (D shl 5 or D shr 27) + (B xor (E and (A xor B))) + W[17] + $5A827999); E := E shr 2 or E shl 30; |
Inc(B, (C shl 5 or C shr 27) + (A xor (D and (E xor A))) + W[18] + $5A827999); D := D shr 2 or D shl 30; |
Inc(A, (B shl 5 or B shr 27) + (E xor (C and (D xor E))) + W[19] + $5A827999); C := C shr 2 or C shl 30; |
Inc(E, (A shl 5 or A shr 27) + (D xor B xor C) + W[20] + $6ED9EBA1); B := B shr 2 or B shl 30; |
Inc(D, (E shl 5 or E shr 27) + (C xor A xor B) + W[21] + $6ED9EBA1); A := A shr 2 or A shl 30; |
Inc(C, (D shl 5 or D shr 27) + (B xor E xor A) + W[22] + $6ED9EBA1); E := E shr 2 or E shl 30; |
Inc(B, (C shl 5 or C shr 27) + (A xor D xor E) + W[23] + $6ED9EBA1); D := D shr 2 or D shl 30; |
Inc(A, (B shl 5 or B shr 27) + (E xor C xor D) + W[24] + $6ED9EBA1); C := C shr 2 or C shl 30; |
Inc(E, (A shl 5 or A shr 27) + (D xor B xor C) + W[25] + $6ED9EBA1); B := B shr 2 or B shl 30; |
Inc(D, (E shl 5 or E shr 27) + (C xor A xor B) + W[26] + $6ED9EBA1); A := A shr 2 or A shl 30; |
Inc(C, (D shl 5 or D shr 27) + (B xor E xor A) + W[27] + $6ED9EBA1); E := E shr 2 or E shl 30; |
Inc(B, (C shl 5 or C shr 27) + (A xor D xor E) + W[28] + $6ED9EBA1); D := D shr 2 or D shl 30; |
Inc(A, (B shl 5 or B shr 27) + (E xor C xor D) + W[29] + $6ED9EBA1); C := C shr 2 or C shl 30; |
Inc(E, (A shl 5 or A shr 27) + (D xor B xor C) + W[30] + $6ED9EBA1); B := B shr 2 or B shl 30; |
Inc(D, (E shl 5 or E shr 27) + (C xor A xor B) + W[31] + $6ED9EBA1); A := A shr 2 or A shl 30; |
Inc(C, (D shl 5 or D shr 27) + (B xor E xor A) + W[32] + $6ED9EBA1); E := E shr 2 or E shl 30; |
Inc(B, (C shl 5 or C shr 27) + (A xor D xor E) + W[33] + $6ED9EBA1); D := D shr 2 or D shl 30; |
Inc(A, (B shl 5 or B shr 27) + (E xor C xor D) + W[34] + $6ED9EBA1); C := C shr 2 or C shl 30; |
Inc(E, (A shl 5 or A shr 27) + (D xor B xor C) + W[35] + $6ED9EBA1); B := B shr 2 or B shl 30; |
Inc(D, (E shl 5 or E shr 27) + (C xor A xor B) + W[36] + $6ED9EBA1); A := A shr 2 or A shl 30; |
Inc(C, (D shl 5 or D shr 27) + (B xor E xor A) + W[37] + $6ED9EBA1); E := E shr 2 or E shl 30; |
Inc(B, (C shl 5 or C shr 27) + (A xor D xor E) + W[38] + $6ED9EBA1); D := D shr 2 or D shl 30; |
Inc(A, (B shl 5 or B shr 27) + (E xor C xor D) + W[39] + $6ED9EBA1); C := C shr 2 or C shl 30; |
Inc(E, (A shl 5 or A shr 27) + ((B and C) or (D and (B or C))) + W[40] + $8F1BBCDC); B := B shr 2 or B shl 30; |
Inc(D, (E shl 5 or E shr 27) + ((A and B) or (C and (A or B))) + W[41] + $8F1BBCDC); A := A shr 2 or A shl 30; |
Inc(C, (D shl 5 or D shr 27) + ((E and A) or (B and (E or A))) + W[42] + $8F1BBCDC); E := E shr 2 or E shl 30; |
Inc(B, (C shl 5 or C shr 27) + ((D and E) or (A and (D or E))) + W[43] + $8F1BBCDC); D := D shr 2 or D shl 30; |
Inc(A, (B shl 5 or B shr 27) + ((C and D) or (E and (C or D))) + W[44] + $8F1BBCDC); C := C shr 2 or C shl 30; |
Inc(E, (A shl 5 or A shr 27) + ((B and C) or (D and (B or C))) + W[45] + $8F1BBCDC); B := B shr 2 or B shl 30; |
Inc(D, (E shl 5 or E shr 27) + ((A and B) or (C and (A or B))) + W[46] + $8F1BBCDC); A := A shr 2 or A shl 30; |
Inc(C, (D shl 5 or D shr 27) + ((E and A) or (B and (E or A))) + W[47] + $8F1BBCDC); E := E shr 2 or E shl 30; |
Inc(B, (C shl 5 or C shr 27) + ((D and E) or (A and (D or E))) + W[48] + $8F1BBCDC); D := D shr 2 or D shl 30; |
Inc(A, (B shl 5 or B shr 27) + ((C and D) or (E and (C or D))) + W[49] + $8F1BBCDC); C := C shr 2 or C shl 30; |
Inc(E, (A shl 5 or A shr 27) + ((B and C) or (D and (B or C))) + W[50] + $8F1BBCDC); B := B shr 2 or B shl 30; |
Inc(D, (E shl 5 or E shr 27) + ((A and B) or (C and (A or B))) + W[51] + $8F1BBCDC); A := A shr 2 or A shl 30; |
Inc(C, (D shl 5 or D shr 27) + ((E and A) or (B and (E or A))) + W[52] + $8F1BBCDC); E := E shr 2 or E shl 30; |
Inc(B, (C shl 5 or C shr 27) + ((D and E) or (A and (D or E))) + W[53] + $8F1BBCDC); D := D shr 2 or D shl 30; |
Inc(A, (B shl 5 or B shr 27) + ((C and D) or (E and (C or D))) + W[54] + $8F1BBCDC); C := C shr 2 or C shl 30; |
Inc(E, (A shl 5 or A shr 27) + ((B and C) or (D and (B or C))) + W[55] + $8F1BBCDC); B := B shr 2 or B shl 30; |
Inc(D, (E shl 5 or E shr 27) + ((A and B) or (C and (A or B))) + W[56] + $8F1BBCDC); A := A shr 2 or A shl 30; |
Inc(C, (D shl 5 or D shr 27) + ((E and A) or (B and (E or A))) + W[57] + $8F1BBCDC); E := E shr 2 or E shl 30; |
Inc(B, (C shl 5 or C shr 27) + ((D and E) or (A and (D or E))) + W[58] + $8F1BBCDC); D := D shr 2 or D shl 30; |
Inc(A, (B shl 5 or B shr 27) + ((C and D) or (E and (C or D))) + W[59] + $8F1BBCDC); C := C shr 2 or C shl 30; |
Inc(E, (A shl 5 or A shr 27) + (D xor B xor C) + W[60] + $CA62C1D6); B := B shr 2 or B shl 30; |
Inc(D, (E shl 5 or E shr 27) + (C xor A xor B) + W[61] + $CA62C1D6); A := A shr 2 or A shl 30; |
Inc(C, (D shl 5 or D shr 27) + (B xor E xor A) + W[62] + $CA62C1D6); E := E shr 2 or E shl 30; |
Inc(B, (C shl 5 or C shr 27) + (A xor D xor E) + W[63] + $CA62C1D6); D := D shr 2 or D shl 30; |
Inc(A, (B shl 5 or B shr 27) + (E xor C xor D) + W[64] + $CA62C1D6); C := C shr 2 or C shl 30; |
Inc(E, (A shl 5 or A shr 27) + (D xor B xor C) + W[65] + $CA62C1D6); B := B shr 2 or B shl 30; |
Inc(D, (E shl 5 or E shr 27) + (C xor A xor B) + W[66] + $CA62C1D6); A := A shr 2 or A shl 30; |
Inc(C, (D shl 5 or D shr 27) + (B xor E xor A) + W[67] + $CA62C1D6); E := E shr 2 or E shl 30; |
Inc(B, (C shl 5 or C shr 27) + (A xor D xor E) + W[68] + $CA62C1D6); D := D shr 2 or D shl 30; |
Inc(A, (B shl 5 or B shr 27) + (E xor C xor D) + W[69] + $CA62C1D6); C := C shr 2 or C shl 30; |
Inc(E, (A shl 5 or A shr 27) + (D xor B xor C) + W[70] + $CA62C1D6); B := B shr 2 or B shl 30; |
Inc(D, (E shl 5 or E shr 27) + (C xor A xor B) + W[71] + $CA62C1D6); A := A shr 2 or A shl 30; |
Inc(C, (D shl 5 or D shr 27) + (B xor E xor A) + W[72] + $CA62C1D6); E := E shr 2 or E shl 30; |
Inc(B, (C shl 5 or C shr 27) + (A xor D xor E) + W[73] + $CA62C1D6); D := D shr 2 or D shl 30; |
Inc(A, (B shl 5 or B shr 27) + (E xor C xor D) + W[74] + $CA62C1D6); C := C shr 2 or C shl 30; |
Inc(E, (A shl 5 or A shr 27) + (D xor B xor C) + W[75] + $CA62C1D6); B := B shr 2 or B shl 30; |
Inc(D, (E shl 5 or E shr 27) + (C xor A xor B) + W[76] + $CA62C1D6); A := A shr 2 or A shl 30; |
Inc(C, (D shl 5 or D shr 27) + (B xor E xor A) + W[77] + $CA62C1D6); E := E shr 2 or E shl 30; |
Inc(B, (C shl 5 or C shr 27) + (A xor D xor E) + W[78] + $CA62C1D6); D := D shr 2 or D shl 30; |
Inc(A, (B shl 5 or B shr 27) + (E xor C xor D) + W[79] + $CA62C1D6); C := C shr 2 or C shl 30; |
Inc(FDigest[0], A); |
Inc(FDigest[1], B); |
Inc(FDigest[2], C); |
Inc(FDigest[3], D); |
Inc(FDigest[4], E); |
end; |
{$ENDIF !THash_SHA_asm} |
procedure THash_SHA0.DoDone; |
begin |
if FCount[2] or FCount[3] <> 0 then |
RaiseHashOverflowError; |
if FPaddingByte = 0 then |
FPaddingByte := $80; |
FBuffer[FBufferIndex] := FPaddingByte; |
Inc(FBufferIndex); |
if FBufferIndex > FBufferSize - 8 then |
begin |
FillChar(FBuffer[FBufferIndex], FBufferSize - FBufferIndex, 0); |
DoTransform(Pointer(FBuffer)); |
FBufferIndex := 0; |
end; |
FillChar(FBuffer[FBufferIndex], FBufferSize - FBufferIndex, 0); |
PUInt32(@FBuffer[FBufferSize - 8])^ := SwapUInt32(FCount[1]); |
PUInt32(@FBuffer[FBufferSize - 4])^ := SwapUInt32(FCount[0]); |
DoTransform(Pointer(FBuffer)); |
SwapUInt32Buffer(FDigest, FDigest, SizeOf(FDigest) div 4); |
end; |
class function THash_SHA0.DigestSize: UInt32; |
begin |
Result := 20; |
end; |
{ THash_SHA256 } |
procedure THash_SHA256.DoInit; |
begin |
FDigest[0]:= $6A09E667; |
FDigest[1]:= $BB67AE85; |
FDigest[2]:= $3C6EF372; |
FDigest[3]:= $A54FF53A; |
FDigest[4]:= $510E527F; |
FDigest[5]:= $9B05688C; |
FDigest[6]:= $1F83D9AB; |
FDigest[7]:= $5BE0CD19; |
end; |
{$IFNDEF THash_SHA256_asm} |
procedure THash_SHA256.DoTransform(Buffer: PUInt32Array); |
var |
I: Integer; |
A, B, C, D, E, F, G, H: UInt32; |
T1, T2: UInt32; |
W: array[0..63] of UInt32; |
begin |
SwapUInt32Buffer(Buffer[0], W, 16); |
for I := 16 to 63 do |
begin |
T1 := W[I - 15]; |
T2 := W[I - 2]; |
W[I] := W[I - 16] + W[I - 7] + |
((T1 shr 7 or T1 shl 25) xor (T1 shr 18 or T1 shl 14) xor (T1 shr 3)) + |
((T2 shr 17 or T2 shl 15) xor (T2 shr 19 or T2 shl 13) xor (T2 shr 10)); |
end; |
// calculate new hash values |
A := FDigest[0]; |
B := FDigest[1]; |
C := FDigest[2]; |
D := FDigest[3]; |
E := FDigest[4]; |
F := FDigest[5]; |
G := FDigest[6]; |
H := FDigest[7]; |
for I := 0 to 63 do |
begin |
T1 := ((E shr 6 or E shl 26) xor (E shr 11 or E shl 21) xor |
(E shr 25 or E shl 7)) + H + (((F xor G) and E) xor G) + SHA_256K[I] + W[I]; |
T2 := ((A shr 2 or A shl 30) xor (A shr 13 or A shl 19) xor |
(A shr 22 or A shl 10)) + (((B or C) and A) or (B and C)); |
H := G; G := F; F := E; E := D + T1; D := C; C := B; B := A; A := T1 + T2; |
end; |
Inc(FDigest[0], A); |
Inc(FDigest[1], B); |
Inc(FDigest[2], C); |
Inc(FDigest[3], D); |
Inc(FDigest[4], E); |
Inc(FDigest[5], F); |
Inc(FDigest[6], G); |
Inc(FDigest[7], H); |
end; |
{$ENDIF !THash_SHA256_asm} |
class function THash_SHA256.DigestSize: UInt32; |
begin |
Result := 32; |
end; |
{ THash_SHA224 } |
class function THash_SHA224.BlockSize: UInt32; |
begin |
Result := 64; |
end; |
class function THash_SHA224.DigestSize: UInt32; |
begin |
Result := 28; |
end; |
procedure THash_SHA224.DoInit; |
begin |
FDigest[0]:= $C1059ED8; |
FDigest[1]:= $367CD507; |
FDigest[2]:= $3070DD17; |
FDigest[3]:= $F70E5939; |
FDigest[4]:= $FFC00B31; |
FDigest[5]:= $68581511; |
FDigest[6]:= $64F98FA7; |
FDigest[7]:= $BEFA4FA4; |
end; |
{ THash_SHA384 } |
procedure THash_SHA384.DoInit; |
begin |
FDigest[0] := Int64($CBBB9D5DC1059ED8); |
FDigest[1] := Int64($629A292A367CD507); |
FDigest[2] := Int64($9159015A3070DD17); |
FDigest[3] := Int64($152FECD8F70E5939); |
FDigest[4] := Int64($67332667FFC00B31); |
FDigest[5] := Int64($8EB44A8768581511); |
FDigest[6] := Int64($DB0C2E0D64F98FA7); |
FDigest[7] := Int64($47B5481DBEFA4FA4); |
end; |
{$IFNDEF THash_SHA384_asm} |
procedure THash_SHA384.DoTransform(Buffer: PUInt32Array); |
var |
A, B, C, D, E, F, G, H: UInt64; |
T1, T2: UInt64; |
I: Integer; |
W: array [0..79] of UInt64; |
begin |
{ TODO : The array passed is a UInt32 array, which doesn't fit with the name of this method!} |
SwapInt64Buffer(Buffer[0], W, 16); |
// calculate other 64 uint64 |
for I := 16 to 79 do |
begin |
T1 := W[I - 15]; |
T2 := W[I - 2]; |
W[I] := W[I - 16] + W[I - 7] + |
((T1 shr 1 or T1 shl 63) xor (T1 shr 8 or T1 shl 56) xor (T1 shr 7)) + |
((T2 shr 19 or T2 shl 45) xor (T2 shr 61 or T2 shl 3) xor (T2 shr 6)); |
end; |
// calculate new hash values |
A := FDigest[0]; |
B := FDigest[1]; |
C := FDigest[2]; |
D := FDigest[3]; |
E := FDigest[4]; |
F := FDigest[5]; |
G := FDigest[6]; |
H := FDigest[7]; |
for I := 0 to 79 do |
begin |
T1 := ((E shr 14 or E shl 50) xor (E shr 18 or E shl 46) xor |
(E shr 41 or E shl 23)) + H + (((F xor G) and E) xor G) + SHA_512K[I] + W[I]; |
T2 := ((A shr 28 or A shl 36) xor (A shr 34 or A shl 30) xor |
(A shr 39 or A shl 25)) + (((B or C) and A) or (B and C)); |
H := G; |
G := F; |
F := E; |
E := D + T1; |
D := C; |
C := B; |
B := A; |
A := T1 + T2; |
end; |
Inc(FDigest[0], A); |
Inc(FDigest[1], B); |
Inc(FDigest[2], C); |
Inc(FDigest[3], D); |
Inc(FDigest[4], E); |
Inc(FDigest[5], F); |
Inc(FDigest[6], G); |
Inc(FDigest[7], H); |
end; |
{$ENDIF !THash_SHA384_asm} |
procedure THash_SHA384.DoDone; |
begin |
if FPaddingByte = 0 then |
FPaddingByte := $80; |
FBuffer[FBufferIndex] := FPaddingByte; |
Inc(FBufferIndex); |
if FBufferIndex > FBufferSize - 16 then |
begin |
FillChar(FBuffer[FBufferIndex], FBufferSize - FBufferIndex, 0); |
DoTransform(Pointer(FBuffer)); |
FBufferIndex := 0; |
end; |
FillChar(FBuffer[FBufferIndex], FBufferSize - FBufferIndex, 0); |
SwapUInt32Buffer(FCount, FCount, 4); |
PUInt32(@FBuffer[FBufferSize - 16])^ := FCount[3]; |
PUInt32(@FBuffer[FBufferSize - 12])^ := FCount[2]; |
PUInt32(@FBuffer[FBufferSize - 8])^ := FCount[1]; |
PUInt32(@FBuffer[FBufferSize - 4])^ := FCount[0]; |
DoTransform(Pointer(FBuffer)); |
SwapInt64Buffer(FDigest, FDigest, SizeOf(FDigest) div 8); |
end; |
function THash_SHA384.Digest: PUInt8Array; |
begin |
Result := @FDigest; |
end; |
class function THash_SHA384.DigestSize: UInt32; |
begin |
Result := 48; |
end; |
class function THash_SHA384.BlockSize: UInt32; |
begin |
Result := 128; |
end; |
{ THash_SHA512 } |
procedure THash_SHA512.DoInit; |
begin |
FDigest[0] := Int64($6A09E667F3BCC908); |
FDigest[1] := Int64($BB67AE8584CAA73B); |
FDigest[2] := Int64($3C6EF372FE94F82B); |
FDigest[3] := Int64($A54FF53A5F1D36F1); |
FDigest[4] := Int64($510E527FADE682D1); |
FDigest[5] := Int64($9B05688C2B3E6C1F); |
FDigest[6] := Int64($1F83D9ABFB41BD6B); |
FDigest[7] := Int64($5BE0CD19137E2179); |
end; |
class function THash_SHA512.DigestSize: UInt32; |
begin |
Result := 64; |
end; |
{ THashBaseHaval } |
procedure THashBaseHaval.SetRounds(Value: UInt32); |
begin |
if (Value < GetMinRounds) or (Value > 5) then |
begin |
if DigestSize <= 20 then |
Value := 3 |
else |
begin |
if DigestSize <= 28 then |
Value := 4 |
else |
Value := 5; |
end; |
end; |
FRounds := Value; |
case FRounds of |
3: FTransform := DoTransform3; |
4: FTransform := DoTransform4; |
5: FTransform := DoTransform5; |
end; |
end; |
procedure THashBaseHaval.DoInit; |
begin |
SetRounds(FRounds); |
FDigest[0] := $243F6A88; |
FDigest[1] := $85A308D3; |
FDigest[2] := $13198A2E; |
FDigest[3] := $03707344; |
FDigest[4] := $A4093822; |
FDigest[5] := $299F31D0; |
FDigest[6] := $082EFA98; |
FDigest[7] := $EC4E6C89; |
end; |
procedure THashBaseHaval.DoTransform(Buffer: PUInt32Array); |
begin |
FTransform(Buffer); |
end; |
function THashBaseHaval.GetMaxRounds: UInt32; |
begin |
Result := 5; |
end; |
function THashBaseHaval.GetMinRounds: UInt32; |
begin |
if DigestSize <= 20 then |
Result := 3 |
else |
begin |
if DigestSize <= 28 then |
Result := 4 |
else |
Result := 5; |
end; |
end; |
function THashBaseHaval.GetRounds: UInt32; |
begin |
Result := FRounds; |
end; |
{$IFNDEF THashBaseHaval_asm} |
procedure THashBaseHaval.DoTransform3(Buffer: PUInt32Array); |
var |
A, B, C, D, E, F, G, H, I, T: UInt32; |
Data: PUInt32; |
Offset: PByte; |
begin |
Offset := @Haval_Offset; |
Data := @Haval_Data; |
A := FDigest[0]; |
B := FDigest[1]; |
C := FDigest[2]; |
D := FDigest[3]; |
E := FDigest[4]; |
F := FDigest[5]; |
G := FDigest[6]; |
H := FDigest[7]; |
for I := 0 to 31 do |
begin |
T := C and (E xor D) xor G and A xor F and B xor E; |
T := (T shr 7 or T shl 25) + (H shr 11 or H shl 21) + Buffer[I]; |
H := G; G := F; F := E; E := D; D := C; C := B; B := A; A := T; |
end; |
for I := 0 to 31 do |
begin |
T := F and (D and not A xor B and C xor E xor G) xor B and (D xor C) xor A and C xor G; |
T := (T shr 7 or T shl 25) + (H shr 11 or H shl 21) + Buffer[Offset^] + Data^; |
Inc(Offset); |
Inc(Data); |
H := G; G := F; F := E; E := D; D := C; C := B; B := A; A := T; |
end; |
for I := 0 to 31 do |
begin |
T := D and (F and E xor G xor A) xor F and C xor E and B xor A; |
T := (T shr 7 or T shl 25) + (H shr 11 or H shl 21) + Buffer[Offset^] + Data^; |
Inc(Offset); |
Inc(Data); |
H := G; G := F; F := E; E := D; D := C; C := B; B := A; A := T; |
end; |
Inc(FDigest[0], A); |
Inc(FDigest[1], B); |
Inc(FDigest[2], C); |
Inc(FDigest[3], D); |
Inc(FDigest[4], E); |
Inc(FDigest[5], F); |
Inc(FDigest[6], G); |
Inc(FDigest[7], H); |
end; |
procedure THashBaseHaval.DoTransform4(Buffer: PUInt32Array); |
var |
A, B, C, D, E, F, G, H, I, T: UInt32; |
Data: PUInt32; |
Offset: PByte; |
begin |
Offset := @Haval_Offset; |
Data := @Haval_Data; |
A := FDigest[0]; |
B := FDigest[1]; |
C := FDigest[2]; |
D := FDigest[3]; |
E := FDigest[4]; |
F := FDigest[5]; |
G := FDigest[6]; |
H := FDigest[7]; |
for I := 0 to 31 do |
begin |
T := D and (A xor B) xor F and G xor E and C xor A; |
T := (T shr 7 or T shl 25) + (H shr 11 or H shl 21) + Buffer[I]; |
H := G; G := F; F := E; E := D; D := C; C := B; B := A; A := T; |
end; |
for I := 0 to 31 do |
begin |
T := B and (G and not A xor C and F xor D xor E) xor C and (G xor F) xor A and F xor E; |
T := (T shr 7 or T shl 25) + (H shr 11 or H shl 21) + Buffer[Offset^] + Data^; |
Inc(Offset); |
Inc(Data); |
H := G; G := F; F := E; E := D; D := C; C := B; B := A; A := T; |
end; |
for I := 0 to 31 do |
begin |
T := G and (C and A xor B xor F) xor C and D xor A and E xor F; |
T := (T shr 7 or T shl 25) + (H shr 11 or H shl 21) + Buffer[Offset^] + Data^; |
Inc(Offset); |
Inc(Data); |
H := G; G := F; F := E; E := D; D := C; C := B; B := A; A := T; |
end; |
for I := 0 to 31 do |
begin |
T := A and (E and not C xor F and not G xor B xor G xor D) xor F and |
(B and C xor E xor G) xor C and G xor D; |
T := (T shr 7 or T shl 25) + (H shr 11 or H shl 21) + Buffer[Offset^] + Data^; |
Inc(Offset); |
Inc(Data); |
H := G; G := F; F := E; E := D; D := C; C := B; B := A; A := T; |
end; |
Inc(FDigest[0], A); |
Inc(FDigest[1], B); |
Inc(FDigest[2], C); |
Inc(FDigest[3], D); |
Inc(FDigest[4], E); |
Inc(FDigest[5], F); |
Inc(FDigest[6], G); |
Inc(FDigest[7], H); |
end; |
procedure THashBaseHaval.DoTransform5(Buffer: PUInt32Array); |
var |
A, B, C, D, E, F, G, H, I, T: UInt32; |
Data: PUInt32; |
Offset: PByte; |
begin |
Offset := @Haval_Offset; |
Data := @Haval_Data; |
A := FDigest[0]; |
B := FDigest[1]; |
C := FDigest[2]; |
D := FDigest[3]; |
E := FDigest[4]; |
F := FDigest[5]; |
G := FDigest[6]; |
H := FDigest[7]; |
for I := 0 to 31 do |
begin |
T := C and (G xor B) xor F and E xor A and D xor G; |
T := (T shr 7 or T shl 25) + (H shr 11 or H shl 21) + Buffer[I]; |
H := G; G := F; F := E; E := D; D := C; C := B; B := A; A := T; |
end; |
for I := 0 to 31 do |
begin |
T := D and (E and not A xor B and C xor G xor F) xor B and (E xor C) xor A and C xor F; |
T := (T shr 7 or T shl 25) + (H shr 11 or H shl 21) + Buffer[Offset^] + Data^; |
Inc(Offset); |
Inc(Data); |
H := G; G := F; F := E; E := D; D := C; C := B; B := A; A := T; |
end; |
for I := 0 to 31 do |
begin |
T := E and (B and D xor C xor F) xor B and A xor D and G xor F; |
T := (T shr 7 or T shl 25) + (H shr 11 or H shl 21) + Buffer[Offset^] + Data^; |
Inc(Offset); |
Inc(Data); |
H := G; G := F; F := E; E := D; D := C; C := B; B := A; A := T; |
end; |
for I := 0 to 31 do |
begin |
T := D and (F and not A xor C and not B xor E xor B xor G) xor C and |
(E and A xor F xor B) xor A and B xor G; |
T := (T shr 7 or T shl 25) + (H shr 11 or H shl 21) + Buffer[Offset^] + Data^; |
Inc(Offset); |
Inc(Data); |
H := G; G := F; F := E; E := D; D := C; C := B; B := A; A := T; |
end; |
for I := 0 to 31 do |
begin |
T := B and (D and E and G xor not F) xor D and A xor E and F xor G and C; |
T := (T shr 7 or T shl 25) + (H shr 11 or H shl 21) + Buffer[Offset^] + Data^; |
Inc(Offset); Inc(Data); |
H := G; G := F; F := E; E := D; D := C; C := B; B := A; A := T; |
end; |
Inc(FDigest[0], A); |
Inc(FDigest[1], B); |
Inc(FDigest[2], C); |
Inc(FDigest[3], D); |
Inc(FDigest[4], E); |
Inc(FDigest[5], F); |
Inc(FDigest[6], G); |
Inc(FDigest[7], H); |
end; |
{$ENDIF !THashBaseHaval_asm} |
procedure THashBaseHaval.DoDone; |
function ROR(Value, Count: UInt32): UInt32; |
{$IFDEF X86ASM} |
asm |
MOV ECX,EDX |
ROR EAX,CL |
end; |
{$ELSE !X86ASM} |
begin |
Result := (Value shr Count) or (Value shl (32 - Count)); |
end; |
{$ENDIF !X86ASM} |
var |
T: Word; |
begin |
if FCount[2] or FCount[3] <> 0 then |
RaiseHashOverflowError; |
if FPaddingByte = 0 then |
FPaddingByte := $01; |
FBuffer[FBufferIndex] := FPaddingByte; |
Inc(FBufferIndex); |
if FBufferIndex > FBufferSize - 10 then |
begin |
FillChar(FBuffer[FBufferIndex], FBufferSize - FBufferIndex - 10, 0); |
DoTransform(Pointer(FBuffer)); |
FBufferIndex := 0; |
end; |
FillChar(FBuffer[FBufferIndex], FBufferSize - FBufferIndex - 10, 0); |
T := (DigestSize shl 9) or (UInt32(FRounds) shl 3) or 1; |
Move(T, FBuffer[FBufferSize - 10], SizeOf(T)); |
Move(FCount, FBuffer[FBufferSize - 8], 8); |
DoTransform(Pointer(FBuffer)); |
case DigestSize of |
16: begin |
Inc(FDigest[0], ROR(FDigest[7] and $000000FF or |
FDigest[6] and $FF000000 or |
FDigest[5] and $00FF0000 or |
FDigest[4] and $0000FF00, 8)); |
Inc(FDigest[1], ROR(FDigest[7] and $0000FF00 or |
FDigest[6] and $000000FF or |
FDigest[5] and $FF000000 or |
FDigest[4] and $00FF0000, 16)); |
Inc(FDigest[2], ROR(FDigest[7] and $00FF0000 or |
FDigest[6] and $0000FF00 or |
FDigest[5] and $000000FF or |
FDigest[4] and $FF000000, 24)); |
Inc(FDigest[3], FDigest[7] and $FF000000 or |
FDigest[6] and $00FF0000 or |
FDigest[5] and $0000FF00 or |
FDigest[4] and $000000FF); |
end; |
20: begin |
Inc(FDigest[0], ROR(FDigest[7] and ($3F) or |
FDigest[6] and ($7F shl 25) or |
FDigest[5] and ($3F shl 19), 19)); |
Inc(FDigest[1], ROR(FDigest[7] and ($3F shl 6) or |
FDigest[6] and ($3F) or |
FDigest[5] and ($7F shl 25), 25)); |
Inc(FDigest[2], FDigest[7] and ($7F shl 12) or |
FDigest[6] and ($3F shl 6) or |
FDigest[5] and ($3F)); |
Inc(FDigest[3], (FDigest[7] and ($3F shl 19) or |
FDigest[6] and ($7F shl 12) or |
FDigest[5] and ($3F shl 6)) shr 6); |
Inc(FDigest[4], (FDigest[7] and ($7F shl 25) or |
FDigest[6] and ($3F shl 19) or |
FDigest[5] and ($7F shl 12)) shr 12); |
end; |
24: begin |
Inc(FDigest[0], ROR(FDigest[7] and ($1F) or |
FDigest[6] and ($3F shl 26), 26)); |
Inc(FDigest[1], FDigest[7] and ($1F shl 5) or |
FDigest[6] and ($1F)); |
Inc(FDigest[2], (FDigest[7] and ($3F shl 10) or |
FDigest[6] and ($1F shl 5)) shr 5); |
Inc(FDigest[3], (FDigest[7] and ($1F shl 16) or |
FDigest[6] and ($3F shl 10)) shr 10); |
Inc(FDigest[4], (FDigest[7] and ($1F shl 21) or |
FDigest[6] and ($1F shl 16)) shr 16); |
Inc(FDigest[5], (FDigest[7] and ($3F shl 26) or |
FDigest[6] and ($1F shl 21)) shr 21); |
end; |
28: begin |
Inc(FDigest[0], FDigest[7] shr 27 and $1F); |
Inc(FDigest[1], FDigest[7] shr 22 and $1F); |
Inc(FDigest[2], FDigest[7] shr 18 and $0F); |
Inc(FDigest[3], FDigest[7] shr 13 and $1F); |
Inc(FDigest[4], FDigest[7] shr 9 and $0F); |
Inc(FDigest[5], FDigest[7] shr 4 and $1F); |
Inc(FDigest[6], FDigest[7] and $0F); |
end; |
end; |
end; |
function THashBaseHaval.Digest: PUInt8Array; |
begin |
Result := @FDigest; |
end; |
class function THashBaseHaval.BlockSize: UInt32; |
begin |
Result := 128; |
end; |
{ THash_Haval128 } |
class function THash_Haval128.DigestSize: UInt32; |
begin |
Result := 16; |
end; |
{ THash_Haval160 } |
class function THash_Haval160.DigestSize: UInt32; |
begin |
Result := 20; |
end; |
{ THash_Haval192 } |
class function THash_Haval192.DigestSize: UInt32; |
begin |
Result := 24; |
end; |
{ THash_Haval224 } |
class function THash_Haval224.DigestSize: UInt32; |
begin |
Result := 28; |
end; |
{ THash_Haval256 } |
class function THash_Haval256.DigestSize: UInt32; |
begin |
Result := 32; |
end; |
{ THash_Tiger } |
procedure THash_Tiger.SetRounds(Value: UInt32); |
begin |
if (Value < cTigerMinRounds) then |
Value := cTigerMinRounds; |
if (Value > cTigerMaxRounds) then |
Value := cTigerMaxRounds; |
FRounds := Value; |
end; |
procedure THash_Tiger.DoInit; |
begin |
SetRounds(FRounds); |
if FPaddingByte = 0 then |
FPaddingByte := $01; |
FDigest[0] := $89ABCDEF; |
FDigest[1] := $01234567; |
FDigest[2] := $76543210; |
FDigest[3] := $FEDCBA98; |
FDigest[4] := $C3B2E187; |
FDigest[5] := $F096A5B4; |
end; |
{$IFNDEF THash_Tiger_asm} |
procedure THash_Tiger.DoTransform(Buffer: PUInt32Array); |
type |
PTiger_Data = ^TTiger_Data; |
TTiger_Data = array[0..3, 0..255] of Int64; |
PInt64Array = ^TInt64Array; |
TInt64Array = array[0..7] of Int64; |
var |
A, B, C, T: Int64; |
x0, x1, x2, x3, x4, x5, x6, x7: UInt64; |
I: Integer; |
begin |
A := PInt64Array(@FDigest)[0]; |
B := PInt64Array(@FDigest)[1]; |
C := PInt64Array(@FDigest)[2]; |
x0 := PInt64Array(Buffer)[0]; |
x1 := PInt64Array(Buffer)[1]; |
x2 := PInt64Array(Buffer)[2]; |
x3 := PInt64Array(Buffer)[3]; |
x4 := PInt64Array(Buffer)[4]; |
x5 := PInt64Array(Buffer)[5]; |
x6 := PInt64Array(Buffer)[6]; |
x7 := PInt64Array(Buffer)[7]; |
for I := 1 to FRounds do // a Loop is faster for PC with small Cache |
begin |
if I > 1 then // Key Schedule |
begin |
Dec(x0, x7 xor $A5A5A5A5A5A5A5A5); |
x1 := x1 xor x0; |
Inc(x2, x1); |
Dec(x3, x2 xor (not x1 shl 19)); |
x4 := x4 xor x3; |
Inc(x5, x4); |
Dec(x6, x5 xor (not x4 shr 23)); |
x7 := x7 xor x6; |
Inc(x0, x7); |
Dec(x1, x0 xor (not x7 shl 19)); |
x2 := x2 xor x1; |
Inc(x3, x2); |
Dec(x4, x3 xor (not x2 shr 23)); |
x5 := x5 xor x4; |
Inc(x6, x5); |
Dec(x7, x6 xor $0123456789ABCDEF); |
end; |
C := C xor x0; |
Dec(A, TTiger_Data(Tiger_Data)[0, UInt32(C) and $FF] xor |
TTiger_Data(Tiger_Data)[1, UInt32(C) shr 16 and $FF] xor |
TTiger_Data(Tiger_Data)[2, C shr 32 and $FF] xor |
TTiger_Data(Tiger_Data)[3, UInt32(C shr 32) shr 16 and $FF]); |
Inc(B, TTiger_Data(Tiger_Data)[3, UInt32(C) shr 8 and $FF] xor |
TTiger_Data(Tiger_Data)[2, UInt32(C) shr 24] xor |
TTiger_Data(Tiger_Data)[1, UInt32(C shr 32) shr 8 and $FF] xor |
TTiger_Data(Tiger_Data)[0, UInt32(C shr 32) shr 24]); |
if I = 1 then |
B := B shl 2 + B |
else |
begin |
if I = 2 then |
B := B shl 3 - B |
else |
B := B shl 3 + B; |
end; |
A := A xor x1; |
Dec(B, TTiger_Data(Tiger_Data)[0, UInt32(A) and $FF] xor |
TTiger_Data(Tiger_Data)[1, UInt32(A) shr 16 and $FF] xor |
TTiger_Data(Tiger_Data)[2, A shr 32 and $FF] xor |
TTiger_Data(Tiger_Data)[3, UInt32(A shr 32) shr 16 and $FF]); |
Inc(C, TTiger_Data(Tiger_Data)[3, UInt32(A) shr 8 and $FF] xor |
TTiger_Data(Tiger_Data)[2, UInt32(A) shr 24] xor |
TTiger_Data(Tiger_Data)[1, UInt32(A shr 32) shr 8 and $FF] xor |
TTiger_Data(Tiger_Data)[0, UInt32(A shr 32) shr 24]); |
if I = 1 then |
C := C shl 2 + C |
else |
begin |
if I = 2 then |
C := C shl 3 - C |
else |
C := C shl 3 + C; |
end; |
B := B xor x2; |
Dec(C, TTiger_Data(Tiger_Data)[0, UInt32(B) and $FF] xor |
TTiger_Data(Tiger_Data)[1, UInt32(B) shr 16 and $FF] xor |
TTiger_Data(Tiger_Data)[2, B shr 32 and $FF] xor |
TTiger_Data(Tiger_Data)[3, UInt32(B shr 32) shr 16 and $FF]); |
Inc(A, TTiger_Data(Tiger_Data)[3, UInt32(B) shr 8 and $FF] xor |
TTiger_Data(Tiger_Data)[2, UInt32(B) shr 24] xor |
TTiger_Data(Tiger_Data)[1, UInt32(B shr 32) shr 8 and $FF] xor |
TTiger_Data(Tiger_Data)[0, UInt32(B shr 32) shr 24]); |
if I = 1 then |
A := A shl 2 + A |
else |
begin |
if I = 2 then |
A := A shl 3 - A |
else |
A := A shl 3 + A; |
end; |
C := C xor x3; |
Dec(A, TTiger_Data(Tiger_Data)[0, UInt32(C) and $FF] xor |
TTiger_Data(Tiger_Data)[1, UInt32(C) shr 16 and $FF] xor |
TTiger_Data(Tiger_Data)[2, C shr 32 and $FF] xor |
TTiger_Data(Tiger_Data)[3, UInt32(C shr 32) shr 16 and $FF]); |
Inc(B, TTiger_Data(Tiger_Data)[3, UInt32(C) shr 8 and $FF] xor |
TTiger_Data(Tiger_Data)[2, UInt32(C) shr 24] xor |
TTiger_Data(Tiger_Data)[1, UInt32(C shr 32) shr 8 and $FF] xor |
TTiger_Data(Tiger_Data)[0, UInt32(C shr 32) shr 24]); |
if I = 1 then |
B := B shl 2 + B |
else |
begin |
if I = 2 then |
B := B shl 3 - B |
else |
B := B shl 3 + B; |
end; |
A := A xor x4; |
Dec(B, TTiger_Data(Tiger_Data)[0, UInt32(A) and $FF] xor |
TTiger_Data(Tiger_Data)[1, UInt32(A) shr 16 and $FF] xor |
TTiger_Data(Tiger_Data)[2, A shr 32 and $FF] xor |
TTiger_Data(Tiger_Data)[3, UInt32(A shr 32) shr 16 and $FF]); |
Inc(C, TTiger_Data(Tiger_Data)[3, UInt32(A) shr 8 and $FF] xor |
TTiger_Data(Tiger_Data)[2, UInt32(A) shr 24] xor |
TTiger_Data(Tiger_Data)[1, UInt32(A shr 32) shr 8 and $FF] xor |
TTiger_Data(Tiger_Data)[0, UInt32(A shr 32) shr 24]); |
if I = 1 then |
C := C shl 2 + C |
else |
begin |
if I = 2 then |
C := C shl 3 - C |
else |
C := C shl 3 + C; |
end; |
B := B xor x5; |
Dec(C, TTiger_Data(Tiger_Data)[0, UInt32(B) and $FF] xor |
TTiger_Data(Tiger_Data)[1, UInt32(B) shr 16 and $FF] xor |
TTiger_Data(Tiger_Data)[2, B shr 32 and $FF] xor |
TTiger_Data(Tiger_Data)[3, UInt32(B shr 32) shr 16 and $FF]); |
Inc(A, TTiger_Data(Tiger_Data)[3, UInt32(B) shr 8 and $FF] xor |
TTiger_Data(Tiger_Data)[2, UInt32(B) shr 24] xor |
TTiger_Data(Tiger_Data)[1, UInt32(B shr 32) shr 8 and $FF] xor |
TTiger_Data(Tiger_Data)[0, UInt32(B shr 32) shr 24]); |
if I = 1 then |
A := A shl 2 + A |
else |
begin |
if I = 2 then |
A := A shl 3 - A |
else |
A := A shl 3 + A; |
end; |
C := C xor x6; |
Dec(A, TTiger_Data(Tiger_Data)[0, UInt32(C) and $FF] xor |
TTiger_Data(Tiger_Data)[1, UInt32(C) shr 16 and $FF] xor |
TTiger_Data(Tiger_Data)[2, C shr 32 and $FF] xor |
TTiger_Data(Tiger_Data)[3, UInt32(C shr 32) shr 16 and $FF]); |
Inc(B, TTiger_Data(Tiger_Data)[3, UInt32(C) shr 8 and $FF] xor |
TTiger_Data(Tiger_Data)[2, UInt32(C) shr 24] xor |
TTiger_Data(Tiger_Data)[1, UInt32(C shr 32) shr 8 and $FF] xor |
TTiger_Data(Tiger_Data)[0, UInt32(C shr 32) shr 24]); |
if I = 1 then |
B := B shl 2 + B |
else |
begin |
if I = 2 then |
B := B shl 3 - B |
else |
B := B shl 3 + B; |
end; |
A := A xor x7; |
Dec(B, TTiger_Data(Tiger_Data)[0, UInt32(A) and $FF] xor |
TTiger_Data(Tiger_Data)[1, UInt32(A) shr 16 and $FF] xor |
TTiger_Data(Tiger_Data)[2, A shr 32 and $FF] xor |
TTiger_Data(Tiger_Data)[3, UInt32(A shr 32) shr 16 and $FF]); |
Inc(C, TTiger_Data(Tiger_Data)[3, UInt32(A) shr 8 and $FF] xor |
TTiger_Data(Tiger_Data)[2, UInt32(A) shr 24] xor |
TTiger_Data(Tiger_Data)[1, UInt32(A shr 32) shr 8 and $FF] xor |
TTiger_Data(Tiger_Data)[0, UInt32(A shr 32) shr 24]); |
if I = 1 then |
C := C shl 2 + C |
else |
begin |
if I = 2 then |
C := C shl 3 - C |
else |
C := C shl 3 + C; |
end; |
T := A; A := C; C := B; B := T; |
end; |
PInt64Array(@FDigest)[0] := A xor PInt64Array(@FDigest)[0]; |
PInt64Array(@FDigest)[1] := B - PInt64Array(@FDigest)[1]; |
PInt64Array(@FDigest)[2] := C + PInt64Array(@FDigest)[2]; |
end; |
{$ENDIF} |
function THash_Tiger.GetMaxRounds: UInt32; |
begin |
Result := cTigerMaxRounds; |
end; |
function THash_Tiger.GetMinRounds: UInt32; |
begin |
Result := cTigerMinRounds; |
end; |
function THash_Tiger.GetRounds: UInt32; |
begin |
Result := FRounds; |
end; |
class function THash_Tiger.DigestSize: UInt32; |
begin |
Result := 24; |
end; |
{ THash_Panama } |
procedure THash_Panama.DoInit; |
begin |
FillChar(FLFSRBuffer, SizeOf(FLFSRBuffer), 0); |
FillChar(FDigest, SizeOf(FDigest), 0); |
FTap := 0; |
end; |
{$IFNDEF THash_Panama_asm} |
procedure THash_Panama.DoTransform(Buffer: PUInt32Array); |
var |
T0, T1, T2, T3: UInt32; |
PBufB, PTap0, PTap25: PUInt32Array; |
begin |
// perform non-linearity stage (GAMMA) |
T0 := FDigest[ 0]; |
T1 := FDigest[ 1]; |
FDigest[ 0] := FDigest[ 0] xor (FDigest[ 1] or not FDigest[ 2]); |
FDigest[ 1] := FDigest[ 1] xor (FDigest[ 2] or not FDigest[ 3]); |
FDigest[ 2] := FDigest[ 2] xor (FDigest[ 3] or not FDigest[ 4]); |
FDigest[ 3] := FDigest[ 3] xor (FDigest[ 4] or not FDigest[ 5]); |
FDigest[ 4] := FDigest[ 4] xor (FDigest[ 5] or not FDigest[ 6]); |
FDigest[ 5] := FDigest[ 5] xor (FDigest[ 6] or not FDigest[ 7]); |
FDigest[ 6] := FDigest[ 6] xor (FDigest[ 7] or not FDigest[ 8]); |
FDigest[ 7] := FDigest[ 7] xor (FDigest[ 8] or not FDigest[ 9]); |
FDigest[ 8] := FDigest[ 8] xor (FDigest[ 9] or not FDigest[10]); |
FDigest[ 9] := FDigest[ 9] xor (FDigest[10] or not FDigest[11]); |
FDigest[10] := FDigest[10] xor (FDigest[11] or not FDigest[12]); |
FDigest[11] := FDigest[11] xor (FDigest[12] or not FDigest[13]); |
FDigest[12] := FDigest[12] xor (FDigest[13] or not FDigest[14]); |
FDigest[13] := FDigest[13] xor (FDigest[14] or not FDigest[15]); |
FDigest[14] := FDigest[14] xor (FDigest[15] or not FDigest[16]); |
FDigest[15] := FDigest[15] xor (FDigest[16] or not T0); |
FDigest[16] := FDigest[16] xor (T0 or not T1); |
// perform bit-dispersion stage (PI) |
T0 := FDigest[ 1]; |
T1 := FDigest[ 7]; FDigest[ 1] := (T1 shl 1) or (T1 shr 31); |
T1 := FDigest[ 5]; FDigest[ 5] := (T0 shl 15) or (T0 shr 17); |
T0 := FDigest[ 8]; FDigest[ 8] := (T1 shl 4) or (T1 shr 28); |
T1 := FDigest[ 6]; FDigest[ 6] := (T0 shl 21) or (T0 shr 11); |
T0 := FDigest[13]; FDigest[13] := (T1 shl 27) or (T1 shr 5); |
T1 := FDigest[14]; FDigest[14] := (T0 shl 9) or (T0 shr 23); |
T0 := FDigest[ 2]; FDigest[ 2] := (T1 shl 3) or (T1 shr 29); |
T1 := FDigest[10]; FDigest[10] := (T0 shl 23) or (T0 shr 9); |
T0 := FDigest[16]; FDigest[16] := (T1 shl 8) or (T1 shr 24); |
T1 := FDigest[12]; FDigest[12] := (T0 shl 14) or (T0 shr 18); |
T0 := FDigest[ 9]; FDigest[ 9] := (T1 shl 13) or (T1 shr 19); |
T1 := FDigest[11]; FDigest[11] := (T0 shl 2) or (T0 shr 30); |
T0 := FDigest[ 4]; FDigest[ 4] := (T1 shl 10) or (T1 shr 22); |
T1 := FDigest[ 3]; FDigest[ 3] := (T0 shl 6) or (T0 shr 26); |
T0 := FDigest[15]; FDigest[15] := (T1 shl 24) or (T1 shr 8); |
FDigest[ 7] := (T0 shl 28) or (T0 shr 4); |
// LFSR emulation |
PBufB := @FLFSRBuffer[(FTap + 16) and 31]; |
FTap := (FTap - 1) and 31; |
PTap0 := @FLFSRBuffer[FTap]; |
PTap25 := @FLFSRBuffer[(FTap + 25) and 31]; |
// update the LFSR buffer (LAMBDA_PUSH) |
PTap25[ 0] := PTap25[ 0] xor PTap0[ 2]; |
PTap25[ 1] := PTap25[ 1] xor PTap0[ 3]; |
PTap25[ 2] := PTap25[ 2] xor PTap0[ 4]; |
PTap25[ 3] := PTap25[ 3] xor PTap0[ 5]; |
PTap25[ 4] := PTap25[ 4] xor PTap0[ 6]; |
PTap25[ 5] := PTap25[ 5] xor PTap0[ 7]; |
PTap25[ 6] := PTap25[ 6] xor PTap0[ 0]; |
PTap25[ 7] := PTap25[ 7] xor PTap0[ 1]; |
PTap0[ 0] := PTap0[ 0] xor Buffer[ 0]; |
PTap0[ 1] := PTap0[ 1] xor Buffer[ 1]; |
PTap0[ 2] := PTap0[ 2] xor Buffer[ 2]; |
PTap0[ 3] := PTap0[ 3] xor Buffer[ 3]; |
PTap0[ 4] := PTap0[ 4] xor Buffer[ 4]; |
PTap0[ 5] := PTap0[ 5] xor Buffer[ 5]; |
PTap0[ 6] := PTap0[ 6] xor Buffer[ 6]; |
PTap0[ 7] := PTap0[ 7] xor Buffer[ 7]; |
// perform diffusion stage (THETA) + buffer injection stage (SIGMA) |
T0 := FDigest[ 0]; |
T1 := FDigest[ 1]; |
T2 := FDigest[ 2]; |
T3 := FDigest[ 3]; |
FDigest[ 0] := FDigest[ 0] xor FDigest[ 1] xor FDigest[ 4] xor 1; |
FDigest[ 1] := FDigest[ 1] xor FDigest[ 2] xor FDigest[ 5] xor Buffer[ 0]; |
FDigest[ 2] := FDigest[ 2] xor FDigest[ 3] xor FDigest[ 6] xor Buffer[ 1]; |
FDigest[ 3] := FDigest[ 3] xor FDigest[ 4] xor FDigest[ 7] xor Buffer[ 2]; |
FDigest[ 4] := FDigest[ 4] xor FDigest[ 5] xor FDigest[ 8] xor Buffer[ 3]; |
FDigest[ 5] := FDigest[ 5] xor FDigest[ 6] xor FDigest[ 9] xor Buffer[ 4]; |
FDigest[ 6] := FDigest[ 6] xor FDigest[ 7] xor FDigest[10] xor Buffer[ 5]; |
FDigest[ 7] := FDigest[ 7] xor FDigest[ 8] xor FDigest[11] xor Buffer[ 6]; |
FDigest[ 8] := FDigest[ 8] xor FDigest[ 9] xor FDigest[12] xor Buffer[ 7]; |
FDigest[ 9] := FDigest[ 9] xor FDigest[10] xor FDigest[13] xor PBufB[ 0]; |
FDigest[10] := FDigest[10] xor FDigest[11] xor FDigest[14] xor PBufB[ 1]; |
FDigest[11] := FDigest[11] xor FDigest[12] xor FDigest[15] xor PBufB[ 2]; |
FDigest[12] := FDigest[12] xor FDigest[13] xor FDigest[16] xor PBufB[ 3]; |
FDigest[13] := FDigest[13] xor FDigest[14] xor T0 xor PBufB[ 4]; |
FDigest[14] := FDigest[14] xor FDigest[15] xor T1 xor PBufB[ 5]; |
FDigest[15] := FDigest[15] xor FDigest[16] xor T2 xor PBufB[ 6]; |
FDigest[16] := FDigest[16] xor T0 xor T3 xor PBufB[ 7]; |
end; |
{$ENDIF !THash_Panama_asm} |
procedure THash_Panama.DoDone; |
begin |
if FPaddingByte = 0 then |
FPaddingByte := $01; |
FBuffer[FBufferIndex] := FPaddingByte; |
Inc(FBufferIndex); |
FillChar(FBuffer[FBufferIndex], FBufferSize - FBufferIndex, 0); |
DoTransform(Pointer(FBuffer)); |
DoPull; |
FillChar(FLFSRBuffer, SizeOf(FLFSRBuffer), 0); |
FTap := 0; |
end; |
{$IFNDEF THash_Panama_asm} |
procedure THash_Panama.DoPull; |
var |
PBufL, PBufB, PTap0, PTap25: PUInt32Array; |
T0, T1, T2, T3: UInt32; |
I: Integer; |
begin |
for I := 0 to 31 do |
begin |
// LFSR emulation |
PBufL := @FLFSRBuffer[(FTap + 4) and 31]; |
PBufB := @FLFSRBuffer[(FTap + 16) and 31]; |
FTap := (FTap - 1) and 31; |
PTap0 := @FLFSRBuffer[FTap]; |
PTap25 := @FLFSRBuffer[(FTap + 25) and 31]; |
// update the LFSR buffer (LAMBDA_PULL) |
PTap25[ 0] := PTap25[ 0] xor PTap0[ 2]; |
PTap25[ 1] := PTap25[ 1] xor PTap0[ 3]; |
PTap25[ 2] := PTap25[ 2] xor PTap0[ 4]; |
PTap25[ 3] := PTap25[ 3] xor PTap0[ 5]; |
PTap25[ 4] := PTap25[ 4] xor PTap0[ 6]; |
PTap25[ 5] := PTap25[ 5] xor PTap0[ 7]; |
PTap25[ 6] := PTap25[ 6] xor PTap0[ 0]; |
PTap25[ 7] := PTap25[ 7] xor PTap0[ 1]; |
PTap0[ 0] := PTap0[ 0] xor FDigest[ 1]; |
PTap0[ 1] := PTap0[ 1] xor FDigest[ 2]; |
PTap0[ 2] := PTap0[ 2] xor FDigest[ 3]; |
PTap0[ 3] := PTap0[ 3] xor FDigest[ 4]; |
PTap0[ 4] := PTap0[ 4] xor FDigest[ 5]; |
PTap0[ 5] := PTap0[ 5] xor FDigest[ 6]; |
PTap0[ 6] := PTap0[ 6] xor FDigest[ 7]; |
PTap0[ 7] := PTap0[ 7] xor FDigest[ 8]; |
// perform non-linearity stage (GAMMA) |
T0 := FDigest[ 0]; |
T1 := FDigest[ 1]; |
FDigest[ 0] := FDigest[ 0] xor (FDigest[ 1] or not FDigest[ 2]); |
FDigest[ 1] := FDigest[ 1] xor (FDigest[ 2] or not FDigest[ 3]); |
FDigest[ 2] := FDigest[ 2] xor (FDigest[ 3] or not FDigest[ 4]); |
FDigest[ 3] := FDigest[ 3] xor (FDigest[ 4] or not FDigest[ 5]); |
FDigest[ 4] := FDigest[ 4] xor (FDigest[ 5] or not FDigest[ 6]); |
FDigest[ 5] := FDigest[ 5] xor (FDigest[ 6] or not FDigest[ 7]); |
FDigest[ 6] := FDigest[ 6] xor (FDigest[ 7] or not FDigest[ 8]); |
FDigest[ 7] := FDigest[ 7] xor (FDigest[ 8] or not FDigest[ 9]); |
FDigest[ 8] := FDigest[ 8] xor (FDigest[ 9] or not FDigest[10]); |
FDigest[ 9] := FDigest[ 9] xor (FDigest[10] or not FDigest[11]); |
FDigest[10] := FDigest[10] xor (FDigest[11] or not FDigest[12]); |
FDigest[11] := FDigest[11] xor (FDigest[12] or not FDigest[13]); |
FDigest[12] := FDigest[12] xor (FDigest[13] or not FDigest[14]); |
FDigest[13] := FDigest[13] xor (FDigest[14] or not FDigest[15]); |
FDigest[14] := FDigest[14] xor (FDigest[15] or not FDigest[16]); |
FDigest[15] := FDigest[15] xor (FDigest[16] or not T0); |
FDigest[16] := FDigest[16] xor (T0 or not T1); |
// perform bit-dispersion stage (PI) |
T0 := FDigest[ 1]; |
T1 := FDigest[ 7]; FDigest[ 1] := (T1 shl 1) or (T1 shr 31); |
T1 := FDigest[ 5]; FDigest[ 5] := (T0 shl 15) or (T0 shr 17); |
T0 := FDigest[ 8]; FDigest[ 8] := (T1 shl 4) or (T1 shr 28); |
T1 := FDigest[ 6]; FDigest[ 6] := (T0 shl 21) or (T0 shr 11); |
T0 := FDigest[13]; FDigest[13] := (T1 shl 27) or (T1 shr 5); |
T1 := FDigest[14]; FDigest[14] := (T0 shl 9) or (T0 shr 23); |
T0 := FDigest[ 2]; FDigest[ 2] := (T1 shl 3) or (T1 shr 29); |
T1 := FDigest[10]; FDigest[10] := (T0 shl 23) or (T0 shr 9); |
T0 := FDigest[16]; FDigest[16] := (T1 shl 8) or (T1 shr 24); |
T1 := FDigest[12]; FDigest[12] := (T0 shl 14) or (T0 shr 18); |
T0 := FDigest[ 9]; FDigest[ 9] := (T1 shl 13) or (T1 shr 19); |
T1 := FDigest[11]; FDigest[11] := (T0 shl 2) or (T0 shr 30); |
T0 := FDigest[ 4]; FDigest[ 4] := (T1 shl 10) or (T1 shr 22); |
T1 := FDigest[ 3]; FDigest[ 3] := (T0 shl 6) or (T0 shr 26); |
T0 := FDigest[15]; FDigest[15] := (T1 shl 24) or (T1 shr 8); |
FDigest[ 7] := (T0 shl 28) or (T0 shr 4); |
// perform diffusion stage (THETA) + buffer injection stage (SIGMA) |
T0 := FDigest[ 0]; |
T1 := FDigest[ 1]; |
T2 := FDigest[ 2]; |
T3 := FDigest[ 3]; |
FDigest[ 0] := FDigest[ 0] xor FDigest[ 1] xor FDigest[ 4] xor 1; |
FDigest[ 1] := FDigest[ 1] xor FDigest[ 2] xor FDigest[ 5] xor PBufL[ 0]; |
FDigest[ 2] := FDigest[ 2] xor FDigest[ 3] xor FDigest[ 6] xor PBufL[ 1]; |
FDigest[ 3] := FDigest[ 3] xor FDigest[ 4] xor FDigest[ 7] xor PBufL[ 2]; |
FDigest[ 4] := FDigest[ 4] xor FDigest[ 5] xor FDigest[ 8] xor PBufL[ 3]; |
FDigest[ 5] := FDigest[ 5] xor FDigest[ 6] xor FDigest[ 9] xor PBufL[ 4]; |
FDigest[ 6] := FDigest[ 6] xor FDigest[ 7] xor FDigest[10] xor PBufL[ 5]; |
FDigest[ 7] := FDigest[ 7] xor FDigest[ 8] xor FDigest[11] xor PBufL[ 6]; |
FDigest[ 8] := FDigest[ 8] xor FDigest[ 9] xor FDigest[12] xor PBufL[ 7]; |
FDigest[ 9] := FDigest[ 9] xor FDigest[10] xor FDigest[13] xor PBufB[ 0]; |
FDigest[10] := FDigest[10] xor FDigest[11] xor FDigest[14] xor PBufB[ 1]; |
FDigest[11] := FDigest[11] xor FDigest[12] xor FDigest[15] xor PBufB[ 2]; |
FDigest[12] := FDigest[12] xor FDigest[13] xor FDigest[16] xor PBufB[ 3]; |
FDigest[13] := FDigest[13] xor FDigest[14] xor T0 xor PBufB[ 4]; |
FDigest[14] := FDigest[14] xor FDigest[15] xor T1 xor PBufB[ 5]; |
FDigest[15] := FDigest[15] xor FDigest[16] xor T2 xor PBufB[ 6]; |
FDigest[16] := FDigest[16] xor T0 xor T3 xor PBufB[ 7]; |
end; |
// move state to Digest buffer |
FDigest[0] := FDigest[ 9]; |
FDigest[1] := FDigest[10]; |
FDigest[2] := FDigest[11]; |
FDigest[3] := FDigest[12]; |
FDigest[4] := FDigest[13]; |
FDigest[5] := FDigest[14]; |
FDigest[6] := FDigest[15]; |
FDigest[7] := FDigest[16]; |
end; |
{$ENDIF !THash_Panama_asm} |
function THash_Panama.Digest: PUInt8Array; |
begin |
Result := @FDigest; |
end; |
class function THash_Panama.DigestSize: UInt32; |
begin |
Result := 32; |
end; |
class function THash_Panama.BlockSize: UInt32; |
begin |
Result := 32 |
end; |
{ THashBaseWhirlpool } |
{$IFNDEF THashBaseWhirlpool_asm} |
procedure THashBaseWhirlpool.DoTransform(Buffer: PUInt32Array); |
type |
PWhirlData = ^TWhirlData; |
TWhirlData = array[0..15] of UInt32; |
PWhirlTable = ^TWhirlTable; |
TWhirlTable = array[0..7, 0..511] of UInt32; |
procedure Whirl(var L: TWhirlData; const K: TWhirlData; const T: PWhirlTable); |
begin |
L[0*2+0] := T[0, ((K[ 0] shl 1) and $1fe)] xor |
T[1, ((K[14] shr 7) and $1fe)] xor |
T[2, ((K[12] shr 15) and $1fe)] xor |
T[3, ((K[10] shr 23) and $1fe)] xor |
T[4, ((K[ 9] shl 1) and $1fe)] xor |
T[5, ((K[ 7] shr 7) and $1fe)] xor |
T[6, ((K[ 5] shr 15) and $1fe)] xor |
T[7, ((K[ 3] shr 23) and $1fe)]; |
L[0*2+1] := T[0, ((K[ 0] shl 1) and $1fe)+1] xor |
T[1, ((K[14] shr 7) and $1fe)+1] xor |
T[2, ((K[12] shr 15) and $1fe)+1] xor |
T[3, ((K[10] shr 23) and $1fe)+1] xor |
T[4, ((K[ 9] shl 1) and $1fe)+1] xor |
T[5, ((K[ 7] shr 7) and $1fe)+1] xor |
T[6, ((K[ 5] shr 15) and $1fe)+1] xor |
T[7, ((K[ 3] shr 23) and $1fe)+1]; |
L[1*2+0] := T[0, ((K[ 2] shl 1) and $1fe)] xor |
T[1, ((K[ 0] shr 7) and $1fe)] xor |
T[2, ((K[14] shr 15) and $1fe)] xor |
T[3, ((K[12] shr 23) and $1fe)] xor |
T[4, ((K[11] shl 1) and $1fe)] xor |
T[5, ((K[ 9] shr 7) and $1fe)] xor |
T[6, ((K[ 7] shr 15) and $1fe)] xor |
T[7, ((K[ 5] shr 23) and $1fe)]; |
L[1*2+1] := T[0, ((K[ 2] shl 1) and $1fe)+1] xor |
T[1, ((K[ 0] shr 7) and $1fe)+1] xor |
T[2, ((K[14] shr 15) and $1fe)+1] xor |
T[3, ((K[12] shr 23) and $1fe)+1] xor |
T[4, ((K[11] shl 1) and $1fe)+1] xor |
T[5, ((K[ 9] shr 7) and $1fe)+1] xor |
T[6, ((K[ 7] shr 15) and $1fe)+1] xor |
T[7, ((K[ 5] shr 23) and $1fe)+1]; |
L[2*2+0] := T[0, ((K[ 4] shl 1) and $1fe)] xor |
T[1, ((K[ 2] shr 7) and $1fe)] xor |
T[2, ((K[ 0] shr 15) and $1fe)] xor |
T[3, ((K[14] shr 23) and $1fe)] xor |
T[4, ((K[13] shl 1) and $1fe)] xor |
T[5, ((K[11] shr 7) and $1fe)] xor |
T[6, ((K[ 9] shr 15) and $1fe)] xor |
T[7, ((K[ 7] shr 23) and $1fe)]; |
L[2*2+1] := T[0, ((K[ 4] shl 1) and $1fe)+1] xor |
T[1, ((K[ 2] shr 7) and $1fe)+1] xor |
T[2, ((K[ 0] shr 15) and $1fe)+1] xor |
T[3, ((K[14] shr 23) and $1fe)+1] xor |
T[4, ((K[13] shl 1) and $1fe)+1] xor |
T[5, ((K[11] shr 7) and $1fe)+1] xor |
T[6, ((K[ 9] shr 15) and $1fe)+1] xor |
T[7, ((K[ 7] shr 23) and $1fe)+1]; |
L[3*2+0] := T[0, ((K[ 6] shl 1) and $1fe)] xor |
T[1, ((K[ 4] shr 7) and $1fe)] xor |
T[2, ((K[ 2] shr 15) and $1fe)] xor |
T[3, ((K[ 0] shr 23) and $1fe)] xor |
T[4, ((K[15] shl 1) and $1fe)] xor |
T[5, ((K[13] shr 7) and $1fe)] xor |
T[6, ((K[11] shr 15) and $1fe)] xor |
T[7, ((K[ 9] shr 23) and $1fe)]; |
L[3*2+1] := T[0, ((K[ 6] shl 1) and $1fe)+1] xor |
T[1, ((K[ 4] shr 7) and $1fe)+1] xor |
T[2, ((K[ 2] shr 15) and $1fe)+1] xor |
T[3, ((K[ 0] shr 23) and $1fe)+1] xor |
T[4, ((K[15] shl 1) and $1fe)+1] xor |
T[5, ((K[13] shr 7) and $1fe)+1] xor |
T[6, ((K[11] shr 15) and $1fe)+1] xor |
T[7, ((K[ 9] shr 23) and $1fe)+1]; |
L[4*2+0] := T[0, ((K[ 8] shl 1) and $1fe)] xor |
T[1, ((K[ 6] shr 7) and $1fe)] xor |
T[2, ((K[ 4] shr 15) and $1fe)] xor |
T[3, ((K[ 2] shr 23) and $1fe)] xor |
T[4, ((K[ 1] shl 1) and $1fe)] xor |
T[5, ((K[15] shr 7) and $1fe)] xor |
T[6, ((K[13] shr 15) and $1fe)] xor |
T[7, ((K[11] shr 23) and $1fe)]; |
L[4*2+1] := T[0, ((K[ 8] shl 1) and $1fe)+1] xor |
T[1, ((K[ 6] shr 7) and $1fe)+1] xor |
T[2, ((K[ 4] shr 15) and $1fe)+1] xor |
T[3, ((K[ 2] shr 23) and $1fe)+1] xor |
T[4, ((K[ 1] shl 1) and $1fe)+1] xor |
T[5, ((K[15] shr 7) and $1fe)+1] xor |
T[6, ((K[13] shr 15) and $1fe)+1] xor |
T[7, ((K[11] shr 23) and $1fe)+1]; |
L[5*2+0] := T[0, ((K[10] shl 1) and $1fe)] xor |
T[1, ((K[ 8] shr 7) and $1fe)] xor |
T[2, ((K[ 6] shr 15) and $1fe)] xor |
T[3, ((K[ 4] shr 23) and $1fe)] xor |
T[4, ((K[ 3] shl 1) and $1fe)] xor |
T[5, ((K[ 1] shr 7) and $1fe)] xor |
T[6, ((K[15] shr 15) and $1fe)] xor |
T[7, ((K[13] shr 23) and $1fe)]; |
L[5*2+1] := T[0, ((K[10] shl 1) and $1fe)+1] xor |
T[1, ((K[ 8] shr 7) and $1fe)+1] xor |
T[2, ((K[ 6] shr 15) and $1fe)+1] xor |
T[3, ((K[ 4] shr 23) and $1fe)+1] xor |
T[4, ((K[ 3] shl 1) and $1fe)+1] xor |
T[5, ((K[ 1] shr 7) and $1fe)+1] xor |
T[6, ((K[15] shr 15) and $1fe)+1] xor |
T[7, ((K[13] shr 23) and $1fe)+1]; |
L[6*2+0] := T[0, ((K[12] shl 1) and $1fe)] xor |
T[1, ((K[10] shr 7) and $1fe)] xor |
T[2, ((K[ 8] shr 15) and $1fe)] xor |
T[3, ((K[ 6] shr 23) and $1fe)] xor |
T[4, ((K[ 5] shl 1) and $1fe)] xor |
T[5, ((K[ 3] shr 7) and $1fe)] xor |
T[6, ((K[ 1] shr 15) and $1fe)] xor |
T[7, ((K[15] shr 23) and $1fe)]; |
L[6*2+1] := T[0, ((K[12] shl 1) and $1fe)+1] xor |
T[1, ((K[10] shr 7) and $1fe)+1] xor |
T[2, ((K[ 8] shr 15) and $1fe)+1] xor |
T[3, ((K[ 6] shr 23) and $1fe)+1] xor |
T[4, ((K[ 5] shl 1) and $1fe)+1] xor |
T[5, ((K[ 3] shr 7) and $1fe)+1] xor |
T[6, ((K[ 1] shr 15) and $1fe)+1] xor |
T[7, ((K[15] shr 23) and $1fe)+1]; |
L[7*2+0] := T[0, ((K[14] shl 1) and $1fe)] xor |
T[1, ((K[12] shr 7) and $1fe)] xor |
T[2, ((K[10] shr 15) and $1fe)] xor |
T[3, ((K[ 8] shr 23) and $1fe)] xor |
T[4, ((K[ 7] shl 1) and $1fe)] xor |
T[5, ((K[ 5] shr 7) and $1fe)] xor |
T[6, ((K[ 3] shr 15) and $1fe)] xor |
T[7, ((K[ 1] shr 23) and $1fe)]; |
L[7*2+1] := T[0, ((K[14] shl 1) and $1fe)+1] xor |
T[1, ((K[12] shr 7) and $1fe)+1] xor |
T[2, ((K[10] shr 15) and $1fe)+1] xor |
T[3, ((K[ 8] shr 23) and $1fe)+1] xor |
T[4, ((K[ 7] shl 1) and $1fe)+1] xor |
T[5, ((K[ 5] shr 7) and $1fe)+1] xor |
T[6, ((K[ 3] shr 15) and $1fe)+1] xor |
T[7, ((K[ 1] shr 23) and $1fe)+1]; |
end; |
var |
S, L, K: TWhirlData; |
I: Integer; |
begin |
Assert(not Odd(Whirlpool_Rounds)); |
Move(FDigest, K, SizeOf(FDigest)); |
XORBuffers(FDigest, Buffer[0], SizeOf(FDigest), S); |
// iterate over all rounds |
for I := 0 to Whirlpool_Rounds div 2 - 1 do |
begin |
Whirl(L, K, FTableC); |
L[0] := L[0] xor PUInt32Array(FTableR)[I*4+0]; |
L[1] := L[1] xor PUInt32Array(FTableR)[I*4+1]; |
Whirl(K, S, FTableC); |
XORBuffers(L, K, SizeOf(S), S); |
Whirl(K, L, FTableC); |
K[0] := K[0] xor PUInt32Array(FTableR)[I*4+2]; |
K[1] := K[1] xor PUInt32Array(FTableR)[I*4+3]; |
Whirl(L, S, FTableC); |
XORBuffers(K, L, SizeOf(S), S); |
end; |
XORBuffers(S, Buffer[0], SizeOf(FDigest), S); |
XORBuffers(S, FDigest, SizeOf(FDigest), FDigest); |
end; |
{$ENDIF !THashBaseWhirlpool_asm} |
procedure THashBaseWhirlpool.DoDone; |
var |
I: Integer; |
begin |
if FPaddingByte = 0 then |
FPaddingByte := $80; |
FBuffer[FBufferIndex] := FPaddingByte; |
Inc(FBufferIndex); |
if FBufferIndex > FBufferSize - 32 then |
begin |
FillChar(FBuffer[FBufferIndex], FBufferSize - FBufferIndex, 0); |
DoTransform(Pointer(FBuffer)); |
FBufferIndex := 0; |
end; |
FillChar(FBuffer[FBufferIndex], FBufferSize - FBufferIndex, 0); |
for I := 31 downto 0 do |
FBuffer[63 - I] := PByteArray(@FCount)[I]; |
DoTransform(Pointer(FBuffer)); |
end; |
function THashBaseWhirlpool.Digest: PUInt8Array; |
begin |
Result := @FDigest; |
end; |
class function THashBaseWhirlpool.DigestSize: UInt32; |
begin |
Result := 64; |
end; |
class function THashBaseWhirlpool.BlockSize: UInt32; |
begin |
Result := 64; |
end; |
{ THash_Whirlpool0 } |
procedure THash_Whirlpool0.DoInit; |
begin |
FillChar(FDigest, SizeOf(FDigest), 0); |
FTableC := @Whirlpool_C_U; |
FTableR := @Whirlpool_RC_U |
end; |
{ THash_WhirlpoolT } |
procedure THash_WhirlpoolT.DoInit; |
begin |
FillChar(FDigest, SizeOf(FDigest), 0); |
FTableC := @Whirlpool_C_T; |
FTableR := @Whirlpool_RC_T; |
end; |
{ THash_Whirlpool1_ } |
procedure THash_Whirlpool1_.DoInit; |
begin |
FillChar(FDigest, SizeOf(FDigest), 0); |
FTableC := @Whirlpool_C_1; |
FTableR := @Whirlpool_RC_1; |
end; |
{ THash_Square } |
procedure THash_Square.DoInit; |
begin |
FillChar(FDigest, SizeOf(FDigest), 0); |
end; |
{$IFNDEF THash_Square_asm} |
procedure THash_Square.DoTransform(Buffer: PUInt32Array); |
var |
Key: array[0..8, 0..3] of UInt32; |
A, B, C, D: UInt32; |
AA, BB, CC, DD: UInt32; |
I: Integer; |
begin |
// Build and expand the Key, Digest include the Key |
Key[0, 0] := FDigest[0]; |
Key[0, 1] := FDigest[1]; |
Key[0, 2] := FDigest[2]; |
Key[0, 3] := FDigest[3]; |
for I := 1 to 8 do |
begin |
Key[I, 0] := Key[I - 1, 0] xor Key[I - 1, 3] shr 8 xor Key[I - 1, 3] shl 24 xor 1 shl (I - 1); |
Key[I, 1] := Key[I - 1, 1] xor Key[I, 0]; |
Key[I, 2] := Key[I - 1, 2] xor Key[I, 1]; |
Key[I, 3] := Key[I - 1, 3] xor Key[I, 2]; |
Key[I - 1, 0] := Square_PHIr[0, Key[I - 1, 0] and $FF] xor |
Square_PHIr[1, Key[I - 1, 0] shr 8 and $FF] xor |
Square_PHIr[2, Key[I - 1, 0] shr 16 and $FF] xor |
Square_PHIr[3, Key[I - 1, 0] shr 24 ]; |
Key[I - 1, 1] := Square_PHIr[0, Key[I - 1, 1] and $FF] xor |
Square_PHIr[1, Key[I - 1, 1] shr 8 and $FF] xor |
Square_PHIr[2, Key[I - 1, 1] shr 16 and $FF] xor |
Square_PHIr[3, Key[I - 1, 1] shr 24 ]; |
Key[I - 1, 2] := Square_PHIr[0, Key[I - 1, 2] and $FF] xor |
Square_PHIr[1, Key[I - 1, 2] shr 8 and $FF] xor |
Square_PHIr[2, Key[I - 1, 2] shr 16 and $FF] xor |
Square_PHIr[3, Key[I - 1, 2] shr 24 ]; |
Key[I - 1, 3] := Square_PHIr[0, Key[I - 1, 3] and $FF] xor |
Square_PHIr[1, Key[I - 1, 3] shr 8 and $FF] xor |
Square_PHIr[2, Key[I - 1, 3] shr 16 and $FF] xor |
Square_PHIr[3, Key[I - 1, 3] shr 24 ]; |
end; |
// Encrypt begin here, same TCipher_Square.Encode |
A := Buffer[0] xor Key[0, 0]; |
B := Buffer[1] xor Key[0, 1]; |
C := Buffer[2] xor Key[0, 2]; |
D := Buffer[3] xor Key[0, 3]; |
for I := 0 to 6 do |
begin |
AA := Square_TE[0, A and $FF] xor |
Square_TE[1, B and $FF] xor |
Square_TE[2, C and $FF] xor |
Square_TE[3, D and $FF] xor Key[I + 1, 0]; |
BB := Square_TE[0, A shr 8 and $FF] xor |
Square_TE[1, B shr 8 and $FF] xor |
Square_TE[2, C shr 8 and $FF] xor |
Square_TE[3, D shr 8 and $FF] xor Key[I + 1, 1]; |
CC := Square_TE[0, A shr 16 and $FF] xor |
Square_TE[1, B shr 16 and $FF] xor |
Square_TE[2, C shr 16 and $FF] xor |
Square_TE[3, D shr 16 and $FF] xor Key[I + 1, 2]; |
DD := Square_TE[0, A shr 24 ] xor |
Square_TE[1, B shr 24 ] xor |
Square_TE[2, C shr 24 ] xor |
Square_TE[3, D shr 24 ] xor Key[I + 1, 3]; |
A := AA; B := BB; C := CC; D := DD; |
end; |
FDigest[0] := Buffer[0] xor |
Square_SEint[A and $FF] xor |
Square_SEint[B and $FF] shl 8 xor |
Square_SEint[C and $FF] shl 16 xor |
Square_SEint[D and $FF] shl 24 xor Key[8, 0]; |
FDigest[1] := Buffer[1] xor |
Square_SEint[A shr 8 and $FF] xor |
Square_SEint[B shr 8 and $FF] shl 8 xor |
Square_SEint[C shr 8 and $FF] shl 16 xor |
Square_SEint[D shr 8 and $FF] shl 24 xor Key[8, 1]; |
FDigest[2] := Buffer[2] xor |
Square_SEint[A shr 16 and $FF] xor |
Square_SEint[B shr 16 and $FF] shl 8 xor |
Square_SEint[C shr 16 and $FF] shl 16 xor |
Square_SEint[D shr 16 and $FF] shl 24 xor Key[8, 2]; |
FDigest[3] := Buffer[3] xor |
Square_SEint[A shr 24 ] xor |
Square_SEint[B shr 24 ] shl 8 xor |
Square_SEint[C shr 24 ] shl 16 xor |
Square_SEint[D shr 24 ] shl 24 xor Key[8, 3]; |
end; |
{$ENDIF !THash_Square_asm} |
procedure THash_Square.DoDone; |
var |
I: Integer; |
begin |
if FPaddingByte = 0 then |
FPaddingByte := $80; |
FBuffer[FBufferIndex] := FPaddingByte; |
Inc(FBufferIndex); |
if FBufferIndex > FBufferSize - 8 then |
begin |
FillChar(FBuffer[FBufferIndex], FBufferSize - FBufferIndex, 0); |
DoTransform(Pointer(FBuffer)); |
FBufferIndex := 0; |
end; |
FillChar(FBuffer[FBufferIndex], FBufferSize - FBufferIndex, 0); |
for I := 7 downto 0 do |
FBuffer[15 - I] := PByteArray(@FCount[0])[I]; |
DoTransform(Pointer(FBuffer)); |
end; |
function THash_Square.Digest: PUInt8Array; |
begin |
Result := @FDigest; |
end; |
class function THash_Square.DigestSize: UInt32; |
begin |
Result := 16; |
end; |
class function THash_Square.BlockSize: UInt32; |
begin |
Result := 16; |
end; |
{ THashBaseSnefru } |
procedure THashBaseSnefru.SetRounds(Value: UInt32); |
begin |
if (Value < 2) or (Value > 8) then |
Value := 8; |
FRounds := Value; |
end; |
procedure THashBaseSnefru.DoInit; |
begin |
FillChar(FDigest, SizeOf(FDigest), 0); |
SetRounds(FRounds); |
end; |
function THashBaseSnefru.GetMaxRounds: UInt32; |
begin |
Result := 8; |
end; |
function THashBaseSnefru.GetMinRounds: UInt32; |
begin |
Result := 2; |
end; |
function THashBaseSnefru.GetRounds: UInt32; |
begin |
Result := FRounds; |
end; |
procedure THashBaseSnefru.DoDone; |
begin |
if FBufferIndex > 0 then |
begin |
FillChar(FBuffer[FBufferIndex], FBufferSize - FBufferIndex, 0); |
DoTransform(Pointer(FBuffer)); |
FBufferIndex := 0; |
end; |
FillChar(FBuffer[FBufferIndex], FBufferSize - FBufferIndex, 0); |
PUInt32(@FBuffer[FBufferSize - 8])^ := SwapUInt32(FCount[1]); |
PUInt32(@FBuffer[FBufferSize - 4])^ := SwapUInt32(FCount[0]); |
DoTransform(Pointer(FBuffer)); |
SwapUInt32Buffer(FDigest, FDigest, 8); |
end; |
function THashBaseSnefru.Digest: PUInt8Array; |
begin |
Result := @FDigest; |
end; |
{ THash_Snefru128 } |
{$IFNDEF THash_Snefru128_asm} |
procedure THash_Snefru128.DoTransform(Buffer: PUInt32Array); |
const |
ShiftTable: array[0..3] of Integer = (16, 8, 16, 24); |
var |
I, Index, ByteInWord, T, N, S, S0, S1: UInt32; |
D, Box0, Box1: PUInt32Array; |
begin |
D := @FDigest; |
SwapUInt32Buffer(Buffer[0], D[4], 12); |
Move(D[0], D[16], 16); |
Box0 := @Snefru_Data[0]; |
Box1 := @Snefru_Data[1]; |
for Index := 0 to FRounds - 1 do |
begin |
for ByteInWord := 0 to 3 do |
begin |
I := 0; |
N := D[0]; |
while I < 16 do |
begin |
S0 := Box0[N and $FF]; |
T := (I + 1) and 15; N := D[T] xor S0; D[T] := N; |
T := (I + 15) and 15; D[T] := D[T] xor S0; |
S1 := Box0[N and $FF]; |
T := (I + 2) and 15; N := D[T] xor S1; D[T] := N; |
T := (I + 16) and 15; D[T] := D[T] xor S1; |
S0 := Box1[N and $FF]; |
T := (I + 3) and 15; N := D[T] xor S0; D[T] := N; |
T := (I + 17) and 15; D[T] := D[T] xor S0; |
S1 := Box1[N and $FF]; |
T := (I + 4) and 15; N := D[T] xor S1; D[T] := N; |
T := (I + 18) and 15; D[T] := D[T] xor S1; |
Inc(I, 4); |
end; |
T := ShiftTable[ByteInWord]; |
S := 32 - T; |
for I := 0 to 15 do |
D[I] := D[I] shr T or D[I] shl S; |
end; |
Box0 := @Box0[512]; |
Box1 := @Box1[512]; |
end; |
for I := 0 to 3 do |
D[I] := D[I + 16] xor D[15 - I]; |
end; |
{$ENDIF !THash_Snefru128_asm} |
class function THash_Snefru128.DigestSize: UInt32; |
begin |
Result := 16; |
end; |
class function THash_Snefru128.BlockSize: UInt32; |
begin |
Result := 48 |
end; |
{ THash_Snefru256 } |
{$IFNDEF THash_Snefru256_asm} |
procedure THash_Snefru256.DoTransform(Buffer: PUInt32Array); |
const |
ShiftTable: array[0..3] of Integer = (16, 8, 16, 24); |
var |
I, Index, ByteInWord, T, N, S, S0, S1: UInt32; |
D, Box0, Box1: PUInt32Array; |
begin |
D := @FDigest; |
SwapUInt32Buffer(Buffer[0], D[8], 8); |
Move(D[0], D[16], 32); |
Box0 := @Snefru_Data[0]; |
Box1 := @Snefru_Data[1]; |
for Index := 0 to FRounds - 1 do |
begin |
for ByteInWord := 0 to 3 do |
begin |
I := 0; |
N := D[0]; |
while I < 16 do |
begin |
S0 := Box0[N and $FF]; |
T := (I + 1) and 15; N := D[T] xor S0; D[T] := N; |
T := (I + 15) and 15; D[T] := D[T] xor S0; |
S1 := Box0[N and $FF]; |
T := (I + 2) and 15; N := D[T] xor S1; D[T] := N; |
T := (I + 16) and 15; D[T] := D[T] xor S1; |
S0 := Box1[N and $FF]; |
T := (I + 3) and 15; N := D[T] xor S0; D[T] := N; |
T := (I + 17) and 15; D[T] := D[T] xor S0; |
S1 := Box1[N and $FF]; |
T := (I + 4) and 15; N := D[T] xor S1; D[T] := N; |
T := (I + 18) and 15; D[T] := D[T] xor S1; |
Inc(I, 4); |
end; |
T := ShiftTable[ByteInWord]; |
S := 32 - T; |
for I := 0 to 15 do |
D[I] := D[I] shr T or D[I] shl S; |
end; |
Box0 := @Box0[512]; |
Box1 := @Box1[512]; |
end; |
for I := 0 to 7 do |
D[I] := D[I + 16] xor D[15 - I]; |
end; |
{$ENDIF !THash_Snefru256_asm} |
class function THash_Snefru256.DigestSize: UInt32; |
begin |
Result := 32; |
end; |
class function THash_Snefru256.BlockSize: UInt32; |
begin |
Result := 32 |
end; |
{ THash_Sapphire } |
procedure THash_Sapphire.DoInit; |
var |
I: Integer; |
begin |
FillChar(FDigest, SizeOf(FDigest), 0); |
FRotor := 1; |
FRatchet := 3; |
FAvalanche := 5; |
FPlain := 7; |
FCipher := 11; |
for I := 0 to 255 do |
FCards[I] := 255 - I; |
end; |
procedure THash_Sapphire.DoTransform(Buffer: PUInt32Array); |
begin |
// Empty on purpose: the base class for the hashes declares an abstract |
// DoTransform method and not providing an override for it would cause a |
// compiler warning |
end; |
procedure THash_Sapphire.SetDigestSize(Value: UInt8); |
begin |
if (Value >= 1) and (Value <= 64) then |
FDigestSize := Value |
else |
FDigestSize := DigestSize; |
end; |
procedure THash_Sapphire.DoDone; |
var |
I: Integer; |
begin |
for I := 255 downto 0 do |
Calc(I, 1); |
for I := 0 to DigestSize - 1 do |
begin |
Calc(#0#0, 1); |
PByteArray(@FDigest)[I] := FCipher; |
end; |
end; |
{$IFNDEF THash_Sapphire_asm} |
procedure THash_Sapphire.Calc(const Data; DataSize: Integer); |
var |
Cipher, Ratchet, Rotor, Plain, Avalanche, T: UInt32; |
D: PByte; |
begin |
D := @Data; |
Cipher := FCipher; |
Ratchet := FRatchet; |
Rotor := FRotor; |
Plain := FPlain; |
Avalanche := FAvalanche; |
while DataSize > 0 do |
begin |
Dec(DataSize); |
Ratchet := (Ratchet + FCards[Rotor]) and $FF; |
Rotor := (Rotor + 1) and $FF; |
T := FCards[Cipher]; |
FCards[Cipher] := FCards[Ratchet]; |
FCards[Ratchet] := FCards[Plain]; |
FCards[Plain] := FCards[Rotor]; |
FCards[Rotor] := T; |
Avalanche := (Avalanche + FCards[T]) and $FF; |
T := (FCards[Plain] + FCards[Cipher] + FCards[Avalanche]) and $FF; |
Plain := D^; Inc(D); |
Cipher := Plain xor FCards[FCards[T]] xor FCards[(FCards[Ratchet] + FCards[Rotor]) and $FF]; |
end; |
FCipher := Cipher; |
FRatchet := Ratchet; |
FRotor := Rotor; |
FPlain := Plain; |
FAvalanche := Avalanche; |
end; |
{$ENDIF !THash_Sapphire_asm} |
function THash_Sapphire.Digest: PUInt8Array; |
begin |
Result := @FDigest; |
end; |
function THash_Sapphire.DigestAsBytes: TBytes; |
var |
Size: Integer; |
begin |
if FDigestSize > 0 then |
Size := FDigestSize |
else |
Size := DigestSize; |
SetLength(Result, Size); |
if Size <> 0 then |
Move(FDigest, Result[0], Size); |
end; |
class function THash_Sapphire.DigestSize: UInt32; |
begin |
Result := 64; |
end; |
class function THash_Sapphire.BlockSize: UInt32; |
begin |
Result := 1; |
end; |
{$IFDEF RESTORE_RANGECHECKS}{$R+}{$ENDIF} |
{$IFDEF RESTORE_OVERFLOWCHECKS}{$Q+}{$ENDIF} |
{ THash_Keccak_224 } |
class function THash_Keccak_224.BlockSize: UInt32; |
begin |
Result := 144; |
end; |
class function THash_Keccak_224.DigestSize: UInt32; |
begin |
Result := 28; |
end; |
procedure THash_Keccak_224.DoInit; |
begin |
inherited; |
FIsKeccack := true; |
end; |
{ THash_Keccak_256 } |
class function THash_Keccak_256.BlockSize: UInt32; |
begin |
Result := 136; |
end; |
class function THash_Keccak_256.DigestSize: UInt32; |
begin |
Result := 32; |
end; |
procedure THash_Keccak_256.DoInit; |
begin |
inherited; |
FIsKeccack := true; |
end; |
{ THash_Keccak_384 } |
class function THash_Keccak_384.BlockSize: UInt32; |
begin |
Result := 104; |
end; |
class function THash_Keccak_384.DigestSize: UInt32; |
begin |
Result := 48; |
end; |
procedure THash_Keccak_384.DoInit; |
begin |
inherited; |
FIsKeccack := true; |
end; |
{ THash_Keccak_512 } |
class function THash_Keccak_512.BlockSize: UInt32; |
begin |
Result := 72; |
end; |
class function THash_Keccak_512.DigestSize: UInt32; |
begin |
Result := 64; |
end; |
procedure THash_Keccak_512.DoInit; |
begin |
inherited; |
FIsKeccack := true; |
end; |
{ THash_SHA3_224 } |
class function THash_SHA3_224.BlockSize: UInt32; |
begin |
Result := 144; |
end; |
class function THash_SHA3_224.DigestSize: UInt32; |
begin |
Result := 28; |
end; |
procedure THash_SHA3_224.DoInit; |
begin |
inherited; |
InitSponge(1152, 448); |
FSpongeState.FixedOutputLength := 224; |
end; |
{ THash_SHA3_256 } |
class function THash_SHA3_256.BlockSize: UInt32; |
begin |
Result := 136; |
end; |
class function THash_SHA3_256.DigestSize: UInt32; |
begin |
Result := 32; |
end; |
procedure THash_SHA3_256.DoInit; |
begin |
inherited; |
InitSponge(1088, 512); |
FSpongeState.fixedOutputLength := 256; |
end; |
{ THash_SHA3_384 } |
class function THash_SHA3_384.BlockSize: UInt32; |
begin |
Result := 104; |
end; |
class function THash_SHA3_384.DigestSize: UInt32; |
begin |
Result := 48; |
end; |
procedure THash_SHA3_384.DoInit; |
begin |
inherited; |
InitSponge(832, 768); |
FSpongeState.fixedOutputLength := 384; |
end; |
{ THash_SHA3_512 } |
class function THash_SHA3_512.BlockSize: UInt32; |
begin |
Result := 72; |
end; |
class function THash_SHA3_512.DigestSize: UInt32; |
begin |
Result := 64; |
end; |
procedure THash_SHA3_512.DoInit; |
begin |
inherited; |
InitSponge(576, 1024); |
FSpongeState.fixedOutputLength := 512; |
end; |
{ THash_Shake128 } |
class function THash_Shake128.BlockSize: UInt32; |
begin |
Result := 168; |
end; |
class function THash_Shake128.DigestSize: UInt32; |
begin |
// 0 because the hash output length is defined via HashSize property at runtime |
Result := 0; |
end; |
procedure THash_Shake128.DoInit; |
begin |
inherited; |
InitSponge(1344, 256); |
end; |
{ THash_Shake256 } |
class function THash_Shake256.BlockSize: UInt32; |
begin |
Result := 136; |
end; |
class function THash_Shake256.DigestSize: UInt32; |
begin |
// 0 because the hash output length is defined via HashSize property at runtime |
Result := 0; |
end; |
procedure THash_Shake256.DoInit; |
begin |
inherited; |
InitSponge(1088, 512); |
end; |
{ THash_SHA3Base } |
procedure THash_SHA3Base.InitSponge(Rate, Capacity: UInt16); |
var |
OutputLengthBackup : UInt16; |
begin |
if FOutpLengSet then |
OutputLengthBackup := FSpongeState.FixedOutputLength |
else |
// Suppress compiler warning about potentially uninitialized variable |
OutputLengthBackup := 0; |
FillChar(FSpongeState, SizeOf(FSpongeState), 0); |
if (Rate + Capacity <> 1600) or (Rate = 0) or (Rate >= 1600) or |
((Rate and 63) <> 0) then |
raise EDECHashException.CreateFmt(sHashInitFailure, ['SHA3', |
'rate: ' + IntToStr(Rate) + |
' capacity: ' + IntToStr(Capacity)]); |
FSpongeState.Rate := Rate; |
FSpongeState.Capacity := Capacity; |
if FOutpLengSet then |
FSpongeState.FixedOutputLength := OutputLengthBackup; |
end; |
procedure THash_SHA3Base.KeccakAbsorb(var state: TState_B; data: PUInt64; laneCount: Integer); |
begin |
XORIntoState(TState_L(state), data, laneCount); |
KeccakPermutation(TState_L(state)); |
end; |
{$IFDEF PUREPASCAL} |
function THash_SHA3Base.RotL(const x: UInt64; c: Integer): UInt64; |
begin |
Result := (x shl c) or (x shr (64-c)); |
end; |
function THash_SHA3Base.RotL1(var x: UInt64): UInt64; |
begin |
Result := (x shl 1) or (x shr (64-1)); |
end; |
procedure THash_SHA3Base.KeccakPermutation(var state: TState_L); |
var |
A : PUInt64Array; |
B : array[0..24] of UInt64; |
C0, C1, C2, C3, C4, D0, D1, D2, D3, D4: UInt64; |
i : Integer; |
begin |
A := PUInt64Array(@state); |
for i := 0 to 23 do |
begin |
C0 := A[00] xor A[05] xor A[10] xor A[15] xor A[20]; |
C1 := A[01] xor A[06] xor A[11] xor A[16] xor A[21]; |
C2 := A[02] xor A[07] xor A[12] xor A[17] xor A[22]; |
C3 := A[03] xor A[08] xor A[13] xor A[18] xor A[23]; |
C4 := A[04] xor A[09] xor A[14] xor A[19] xor A[24]; |
D0 := RotL1(C0) xor C3; |
D1 := RotL1(C1) xor C4; |
D2 := RotL1(C2) xor C0; |
D3 := RotL1(C3) xor C1; |
D4 := RotL1(C4) xor C2; |
B[00] := A[00] xor D1; |
B[01] := RotL(A[06] xor D2, 44); |
B[02] := RotL(A[12] xor D3, 43); |
B[03] := RotL(A[18] xor D4, 21); |
B[04] := RotL(A[24] xor D0, 14); |
B[05] := RotL(A[03] xor D4, 28); |
B[06] := RotL(A[09] xor D0, 20); |
B[07] := RotL(A[10] xor D1, 3); |
B[08] := RotL(A[16] xor D2, 45); |
B[09] := RotL(A[22] xor D3, 61); |
B[10] := RotL(A[01] xor D2, 1); |
B[11] := RotL(A[07] xor D3, 6); |
B[12] := RotL(A[13] xor D4, 25); |
B[13] := RotL(A[19] xor D0, 8); |
B[14] := RotL(A[20] xor D1, 18); |
B[15] := RotL(A[04] xor D0, 27); |
B[16] := RotL(A[05] xor D1, 36); |
B[17] := RotL(A[11] xor D2, 10); |
B[18] := RotL(A[17] xor D3, 15); |
B[19] := RotL(A[23] xor D4, 56); |
B[20] := RotL(A[02] xor D3, 62); |
B[21] := RotL(A[08] xor D4, 55); |
B[22] := RotL(A[14] xor D0, 39); |
B[23] := RotL(A[15] xor D1, 41); |
B[24] := RotL(A[21] xor D2, 2); |
A[00] := B[00] xor ((not B[01]) and B[02]); |
A[01] := B[01] xor ((not B[02]) and B[03]); |
A[02] := B[02] xor ((not B[03]) and B[04]); |
A[03] := B[03] xor ((not B[04]) and B[00]); |
A[04] := B[04] xor ((not B[00]) and B[01]); |
A[05] := B[05] xor ((not B[06]) and B[07]); |
A[06] := B[06] xor ((not B[07]) and B[08]); |
A[07] := B[07] xor ((not B[08]) and B[09]); |
A[08] := B[08] xor ((not B[09]) and B[05]); |
A[09] := B[09] xor ((not B[05]) and B[06]); |
A[10] := B[10] xor ((not B[11]) and B[12]); |
A[11] := B[11] xor ((not B[12]) and B[13]); |
A[12] := B[12] xor ((not B[13]) and B[14]); |
A[13] := B[13] xor ((not B[14]) and B[10]); |
A[14] := B[14] xor ((not B[10]) and B[11]); |
A[15] := B[15] xor ((not B[16]) and B[17]); |
A[16] := B[16] xor ((not B[17]) and B[18]); |
A[17] := B[17] xor ((not B[18]) and B[19]); |
A[18] := B[18] xor ((not B[19]) and B[15]); |
A[19] := B[19] xor ((not B[15]) and B[16]); |
A[20] := B[20] xor ((not B[21]) and B[22]); |
A[21] := B[21] xor ((not B[22]) and B[23]); |
A[22] := B[22] xor ((not B[23]) and B[24]); |
A[23] := B[23] xor ((not B[24]) and B[20]); |
A[24] := B[24] xor ((not B[20]) and B[21]); |
A[00] := A[00] xor cRoundConstants[i]; |
end; |
end; |
{$ELSE} |
// Must be procedural as otherwise the parameters get passed in different |
// CPU registers and the complete ASM code would have needed to be rewritten. |
procedure KeccakPermutationKernel(B, A, C : Pointer); |
asm |
{$IFDEF X86ASM} |
{$INCLUDE DECHash.sha3_mmx.inc} |
{$ELSE} |
{$INCLUDE DECHash.sha3_x64.inc} |
{$ENDIF} |
end; |
procedure THash_SHA3Base.KeccakPermutation(var state: TState_L); |
var |
A : PUInt64Array; |
B : array [0..24] of UInt64; |
C : array [0..4] of UInt64; |
i : Integer; |
{$IFDEF X86ASM} |
procedure EMMS; |
asm |
// This operation marks the x87 FPU data registers (which are aliased to the |
// MMX technology registers) as available for use by x87 FPU floating-point |
// instructions. |
emms |
end; |
{$ENDIF} |
begin |
A := PUInt64Array(@state); |
for i:=0 to 23 do |
begin |
KeccakPermutationKernel(@B, A, @C); |
A[00] := A[00] xor cRoundConstants[i]; |
end; |
{$IFDEF X86ASM} |
EMMS; |
{$ENDIF} |
end; |
{$ENDIF} |
procedure THash_SHA3Base.PadAndSwitchToSqueezingPhase; |
var |
i: integer; |
begin |
// Note: the bits are numbered from 0 = LSB to 7 = MSB |
if (FSpongeState.BitsInQueue + 1 = FSpongeState.Rate) then |
begin |
i := FSpongeState.BitsInQueue div 8; |
FSpongeState.DataQueue[i] := FSpongeState.DataQueue[i] or |
(1 shl (FSpongeState.BitsInQueue and 7)); |
AbsorbQueue; |
FillChar(FSpongeState.DataQueue, FSpongeState.Rate div 8, 0); |
end |
else |
begin |
i := FSpongeState.BitsInQueue div 8; |
FillChar(FSpongeState.DataQueue[(FSpongeState.BitsInQueue+7) div 8], |
FSpongeState.Rate div 8 - (FSpongeState.BitsInQueue+7) div 8, 0); |
FSpongeState.DataQueue[i] := FSpongeState.DataQueue[i] or |
(1 shl (FSpongeState.BitsInQueue and 7)); |
end; |
i := (FSpongeState.Rate-1) div 8; |
FSpongeState.DataQueue[i] := FSpongeState.DataQueue[i] or |
(1 shl ((FSpongeState.Rate-1) and 7)); |
AbsorbQueue; |
ExtractFromState(@FSpongeState.DataQueue, |
TState_L(FSpongeState.State), |
FSpongeState.Rate div 64); |
FSpongeState.bitsAvailableForSqueezing := FSpongeState.Rate; |
FSpongeState.SqueezeActive := true; |
end; |
procedure THash_SHA3Base.Squeeze(var Output: TSHA3Digest; OutputLength: Int32); |
var |
i : Int32; |
PartialBlock : Int16; |
begin |
if not FSpongeState.SqueezeActive then |
PadAndSwitchToSqueezingPhase; |
// Only multiple of 8 bits are allowed, truncation must be done at user level |
if OutputLength and 7 <> 0 then |
raise EDECHashException.CreateFmt(sSHA3AbsorbFailure, |
[OutputLength, 'true']); |
i := 0; |
while i < OutputLength do |
begin |
if FSpongeState.bitsAvailableForSqueezing = 0 then |
begin |
KeccakPermutation(TState_L(FSpongeState.State)); |
ExtractFromState(@FSpongeState.DataQueue, TState_L(FSpongeState.State), |
FSpongeState.Rate div 64); |
FSpongeState.bitsAvailableForSqueezing := FSpongeState.Rate; |
end; |
PartialBlock := FSpongeState.bitsAvailableForSqueezing; |
if PartialBlock > OutputLength - i then |
PartialBlock := OutputLength - i; |
move(FSpongeState.DataQueue[(FSpongeState.Rate - FSpongeState.bitsAvailableForSqueezing) div 8], |
output[i div 8], PartialBlock div 8); |
dec(FSpongeState.bitsAvailableForSqueezing, PartialBlock); |
inc(i, PartialBlock); |
end; |
end; |
procedure THash_SHA3Base.XORIntoState(var state: TState_L; pI: PUInt64; laneCount: Integer); |
var |
pS: PUInt64; |
i: Integer; |
begin |
pS := @state[0]; |
for i:=laneCount-1 downto 0 do begin |
pS^ := pS^ xor pI^; |
Inc(pI); |
Inc(pS); |
end; |
end; |
procedure THash_SHA3Base.Absorb(Data: PBABytes; DatabitLen: Int32); |
var |
i, j, wholeBlocks, partialBlock: Integer; |
partialByte: Integer; |
curData: PUInt64; |
begin |
// if a number of bits which cannot be divided by 8 without reminder is in the |
// queue or algorithm is already in squeezing state |
if (FSpongeState.BitsInQueue and 7 <> 0) or FSpongeState.SqueezeActive then |
begin |
raise EDECHashException.CreateFmt(sSHA3AbsorbFailure, |
[FSpongeState.BitsInQueue, |
BoolToStr(FSpongeState.SqueezeActive, true)]); |
end; |
i := 0; |
while i < databitlen do |
begin |
if ((FSpongeState.BitsInQueue = 0) and (databitlen >= FSpongeState.Rate) and |
(i <= (databitlen - FSpongeState.Rate))) then |
begin |
wholeBlocks := (databitlen-i) div FSpongeState.Rate; |
curData := @data^[i div 8]; |
j := 0; |
while j < wholeBlocks do |
begin |
KeccakAbsorb(FSpongeState.State, curData, FSpongeState.Rate div 64); |
Inc(j); |
Inc(PByte(curData), FSpongeState.Rate div 8); |
end; |
Inc(i, wholeBlocks * FSpongeState.Rate); |
end |
else |
begin |
partialBlock := databitlen - i; |
if partialBlock + FSpongeState.BitsInQueue > FSpongeState.Rate then |
partialBlock := FSpongeState.Rate - FSpongeState.BitsInQueue; |
partialByte := partialBlock and 7; |
Dec(partialBlock, partialByte); |
Move(data^[i div 8], FSpongeState.DataQueue[FSpongeState.BitsInQueue div 8], partialBlock div 8); |
Inc(FSpongeState.BitsInQueue, partialBlock); |
Inc(i, partialBlock); |
if FSpongeState.BitsInQueue=FSpongeState.Rate then |
AbsorbQueue; |
if partialByte > 0 then |
begin |
FSpongeState.DataQueue[FSpongeState.BitsInQueue div 8] := |
data^[i div 8] and ((1 shl partialByte)-1); |
Inc(FSpongeState.BitsInQueue, partialByte); |
Inc(i, partialByte); |
end; |
end; |
end; |
end; |
procedure THash_SHA3Base.AbsorbQueue; |
begin |
// state.bitsInQueue is assumed to be equal to state.rat |
KeccakAbsorb(FSpongeState.State, @FSpongeState.DataQueue, FSpongeState.Rate div 64); |
FSpongeState.BitsInQueue := 0; |
end; |
procedure THash_SHA3Base.Calc(const Data; DataSize: Integer); |
var |
DataPtr : PBABytes; |
RoundSize : UInt32; |
const |
// Maximum number of bytes one can process in one round |
MaxRoundSize = MaxInt div 8; |
begin |
// due to the way the inherited calc is constructed it must not be called here! |
if (DataSize > 0) then |
begin |
DataPtr := PBABytes(@Data); |
while (UInt32(DataSize) > 0) do |
begin |
RoundSize := DataSize; |
if (RoundSize > MaxRoundSize) then |
RoundSize := MaxRoundSize; |
Absorb(DataPtr, RoundSize * 8); |
Dec(DataSize, RoundSize); |
Inc(DataPtr, RoundSize); |
end; |
end; |
end; |
constructor THash_SHA3Base.Create; |
begin |
inherited; |
FOutpLengSet := false; |
SetLength(FDigest, 64); |
end; |
function THash_SHA3Base.Digest: PUInt8Array; |
begin |
Result := @FDigest[0]; |
end; |
procedure THash_SHA3Base.DoDone; |
begin |
if not FSpongeState.SqueezeActive then |
FinalBit_LSB(FPaddingByte, FFinalByteLength, FDigest); |
end; |
procedure THash_SHA3Base.DoInit; |
begin |
inherited; |
FIsKeccack := false; |
FillChar(FDIgest[0], Length(FDigest), 0); |
end; |
procedure THash_SHA3Base.DoUpdate(Data: Pointer; DataBitLen: Int32); |
var |
LastByte: Byte; |
begin |
// No partial byte |
if DataBitLen and 7 = 0 then |
Absorb(Data, DataBitLen) |
else |
begin |
// Data contains a partial byte. Calculate the whole bytes first then the |
// partial one. |
Absorb(Data, DataBitLen - (DataBitLen and 7)); |
// Align the last partial byte to the least significant bits |
LastByte := PBABytes(Data)^[DatabitLen div 8] shr (8 - (DataBitLen and 7)); |
Absorb(@LastByte, DataBitLen and 7); |
end; |
end; |
procedure THash_SHA3Base.ExtractFromState(outp: Pointer; const state: TState_L; laneCount: Integer); |
var |
pI, pS: PUInt64; |
i: Integer; |
begin |
pI := outp; |
pS := @state[0]; |
for i := laneCount - 1 downto 0 do |
begin |
pI^ := pS^; |
Inc(pI); |
Inc(pS); |
end; |
end; |
procedure THash_SHA3Base.FinalBit_LSB(Bits: Byte; Bitlen: UInt16; |
var Hashvalue: TSHA3Digest); |
var |
WorkingBitLen : Int16; |
lw : UInt16; |
begin |
// normalize Bitlen and Bits (zero high bits) |
Bitlen := Bitlen and 7; |
if Bitlen = 0 then |
lw := 0 |
else |
lw := Bits and pred(word(1) shl Bitlen); |
// 'append' (in LSB language) the domain separation bits |
//if (FSpongeState.FixedOutputLength = 0) then |
if self.ClassParent = THash_ShakeBase then |
begin |
lw := lw or (word($F) shl Bitlen); |
WorkingBitLen := Bitlen + 4; |
end |
else |
begin |
if not FIsKeccack then |
begin |
// SHA3: append two bits 01 |
lw := lw or (word($2) shl Bitlen); |
WorkingBitLen := Bitlen + 2; |
end |
else |
WorkingBitLen := Bitlen; |
end; |
// update state with final bits |
if WorkingBitLen < 9 then |
begin |
// 0..8 bits, one call to update |
lw := lw shl (8-WorkingBitLen); |
DoUpdate(@lw, WorkingBitLen); |
// squeeze the digits from the sponge |
Squeeze(Hashvalue, FSpongeState.FixedOutputLength); |
end |
else |
begin |
// More than 8 bits, first a regular update with low byte |
DoUpdate(@lw, 8); |
// Finally update remaining last bits |
dec(WorkingBitLen,8); |
lw := lw shr WorkingBitLen; |
DoUpdate(@lw, WorkingBitLen); |
Squeeze(Hashvalue, FSpongeState.FixedOutputLength); |
end; |
end; |
procedure THash_SHA3Base.DoTransform(Buffer: PUInt32Array); |
begin |
// Empty on purpose as calculation is implemented differently for SHA3. Needed |
// to suppress the compiler warning that a class with an abstract method is created |
end; |
{ THash_ShakeBase } |
function THash_ShakeBase.GetHashSize: UInt16; |
begin |
// divided by 8 since this field is in bits |
Result := FSpongeState.FixedOutputLength shr 3; |
end; |
procedure THash_ShakeBase.SetHashSize(const Value: UInt16); |
begin |
if (Value = 0) then |
raise EDECHashException.CreateResFmt(@sHashInitFailure, |
[GetShortClassName, sHashOutputLength0]); |
// multiplied with 8 since this field is in bits |
FSpongeState.FixedOutputLength := Value * 8; |
// This flag tells the initialization of the algorithm that |
// FixedOutputLength needs to be preserved |
FOutpLengSet := true; |
SetLength(FDigest, Value); |
FillChar(FDigest[0], Length(FDigest), #0); |
end; |
function THash_ShakeBase.DigestAsBytes: TBytes; |
begin |
SetLength(Result, FSpongeState.FixedOutputLength shr 3); |
if FSpongeState.FixedOutputLength > 0 then |
Move(Digest^, Result[0], Length(Result)); |
end; |
{ THash_BCrypt } |
class function THash_BCrypt.BlockSize: UInt32; |
begin |
Result := 8; |
end; |
procedure THash_BCrypt.Calc(const Data; DataSize: Integer); |
const |
ctext: TBCDigest = ($4F,$72,$70,$68,$65,$61,$6E,$42, {'OrpheanBeholderScryDoubt'} |
$65,$68,$6F,$6C,$64,$65,$72,$53, |
$63,$72,$79,$44,$6F,$75,$62,$74); |
var |
PwdData : TBytes; |
i : Integer; |
begin |
if (DataSize > MaxPasswordLength) then |
raise EDECHashException.CreateFmt(sPasswordTooLong, [MaxPasswordLength]); |
// While this should normally be caught on setting salt already it is there |
// especially to catch cases where no salt has been specified yet. |
if (Length(FSalt) < MinSaltLength) or (Length(FSalt) > MaxSaltLength) then |
raise EDECHashException.CreateFmt(sWrongSaltLength, |
[MinSaltLength, MaxSaltLength]); |
// This automatically "adds" the required #0 terminator at the end of the password |
SetLength(PwdData, DataSize + 1); |
Move(Data, PwdData[0], DataSize); |
EksBlowfishSetup(PwdData, DataSize + 1); |
Move(ctext, FDigest[0], Length(ctext)); |
// Encrypt the magic initialisation text 64 times using ECB mode |
for i := 1 to 64 do |
begin |
BF_Encrypt(PBFBlock(@FDigest[ 0])^, PBFBlock(@FDigest[ 0])^); |
BF_Encrypt(PBFBlock(@FDigest[ 8])^, PBFBlock(@FDigest[ 8])^); |
BF_Encrypt(PBFBlock(@FDigest[16])^, PBFBlock(@FDigest[16])^); |
end; |
end; |
procedure THash_BCrypt.EksBlowfishSetup(var Password : TBytes; |
PasswordSize : Integer); |
var |
i, rounds: UInt32; |
const |
zero: TBytes = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; |
begin |
// number of rounds = 2^cost, loop includes 0 |
if (FCost = 31) then |
rounds := MaxLongint |
else |
rounds := (Int32(1) shl FCost) - 1; |
// Just copy the boxes into the context |
ExpandKey(FSalt, Password, PasswordSize); |
// This is the time consuming part |
for i := rounds downto 0 do |
begin |
ExpandKey(zero, Password, PasswordSize); |
ExpandKey(zero, FSalt, 16); |
end; |
end; |
procedure THash_BCrypt.Expandkey(Salt : TBytes; |
var Password : TBytes; |
PasswordSize : Integer); |
type |
TByteArray72 = packed array[0..71] of UInt8; |
var |
i,j,k,h : Integer; |
KL : UInt32; |
tmp : TBFBlock; |
KBP : ^TByteArray72; |
begin |
KBP := @Password[0]; |
// Text explanations and comments are from the N.Provos & D.Mazieres paper. |
// ExpandKey(state,salt,key) modifies the P-Array and S-boxes based on the |
// value of the 128-bit salt and the variable length key. First XOR all the |
// subkeys in the P-array with the encryption key. The first 32 bits of the |
// key are XORed with P1, the next 32 bits with P2, and so on. The key is |
// viewed as being cyclic; when the process reaches the end of the key, it |
// starts reusing bits from the beginning to XOR with subkeys. |
// WE: Same as standard key part except that PArray[i] is used for _bf_p[i] |
k := 0; |
for i := 0 to 17 do |
begin |
KL := 0; |
for j:=0 to 3 do |
begin |
KL := (KL shl 8) or KBP^[k]; |
inc(k); |
if (k = PasswordSize) then |
k := 0; |
end; |
FContext.PArray[i] := FContext.PArray[i] xor KL; |
end; |
// Subsequently, ExpandKey blowfish-encrypts the first 64 bits of |
// its salt argument using the current state of the key schedule. |
BF_Encrypt(PBFBlock(@salt[0])^, tmp); |
// The resulting ciphertext replaces subkeys P_1 and P_2. |
FContext.PArray[0] := SwapUInt32(TBF2Long(tmp).L); |
FContext.PArray[1] := SwapUInt32(TBF2Long(tmp).R); |
// That same ciphertext is also XORed with the second 64-bits of |
// salt, and the result encrypted with the new state of the key |
// schedule. The output of the second encryption replaces subkeys |
// P_3 and P_4. It is also XORed with the first 64-bits of salt |
// and encrypted to replace P_5 and P_6. The process continues, |
// alternating between the first and second 64 bits salt. |
h := 8; |
for i := 1 to 8 do |
begin |
BF_XorBlock(tmp, PBFBlock(@Salt[h])^, tmp); |
h := h xor 8; |
BF_Encrypt(tmp, tmp); |
FContext.PArray[2*i] := SwapUInt32(TBF2Long(tmp).L); |
FContext.PArray[2*i+1] := SwapUInt32(TBF2Long(tmp).R); |
end; |
// When ExpandKey finishes replacing entries in the P-Array, it continues |
// on replacing S-box entries two at a time. After replacing the last two |
// entries of the last S-box, ExpandKey returns the new key schedule. |
for j := 0 to 3 do |
begin |
for i := 0 to 127 do |
begin |
BF_XorBlock(tmp, PBFBlock(@Salt[h])^, tmp); |
h := h xor 8; |
BF_Encrypt(tmp, tmp); |
FContext.SBox[j, 2*i] := SwapUInt32(TBF2Long(tmp).L); |
FContext.SBox[j, 2*i+1] := SwapUInt32(TBF2Long(tmp).R); |
end; |
end; |
end; |
function THash_BCrypt.GetCryptHash(Password : TBytes; |
const Params : string; |
const Salt : TBytes; |
Format : TDECFormatClass): string; |
var |
Hash : THash_BCrypt; |
begin |
Hash := THash_BCrypt.Create; |
try |
Hash.Cost := StrToInt(string(Params)); |
Hash.Salt := Salt; |
// BCrypt leaves off the $ in front of the actual password hash value |
Result := TEncoding.ASCII.GetString(Format.Encode(Hash.CalcBytes(Password))); |
finally |
Hash.Free; |
end; |
end; |
class function THash_BCrypt.GetCryptID: string; |
begin |
Result := '$2a'; |
end; |
function THash_BCrypt.GetCryptParams(const Params : string; |
Format : TDECFormatClass): string; |
begin |
Result := Params; |
if (Length(Result) < 2) then |
Result := '0' + Result; |
Result := '$' + Result; |
end; |
function THash_BCrypt.IsValidPassword(Password : TBytes; |
const CryptData : string; |
Format: TDECFormatClass): Boolean; |
var |
SplittedCryptData : TBCryptBSDData; |
Hash : string; |
begin |
Result := false; |
if (Length(CryptData) = 60) then |
begin |
if SplitTestVector(CryptData, SplittedCryptData) then |
begin |
// Is the CryptData for this algorithm? |
if '$' + SplittedCryptData.ID <> GetCryptID then |
exit; |
Hash := GetDigestInCryptFormat(Password, |
SplittedCryptData.Cost, |
SplittedCryptData.Salt, |
False, |
Format); |
Result := Hash = CryptData; |
end; |
end; |
end; |
//function THash_BCrypt.IsValidPassword(const Password : string; |
// const CryptData : string; |
// Format : TDECFormatClass): Boolean; |
//var |
// SplittedCryptData : TBCryptBSDData; |
// Hash : string; |
//begin |
// Result := false; |
// |
// if (Length(CryptData) = 60) then |
// begin |
// if SplitTestVector(CryptData, SplittedCryptData) then |
// begin |
// // Is the CryptData for this algorithm? |
// if '$' + SplittedCryptData.ID <> GetCryptID then |
// exit; |
// |
// Hash := GetDigestInCryptFormat(Password, |
// SplittedCryptData.Cost, |
// SplittedCryptData.Salt, |
// False, |
// Format); |
// |
// Result := Hash = CryptData; |
// end; |
// end; |
//end; |
procedure THash_BCrypt.BF_Encrypt(const BI: TBFBlock; var BO: TBFBlock); |
var |
xl, xr : UInt32; |
pp : ^UInt32; |
i : integer; |
begin |
xl := SwapUInt32(TBF2Long(BI).L) xor FContext.PArray[0]; |
xr := SwapUInt32(TBF2Long(BI).R); |
pp := @FContext.PArray[1]; |
{$Q-} |
// 16 rounds = 8 double rounds without swapping |
for i := 1 to 8 do |
begin |
{$IFOPT Q+}The following code requires overflow checks being off! |
If the compiler complains do a clean on the main source project |
and recompile it!{$ENDIF} |
xr := xr xor pp^ xor (FContext.SBox[0][xl shr 24 ] + |
FContext.SBox[1][xl shr 16 and $ff] xor |
FContext.SBox[2][xl shr 8 and $ff] + |
FContext.SBox[3][xl and $ff]); |
inc(pp); |
xl := xl xor pp^ xor (FContext.SBox[0][xr shr 24 ] + |
FContext.SBox[1][xr shr 16 and $ff] xor |
FContext.SBox[2][xr shr 8 and $ff] + |
FContext.SBox[3][xr and $ff]); |
inc(pp); |
end; |
{$IFDEF RESTORE_OVERFLOWCHECKS}{$Q+}{$ENDIF} |
TBF2Long(BO).R := SwapUInt32(xl); |
TBF2Long(BO).L := SwapUInt32(xr xor pp^); |
end; |
procedure THash_BCrypt.BF_XorBlock(const B1, B2: TBFBlock; var B3: TBFBlock); |
begin |
TBF2Long(B3).L := TBF2Long(B1).L xor TBF2Long(B2).L; |
TBF2Long(B3).R := TBF2Long(B1).R xor TBF2Long(B2).R; |
end; |
constructor THash_BCrypt.Create; |
begin |
inherited; |
FCost := 10; // must be specified by the user, but better init with a |
// fixed value instead of no initialization at all. |
end; |
function THash_BCrypt.Digest: PUInt8Array; |
begin |
Result := @FDigest; |
end; |
class function THash_BCrypt.DigestSize: UInt32; |
begin |
// Should have been 192 bit = 24 byte, but original imnplementation had a flaw |
// not returning the last byte which has been kept instead of fixing it. |
Result := 23; |
end; |
procedure THash_BCrypt.DoDone; |
begin |
ProtectBuffer(FContext.PArray, SizeOf(FContext.PArray)); |
ProtectBuffer(FContext.IV, SizeOf(FContext.IV)); |
ProtectBuffer(FContext.buf, SizeOf(FContext.buf)); |
inherited; |
end; |
procedure THash_BCrypt.DoInit; |
begin |
FillChar(FDigest, SizeOf(FDigest), 0); |
FillChar(FContext, SizeOf(FContext), 0); |
FContext.SBox := Blowfish_Data; |
FContext.PArray := Blowfish_Key; |
end; |
procedure THash_BCrypt.DoTransform(Buffer: PUInt32Array); |
begin |
// Empty on purpose, as bcrypt needs to know the input length. Thus calculation |
// is done directly in method Calc. |
end; |
function THash_BCrypt.MaxCost: UInt8; |
begin |
Result := 31; |
end; |
class function THash_BCrypt.MaxPasswordLength: UInt8; |
begin |
Result := 72; |
end; |
function THash_BCrypt.MaxSaltLength: UInt8; |
begin |
Result := 16; |
end; |
function THash_BCrypt.MinCost: UInt8; |
begin |
Result := 4; |
end; |
function THash_BCrypt.MinSaltLength: UInt8; |
begin |
Result := 16; |
end; |
procedure THash_BCrypt.SetCost(const Value: UInt8); |
begin |
if (Value in [MinCost..MaxCost]) then |
FCost := Value |
else |
raise EDECHashException.CreateFmt(sCostFactorInvalid, [MinCost, MaxCost]); |
end; |
function THash_BCrypt.SplitTestVector(const Vector : string; |
var SplittedData : TBCryptBSDData): Boolean; |
var |
Parts : TArray<string>; |
begin |
Result := false; |
Parts := Vector.Split(['$'], TStringSplitOptions.ExcludeEmpty); |
if (Length(Parts) = 3) then |
begin |
SplittedData.ID := Parts[0]; |
SplittedData.Cost := Copy(Parts[1], Low(Parts[1]), Length(Parts[1])); |
SplittedData.Salt := Copy(Parts[2], Low(Parts[2]), 22); |
Result := true; |
end; |
end; |
{$IFDEF RESTORE_RANGECHECKS}{$R+}{$ENDIF} |
{$IFDEF RESTORE_OVERFLOWCHECKS}{$Q+}{$ENDIF} |
initialization |
// Define the has returned by ValidHash if passing nil as parameter |
SetDefaultHashClass(THash_SHA256); |
{$IFNDEF ManualRegisterHashClasses} |
THash_MD2.RegisterClass(TDECHash.ClassList); |
THash_MD4.RegisterClass(TDECHash.ClassList); |
THash_MD5.RegisterClass(TDECHash.ClassList); |
THash_RipeMD128.RegisterClass(TDECHash.ClassList); |
THash_RipeMD160.RegisterClass(TDECHash.ClassList); |
THash_RipeMD256.RegisterClass(TDECHash.ClassList); |
THash_RipeMD320.RegisterClass(TDECHash.ClassList); |
THash_SHA0.RegisterClass(TDECHash.ClassList); |
THash_SHA1.RegisterClass(TDECHash.ClassList); |
THash_SHA224.RegisterClass(TDECHash.ClassList); |
THash_SHA256.RegisterClass(TDECHash.ClassList); |
THash_SHA384.RegisterClass(TDECHash.ClassList); |
THash_SHA512.RegisterClass(TDECHash.ClassList); |
THash_SHA3_224.RegisterClass(TDECHash.ClassList); |
THash_SHA3_256.RegisterClass(TDECHash.ClassList); |
THash_SHA3_384.RegisterClass(TDECHash.ClassList); |
THash_SHA3_512.RegisterClass(TDECHash.ClassList); |
THash_Keccak_224.RegisterClass(TDECHash.ClassList); |
THash_Keccak_256.RegisterClass(TDECHash.ClassList); |
THash_Keccak_384.RegisterClass(TDECHash.ClassList); |
THash_Keccak_512.RegisterClass(TDECHash.ClassList); |
THash_Shake128.RegisterClass(TDECHash.ClassList); |
THash_Shake256.RegisterClass(TDECHash.ClassList); |
THash_Haval128.RegisterClass(TDECHash.ClassList); |
THash_Haval160.RegisterClass(TDECHash.ClassList); |
THash_Haval192.RegisterClass(TDECHash.ClassList); |
THash_Haval224.RegisterClass(TDECHash.ClassList); |
THash_Haval256.RegisterClass(TDECHash.ClassList); |
THash_Tiger.RegisterClass(TDECHash.ClassList); |
THash_Panama.RegisterClass(TDECHash.ClassList); |
{$IFDEF OLD_WHIRLPOOL_NAMES} |
THash_Whirlpool.RegisterClass(TDECHash.ClassList); |
THash_Whirlpool1.RegisterClass(TDECHash.ClassList); |
THash_Whirlpool1New.RegisterClass(TDECHash.ClassList); |
{$ELSE} |
THash_Whirlpool1.RegisterClass(TDECHash.ClassList); |
{$ENDIF} |
THash_Whirlpool0.RegisterClass(TDECHash.ClassList); |
THash_WhirlpoolT.RegisterClass(TDECHash.ClassList); |
THash_Square.RegisterClass(TDECHash.ClassList); |
THash_Snefru128.RegisterClass(TDECHash.ClassList); |
THash_Snefru256.RegisterClass(TDECHash.ClassList); |
THash_Sapphire.RegisterClass(TDECHash.ClassList); |
THash_BCrypt.RegisterClass(TDECHash.ClassList); |
{$IFDEF OLD_SHA_NAME} |
THash_SHA.RegisterClass(TDECHash.ClassList); |
{$ENDIF} |
{$ENDIF} |
finalization |
// No need to unregister the hash classes, as the list is being freed |
// in finalization of DECHashBase unit |
end. |
/trunk/Decoder5/VCL_DEC/DECHash.sha3_mmx.inc |
---|
0,0 → 1,377 |
{***************************************************************************** |
The DEC team (see file NOTICE.txt) licenses this file |
to you under the Apache License, Version 2.0 (the |
"License"); you may not use this file except in compliance |
with the License. A copy of this licence is found in the root directory of |
this project in the file LICENCE.txt or alternatively 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. |
*****************************************************************************} |
{**********************************************************************} |
{ } |
{ "The contents of this file are subject to the Mozilla Public } |
{ License Version 1.1 (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.mozilla.org/MPL/ } |
{ } |
{ Software distributed under the License is distributed on an } |
{ "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express } |
{ or implied. See the License for the specific language } |
{ governing rights and limitations under the License. } |
{ } |
{ Copyright Creative IT. } |
{ Current maintainer: Eric Grange } |
{ } |
{**********************************************************************} |
// The original source file can be found here: |
// https://bitbucket.org/egrange/dwscript/src |
add edx, 128 |
add eax, 128 |
movq mm1, [edx-120] |
movq mm4, [edx-96] |
movq mm3, [edx-104] |
pxor mm1, [edx-80] |
movq mm5, [edx+16] |
pxor mm1, [edx] |
movq mm2, [edx-112] |
pxor mm1, [edx+40] |
pxor mm1, [edx-40] |
movq mm0, [edx-128] |
movq mm6, mm1 |
pxor mm4, [edx-56] |
movq [ecx+8], mm1 |
psrlq mm6, 63 |
pxor mm4, [edx+24] |
pxor mm4, [edx+64] |
pxor mm4, [edx-16] |
psllq mm1, 1 |
pxor mm2, [edx+48] |
por mm1, mm6 |
movq mm6, [edx-88] |
pxor mm1, mm4 |
pxor mm2, [edx-32] |
pxor mm2, [edx-72] |
pxor mm6, mm1 |
movq mm7, mm6 |
psrlq mm7, 28 |
psllq mm6, 36 |
por mm6, mm7 |
pxor mm2, [edx+8] |
movq [eax], mm6 |
movq mm6, [edx+32] |
movq mm7, mm4 |
psrlq mm7, 63 |
psllq mm4, 1 |
pxor mm0, mm6 |
por mm4, mm7 |
pxor mm4, mm2 |
pxor mm5, mm4 |
movq mm7, mm5 |
pxor mm0, [edx-8] |
psllq mm5, 21 |
psrlq mm7, 43 |
pxor mm6, mm1 |
por mm5, mm7 |
movq [eax-104], mm5 |
movq mm5, [edx-48] |
pxor mm0, mm5 |
movq mm7, mm6 |
psrlq mm7, 46 |
psllq mm6, 18 |
por mm6, mm7 |
movq [eax-16], mm6 |
movq mm6, [edx+56] |
pxor mm5, mm1 |
movq mm7, mm5 |
pxor mm3, mm6 |
psllq mm5, 3 |
psrlq mm7, 61 |
pxor mm3, [edx+16] |
pxor mm3, [edx-24] |
por mm5, mm7 |
pxor mm6, mm4 |
pxor mm0, [edx-88] |
movq mm7, mm6 |
psrlq mm7, 8 |
movq [eax-72], mm5 |
movq mm5, mm2 |
psllq mm2, 1 |
psllq mm6, 56 |
psrlq mm5, 63 |
por mm6, mm7 |
por mm2, mm5 |
pxor mm2, mm0 |
movq [eax+24], mm6 |
movq mm5, [edx-120] |
movq mm6, mm0 |
psllq mm0, 1 |
pxor mm5, mm2 |
pxor mm3, [edx-64] |
psrlq mm6, 63 |
por mm0, mm6 |
movq mm6, [edx-64] |
movq mm7, mm5 |
psllq mm5, 1 |
psrlq mm7, 63 |
pxor mm6, mm4 |
por mm5, mm7 |
pxor mm0, mm3 |
movq mm7, mm6 |
movq [eax-48], mm5 |
movq mm5, [edx] |
psllq mm6, 55 |
psrlq mm7, 9 |
por mm6, mm7 |
movq [eax+40], mm6 |
movq mm6, [edx-40] |
pxor mm5, mm2 |
movq mm7, mm5 |
psllq mm5, 45 |
psrlq mm7, 19 |
pxor mm6, mm2 |
por mm5, mm7 |
movq [eax-64], mm5 |
movq mm5, [edx+40] |
movq mm7, mm6 |
pxor mm5, mm2 |
psllq mm6, 10 |
psrlq mm7, 54 |
por mm6, mm7 |
movq [eax+8], mm6 |
movq mm6, [edx-96] |
movq mm7, mm3 |
psrlq mm7, 63 |
psllq mm3, 1 |
por mm3, mm7 |
movq mm7, mm5 |
psllq mm5, 2 |
psrlq mm7, 62 |
por mm5, mm7 |
movq [eax+64], mm5 |
movq mm5, [edx+24] |
pxor mm6, mm0 |
movq mm7, mm6 |
psrlq mm7, 37 |
psllq mm6, 27 |
por mm6, mm7 |
movq [eax-8], mm6 |
pxor mm5, mm0 |
movq mm6, [edx-16] |
movq mm7, mm5 |
psllq mm5, 8 |
pxor mm3, [ecx+8] |
psrlq mm7, 56 |
pxor mm6, mm0 |
por mm5, mm7 |
movq [eax-24], mm5 |
movq mm7, mm6 |
psllq mm6, 39 |
movq mm5, [edx-112] |
psrlq mm7, 25 |
por mm6, mm7 |
movq [eax+48], mm6 |
movq mm6, [edx-24] |
pxor mm5, mm3 |
movq mm7, mm5 |
psrlq mm7, 2 |
psllq mm5, 62 |
por mm5, mm7 |
movq [eax+32], mm5 |
movq mm5, [edx-104] |
pxor mm6, mm4 |
movq mm7, mm6 |
psrlq mm7, 39 |
psllq mm6, 25 |
por mm6, mm7 |
pxor mm5, mm4 |
movq [eax-32], mm6 |
movq mm6, [edx-128] |
pxor mm6, mm1 |
movq mm4, mm6 |
movq [eax-128], mm6 |
movq mm4, mm6 |
movq mm6, [edx-8] |
movq mm7, mm5 |
psrlq mm7, 36 |
psllq mm5, 28 |
pxor mm6, mm1 |
por mm5, mm7 |
movq mm7, mm6 |
psrlq mm7, 23 |
movq mm1, mm5 |
movq [eax-88], mm5 |
movq mm5, [edx-56] |
pxor mm5, mm0 |
psllq mm6, 41 |
por mm6, mm7 |
movq [eax+56], mm6 |
movq mm6, [edx+48] |
pxor mm6, mm3 |
movq mm7, mm5 |
psrlq mm7, 44 |
psllq mm5, 20 |
por mm5, mm7 |
movq [eax-80], mm5 |
pandn mm1, mm5 |
movq mm5, [edx-32] |
movq mm7, mm6 |
psrlq mm7, 3 |
psllq mm6, 61 |
por mm6, mm7 |
pxor mm1, mm6 |
movq [eax-56], mm6 |
movq mm6, [edx+8] |
movq [edx-56], mm1 |
movq mm1, [eax-112] |
pxor mm5, mm3 |
movq mm7, mm5 |
psllq mm5, 43 |
psrlq mm7, 21 |
pxor mm6, mm3 |
por mm5, mm7 |
movq mm1, mm5 |
movq mm5, [edx-80] |
pxor mm5, mm2 |
movq mm2, [eax-104] |
movq mm7, mm6 |
psrlq mm7, 49 |
psllq mm6, 15 |
por mm6, mm7 |
movq [eax+16], mm6 |
movq mm6, [edx+64] |
movq [eax-96], mm6 |
movq mm7, mm5 |
psrlq mm7, 20 |
psllq mm5, 44 |
pxor mm6, mm0 |
por mm5, mm7 |
movq mm7, mm6 |
psrlq mm7, 50 |
psllq mm6, 14 |
por mm6, mm7 |
pandn mm2, mm6 |
movq mm0, mm5 |
pandn mm0, mm1 |
pxor mm2, mm1 |
pandn mm1, [eax-104] |
movq [edx-112], mm2 |
pandn mm4, mm5 |
pxor mm1, mm5 |
movq [eax-120], mm5 |
movq mm2, [eax-40] |
movq [edx-120], mm1 |
movq mm5, [edx-72] |
movq mm1, [eax-64] |
pxor mm4, mm6 |
movq [edx-96], mm4 |
pxor mm5, mm3 |
movq mm4, [eax-88] |
movq mm7, mm5 |
movq mm3, mm6 |
pxor mm0, [eax-128] |
movq [edx-128], mm0 |
movq mm6, [eax-72] |
psllq mm5, 6 |
psrlq mm7, 58 |
movq mm0, [eax-56] |
por mm5, mm7 |
movq mm2, mm5 |
movq mm5, [eax-80] |
movq mm7, mm1 |
pandn mm7, mm0 |
pxor mm7, mm6 |
movq [edx-72], mm7 |
movq mm7, [eax-72] |
pandn mm6, mm1 |
pxor mm6, mm5 |
pandn mm0, mm4 |
pandn mm5, mm7 |
movq mm7, [eax] |
pxor mm5, mm4 |
movq mm4, [eax-24] |
movq [edx-80], mm6 |
movq mm6, [eax-48] |
movq [edx-88], mm5 |
movq mm5, mm1 |
movq mm1, [eax-16] |
pxor mm0, mm5 |
movq mm5, mm1 |
pandn mm3, [eax-128] |
pxor mm3, [eax-104] |
movq [edx-64], mm0 |
movq mm0, [eax+8] |
movq [edx-104], mm3 |
movq mm3, [eax-32] |
pandn mm6, mm2 |
pxor mm6, mm5 |
movq [edx-16], mm6 |
movq mm6, [eax+56] |
pandn mm3, mm4 |
pxor mm3, mm2 |
movq [edx-40], mm3 |
movq mm3, [eax-32] |
pandn mm5, [eax-48] |
pxor mm5, mm4 |
movq [edx-24], mm5 |
pandn mm7, mm0 |
movq mm5, [eax+16] |
pandn mm4, mm1 |
pxor mm4, mm3 |
movq [edx-32], mm4 |
movq mm4, [eax+40] |
movq mm1, mm5 |
movq mm5, [eax+48] |
pandn mm5, mm6 |
pxor mm5, mm4 |
pandn mm2, mm3 |
movq mm3, [eax-8] |
movq [edx+40], mm5 |
movq mm5, [eax+24] |
pxor mm7, mm3 |
movq [edx-8], mm7 |
movq mm7, [eax+64] |
pxor mm2, [eax-48] |
movq [edx-48], mm2 |
movq mm2, mm5 |
pandn mm2, mm3 |
pxor mm2, mm1 |
movq [edx+16], mm2 |
pandn mm3, [eax] |
movq mm2, mm5 |
movq mm5, [eax+48] |
pandn mm6, mm7 |
pxor mm6, mm5 |
movq [edx+48], mm6 |
pandn mm1, mm2 |
movq mm6, [eax+32] |
pxor mm1, mm0 |
pxor mm3, mm2 |
movq [edx+24], mm3 |
pandn mm0, [eax+16] |
pxor mm0, [eax] |
movq mm3, mm4 |
movq [edx+8], mm1 |
movq [edx], mm0 |
movq mm0, mm6 |
movq mm1, [eax+56] |
pandn mm4, mm5 |
pxor mm4, mm0 |
pandn mm0, mm3 |
pxor mm0, mm7 |
movq [edx+32], mm4 |
pandn mm7, mm6 |
pxor mm7, mm1 |
movq [edx+56], mm7 |
movq [edx+64], mm0 |
/trunk/Decoder5/VCL_DEC/DECHash.sha3_x64.inc |
---|
0,0 → 1,318 |
{***************************************************************************** |
The DEC team (see file NOTICE.txt) licenses this file |
to you under the Apache License, Version 2.0 (the |
"License"); you may not use this file except in compliance |
with the License. A copy of this licence is found in the root directory of |
this project in the file LICENCE.txt or alternatively 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. |
*****************************************************************************} |
{**********************************************************************} |
{ } |
{ "The contents of this file are subject to the Mozilla Public } |
{ License Version 1.1 (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.mozilla.org/MPL/ } |
{ } |
{ Software distributed under the License is distributed on an } |
{ "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express } |
{ or implied. See the License for the specific language } |
{ governing rights and limitations under the License. } |
{ } |
{ Copyright Creative IT. } |
{ Current maintainer: Eric Grange } |
{ } |
{**********************************************************************} |
// The original source file can be found here: |
// https://bitbucket.org/egrange/dwscript/src |
push r12 |
push r13 |
push r14 |
add rdx, 128 |
add rcx, 128 |
// Theta |
mov rax, [rdx-128] |
xor rax, [rdx-88] |
xor rax, [rdx-48] |
xor rax, [rdx-8] |
xor rax, [rdx+32] |
mov [r8], rax |
mov rax, [rdx-120] |
xor rax, [rdx-80] |
xor rax, [rdx-40] |
xor rax, [rdx] |
xor rax, [rdx+40] |
mov [r8+8], rax |
mov rax, [rdx-112] |
xor rax, [rdx-72] |
xor rax, [rdx-32] |
xor rax, [rdx+8] |
xor rax, [rdx+48] |
mov [r8+16], rax |
mov rax, [rdx-104] |
xor rax, [rdx-64] |
xor rax, [rdx-24] |
xor rax, [rdx+16] |
xor rax, [rdx+56] |
mov [r8+24], rax |
mov rax, [rdx-96] |
xor rax, [rdx-56] |
xor rax, [rdx-16] |
xor rax, [rdx+24] |
xor rax, [rdx+64] |
mov [r8+32], rax |
mov r10, [r8] |
rol r10, 1 |
xor r10, [r8+24] |
mov r11, [r8+8] |
rol r11, 1 |
xor r11, [r8+32] |
mov r12, [r8+16] |
rol r12, 1 |
xor r12, [r8] |
mov r13, [r8+24] |
rol r13, 1 |
xor r13, [r8+8] |
mov r14, [r8+32] |
rol r14, 1 |
xor r14, [r8+16] |
// Rho Pi |
mov rax, [rdx-128] |
xor rax, r11 |
mov [rcx-128], rax |
mov rax, [rdx-80] |
xor rax, r12 |
rol rax, 44 |
mov [rcx-120], rax |
mov rax, [rdx-32] |
xor rax, r13 |
rol rax, 43 |
mov [rcx-112], rax |
mov rax, [rdx+16] |
xor rax, r14 |
rol rax, 21 |
mov [rcx-104], rax |
mov rax, [rdx+64] |
xor rax, r10 |
rol rax, 14 |
mov [rcx-96], rax |
mov rax, [rdx-104] |
xor rax, r14 |
rol rax, 28 |
mov [rcx-88], rax |
mov rax, [rdx-56] |
xor rax, r10 |
rol rax, 20 |
mov [rcx-80], rax |
mov rax, [rdx-48] |
xor rax, r11 |
rol rax, 3 |
mov [rcx-72], rax |
mov rax, [rdx] |
xor rax, r12 |
rol rax, 45 |
mov [rcx-64], rax |
mov rax, [rdx+48] |
xor rax, r13 |
rol rax, 61 |
mov [rcx-56], rax |
mov rax, [rdx-120] |
xor rax, r12 |
rol rax, 1 |
mov [rcx-48], rax |
mov rax, [rdx-72] |
xor rax, r13 |
rol rax, 6 |
mov [rcx-40], rax |
mov rax, [rdx-24] |
xor rax, r14 |
rol rax, 25 |
mov [rcx-32], rax |
mov rax, [rdx+24] |
xor rax, r10 |
rol rax, 8 |
mov [rcx-24], rax |
mov rax, [rdx+32] |
xor rax, r11 |
rol rax, 18 |
mov [rcx-16], rax |
mov rax, [rdx-96] |
xor rax, r10 |
rol rax, 27 |
mov [rcx-8], rax |
mov rax, [rdx-88] |
xor rax, r11 |
rol rax, 36 |
mov [rcx], rax |
mov rax, [rdx-40] |
xor rax, r12 |
rol rax, 10 |
mov [rcx+8], rax |
mov rax, [rdx+8] |
xor rax, r13 |
rol rax, 15 |
mov [rcx+16], rax |
mov rax, [rdx+56] |
xor rax, r14 |
rol rax, 56 |
mov [rcx+24], rax |
mov rax, [rdx-112] |
xor rax, r13 |
rol rax, 62 |
mov [rcx+32], rax |
mov rax, [rdx-64] |
xor rax, r14 |
rol rax, 55 |
mov [rcx+40], rax |
mov rax, [rdx-16] |
xor rax, r10 |
rol rax, 39 |
mov [rcx+48], rax |
mov rax, [rdx-8] |
xor rax, r11 |
rol rax, 41 |
mov [rcx+56], rax |
mov rax, [rdx+40] |
xor rax, r12 |
rol rax, 2 |
mov [rcx+64], rax |
// Chi |
mov rax, [rcx-120] |
not rax |
and rax, [rcx-112] |
xor rax, [rcx-128] |
mov [rdx-128], rax |
mov rax, [rcx-112] |
not rax |
and rax, [rcx-104] |
xor rax, [rcx-120] |
mov [rdx-120], rax |
mov rax, [rcx-104] |
not rax |
and rax, [rcx-96] |
xor rax, [rcx-112] |
mov [rdx-112], rax |
mov rax, [rcx-96] |
not rax |
and rax, [rcx-128] |
xor rax, [rcx-104] |
mov [rdx-104], rax |
mov rax, [rcx-128] |
not rax |
and rax, [rcx-120] |
xor rax, [rcx-96] |
mov [rdx-96], rax |
mov rax, [rcx-80] |
not rax |
and rax, [rcx-72] |
xor rax, [rcx-88] |
mov [rdx-88], rax |
mov rax, [rcx-72] |
not rax |
and rax, [rcx-64] |
xor rax, [rcx-80] |
mov [rdx-80], rax |
mov rax, [rcx-64] |
not rax |
and rax, [rcx-56] |
xor rax, [rcx-72] |
mov [rdx-72], rax |
mov rax, [rcx-56] |
not rax |
and rax, [rcx-88] |
xor rax, [rcx-64] |
mov [rdx-64], rax |
mov rax, [rcx-88] |
not rax |
and rax, [rcx-80] |
xor rax, [rcx-56] |
mov [rdx-56], rax |
mov rax, [rcx-40] |
not rax |
and rax, [rcx-32] |
xor rax, [rcx-48] |
mov [rdx-48], rax |
mov rax, [rcx-32] |
not rax |
and rax, [rcx-24] |
xor rax, [rcx-40] |
mov [rdx-40], rax |
mov rax, [rcx-24] |
not rax |
and rax, [rcx-16] |
xor rax, [rcx-32] |
mov [rdx-32], rax |
mov rax, [rcx-16] |
not rax |
and rax, [rcx-48] |
xor rax, [rcx-24] |
mov [rdx-24], rax |
mov rax, [rcx-48] |
not rax |
and rax, [rcx-40] |
xor rax, [rcx-16] |
mov [rdx-16], rax |
mov rax, [rcx] |
not rax |
and rax, [rcx+8] |
xor rax, [rcx-8] |
mov [rdx-8], rax |
mov rax, [rcx+8] |
not rax |
and rax, [rcx+16] |
xor rax, [rcx] |
mov [rdx], rax |
mov rax, [rcx+16] |
not rax |
and rax, [rcx+24] |
xor rax, [rcx+8] |
mov [rdx+8], rax |
mov rax, [rcx+24] |
not rax |
and rax, [rcx-8] |
xor rax, [rcx+16] |
mov [rdx+16], rax |
mov rax, [rcx-8] |
not rax |
and rax, [rcx] |
xor rax, [rcx+24] |
mov [rdx+24], rax |
mov rax, [rcx+40] |
not rax |
and rax, [rcx+48] |
xor rax, [rcx+32] |
mov [rdx+32], rax |
mov rax, [rcx+48] |
not rax |
and rax, [rcx+56] |
xor rax, [rcx+40] |
mov [rdx+40], rax |
mov rax, [rcx+56] |
not rax |
and rax, [rcx+64] |
xor rax, [rcx+48] |
mov [rdx+48], rax |
mov rax, [rcx+64] |
not rax |
and rax, [rcx+32] |
xor rax, [rcx+56] |
mov [rdx+56], rax |
mov rax, [rcx+32] |
not rax |
and rax, [rcx+40] |
xor rax, [rcx+64] |
mov [rdx+64], rax |
pop r14 |
pop r13 |
pop r12 |
/trunk/Decoder5/VCL_DEC/DECHashAuthentication.pas |
---|
0,0 → 1,1659 |
{***************************************************************************** |
The DEC team (see file NOTICE.txt) licenses this file |
to you under the Apache License, Version 2.0 (the |
"License"); you may not use this file except in compliance |
with the License. A copy of this licence is found in the root directory |
of this project in the file LICENCE.txt or alternatively 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. |
*****************************************************************************} |
/// <summary> |
/// Unit containing all the KDF, MGF, HMAC and PBKDF2 algorithms |
/// </summary> |
unit DECHashAuthentication; |
{$INCLUDE DECOptions.inc} |
interface |
uses |
{$IFDEF FPC} |
SysUtils, Classes, |
{$ELSE} |
System.SysUtils, System.Classes, Generics.Collections, |
{$ENDIF} |
DECBaseClass, DECHashBase, DECHashInterface, DECTypes , DECFormatBase; |
type |
/// <summary> |
/// Type of the KDF variant |
/// </summary> |
TKDFType = (ktKDF1, ktKDF2, ktKDF3); |
/// <summary> |
/// Meta class for the class containing the password hash specific properties |
/// </summary> |
TDECPasswordHashClass = class of TDECPasswordHash; |
/// <summary> |
/// Class containing all the KDF, MGF, HMAC and PBKDF2 algorithms |
/// </summary> |
TDECHashAuthentication = class(TDECHash) |
strict private |
/// <summary> |
/// Key deviation algorithm to derrive keys from other keys. |
/// IEEE P1363 Working Group, ISO 18033-2:2004 |
/// This is either KDF1 or KDF2 depending on KDFType |
/// </summary> |
/// <param name="Data"> |
/// Source data from which the new key shall be derrived. |
/// </param> |
/// <param name="DataSize"> |
/// Size in bytes of the source data passed. |
/// </param> |
/// <param name="Seed"> |
/// Start value for pseudo random number generator |
/// </param> |
/// <param name="SeedSize"> |
/// Size of the seed in byte. |
/// </param> |
/// <param name="MaskSize"> |
/// Size of the generated output in byte |
/// </param> |
/// <param name="KDFType"> |
/// Type of the algorithm: 1 = KDF1, 2 = KDF2 and 3 = KDF 3 |
/// </param> |
/// <returns> |
/// Returns the new derrived key. |
/// </returns> |
class function KDFInternal(const Data; DataSize: Integer; const Seed; |
SeedSize, MaskSize: Integer; |
KDFType: TKDFType): TBytes; inline; |
public |
/// <summary> |
/// Detects whether the given hash class is one particularily suited |
/// for storing hashes of passwords |
/// </summary> |
/// <returns> |
/// true if it's a hash class specifically designed to store password |
/// hashes, false for ordinary hash algorithms. |
/// </returns> |
class function IsPasswordHash: Boolean; override; |
// mask generation |
/// <summary> |
/// Mask generation: generates an output based on the data given which is |
/// similar to a hash function but in contrast does not have a fixed output |
/// length. Use of a MGF is desirable in cases where a fixed-size hash |
/// would be inadequate. Examples include generating padding, producing |
/// one time pads or keystreams in symmetric key encryption, and yielding |
/// outputs for pseudorandom number generators. |
/// Indexed Mask generation function, IEEE P1363 working group |
/// equal to KDF1 except without seed. RFC 2437 PKCS #1 |
/// </summary> |
/// <param name="Data"> |
/// Data from which to generate a mask from |
/// </param> |
/// <param name="DataSize"> |
/// Size of the input data in bytes |
/// </param> |
/// <param name="MaskSize"> |
/// Size of the returned mask in bytes |
/// </param> |
/// <returns> |
/// Mask such that one cannot determine the data which had been given to |
/// generate this mask from. |
/// </returns> |
class function MGF1(const Data; DataSize, MaskSize: Integer): TBytes; overload; |
/// <summary> |
/// Mask generation: generates an output based on the data given which is |
/// similar to a hash function but incontrast does not have a fixed output |
/// length. Use of a MGF is desirable in cases where a fixed-size hash |
/// would be inadequate. Examples include generating padding, producing |
/// one time pads or keystreams in symmetric key encryption, and yielding |
/// outputs for pseudorandom number generators |
/// </summary> |
/// <param name="Data"> |
/// Data from which to generate a mask from |
/// </param> |
/// <param name="MaskSize"> |
/// Size of the returned mask in bytes |
/// </param> |
/// <returns> |
/// Mask such that one cannot determine the data which had been given to |
/// generate this mask from. |
/// </returns> |
class function MGF1(const Data: TBytes; MaskSize: Integer): TBytes; overload; |
/// <summary> |
/// Key deviation algorithm to derrive keys from other keys. |
/// IEEE P1363 Working Group, ISO 18033-2:2004 |
/// </summary> |
/// <param name="Data"> |
/// Source data from which the new key shall be derrived. |
/// </param> |
/// <param name="DataSize"> |
/// Size in bytes of the source data passed. |
/// </param> |
/// <param name="Seed"> |
/// Salt value |
/// </param> |
/// <param name="SeedSize"> |
/// Size of the seed/salt in byte. |
/// </param> |
/// <param name="MaskSize"> |
/// Size of the generated output in byte |
/// </param> |
/// <returns> |
/// Returns the new derrived key with the length specified in MaskSize. |
/// </returns> |
/// <remarks> |
/// In earlier versions there was an optional format parameter. This has |
/// been removed as this is a base class. The method might not have |
/// returned a result with the MaskSize specified, as the formatting might |
/// have had to alter this. This would have been illogical. |
/// </remarks> |
class function KDF1(const Data; DataSize: Integer; const Seed; |
SeedSize, MaskSize: Integer): TBytes; overload; |
/// <summary> |
/// Key deviation algorithm to derrive keys from other keys. |
/// IEEE P1363 Working Group, ISO 18033-2:2004 |
/// </summary> |
/// <param name="Data"> |
/// Source data from which the new key shall be derrived. |
/// </param> |
/// <param name="Seed"> |
/// Salt value |
/// </param> |
/// <param name="MaskSize"> |
/// Size of the generated output in byte |
/// </param> |
/// <returns> |
/// Returns the new derrived key with the length specified in MaskSize. |
/// </returns> |
class function KDF1(const Data, Seed: TBytes; |
MaskSize: Integer): TBytes; overload; |
/// <summary> |
/// Key deviation algorithm to derrive keys from other keys. |
/// IEEE P1363 Working Group, ISO 18033-2:2004 |
/// </summary> |
/// <param name="Data"> |
/// Source data from which the new key shall be derrived. |
/// </param> |
/// <param name="DataSize"> |
/// Size in bytes of the source data passed. |
/// </param> |
/// <param name="Seed"> |
/// Salt value |
/// </param> |
/// <param name="SeedSize"> |
/// Size of the seed/salt in byte. |
/// </param> |
/// <param name="MaskSize"> |
/// Size of the generated output in byte |
/// </param> |
/// <returns> |
/// Returns the new derrived key with the length specified in MaskSize. |
/// </returns> |
/// <remarks> |
/// In earlier versions there was an optional format parameter. This has |
/// been removed as this is a base class. The method might not have |
/// returned a result with the MaskSize specified, as the formatting might |
/// have had to alter this. This would have been illogical. |
/// </remarks> |
class function KDF2(const Data; DataSize: Integer; const Seed; |
SeedSize, MaskSize: Integer): TBytes; overload; |
/// <summary> |
/// Key deviation algorithm to derrive keys from other keys. |
/// IEEE P1363 Working Group, ISO 18033-2:2004 |
/// </summary> |
/// <param name="Data"> |
/// Source data from which the new key shall be derrived. |
/// </param> |
/// <param name="Seed"> |
/// Start value for pseudo random number generator |
/// </param> |
/// <param name="MaskSize"> |
/// Size of the generated output in byte |
/// </param> |
/// <returns> |
/// Returns the new derrived key with the length specified in MaskSize. |
/// </returns> |
class function KDF2(const Data, Seed: TBytes; |
MaskSize: Integer): TBytes; overload; |
/// <summary> |
/// Key deviation algorithm to derrive keys from other keys. |
/// </summary> |
/// <param name="Data"> |
/// Source data from which the new key shall be derrived. |
/// </param> |
/// <param name="DataSize"> |
/// Size in bytes of the source data passed. |
/// </param> |
/// <param name="Seed"> |
/// Salt value |
/// </param> |
/// <param name="SeedSize"> |
/// Size of the seed/salt in byte. |
/// </param> |
/// <param name="MaskSize"> |
/// Size of the generated output in byte |
/// </param> |
/// <returns> |
/// Returns the new derrived key with the length specified in MaskSize. |
/// </returns> |
/// <remarks> |
/// In earlier versions there was an optional format parameter. This has |
/// been removed as this is a base class. The method might not have |
/// returned a result with the MaskSize specified, as the formatting might |
/// have had to alter this. This would have been illogical. |
/// </remarks> |
class function KDF3(const Data; DataSize: Integer; const Seed; |
SeedSize, MaskSize: Integer): TBytes; overload; |
/// <summary> |
/// Key deviation algorithm to derrive keys from other keys. |
/// </summary> |
/// <param name="Data"> |
/// Source data from which the new key shall be derrived. |
/// </param> |
/// <param name="Seed"> |
/// Salt value |
/// </param> |
/// <param name="MaskSize"> |
/// Size of the generated output in byte |
/// </param> |
/// <returns> |
/// Returns the new derrived key with the length specified in MaskSize. |
/// </returns> |
class function KDF3(const Data, Seed: TBytes; |
MaskSize: Integer): TBytes; overload; |
// DEC's own KDF + MGF |
/// <summary> |
/// Key deviation algorithm to derrive keys from other keys. The alrorithm |
/// implemented by this method does not follow any official standard. |
/// </summary> |
/// <param name="Data"> |
/// Source data from which the new key shall be derrived. |
/// </param> |
/// <param name="DataSize"> |
/// Size in bytes of the source data passed. |
/// </param> |
/// <param name="Seed"> |
/// Salt value |
/// </param> |
/// <param name="SeedSize"> |
/// Size of the seed/salt in byte. |
/// </param> |
/// <param name="MaskSize"> |
/// Size of the generated output in byte |
/// </param> |
/// <param name="Index"> |
/// Optional parameter: can be used to specify a different default value |
/// for the index variable used in the algorithm. |
/// </param> |
/// <returns> |
/// Returns the new derrived key with the length specified in MaskSize. |
/// </returns> |
class function KDFx(const Data; DataSize: Integer; const Seed; |
SeedSize, MaskSize: Integer; |
Index: UInt32 = 1): TBytes; overload; |
/// <summary> |
/// Key deviation algorithm to derrive keys from other keys. |
/// </summary> |
/// <remarks> |
/// This variant of the algorithm does not follow an official standard. |
/// It has been created by the original author of DEC. |
/// </remarks> |
/// <param name="Data"> |
/// Source data from which the new key shall be derrived. |
/// </param> |
/// <param name="Seed"> |
/// Salt value |
/// </param> |
/// <param name="MaskSize"> |
/// Size of the generated output in byte |
/// </param> |
/// <param name="Index"> |
/// Optional parameter: can be used to specify a different default value |
/// for the index variable used in the algorithm. |
/// </param> |
/// <returns> |
/// Returns the new derrived key with the length specified in MaskSize. |
/// </returns> |
class function KDFx(const Data, Seed: TBytes; MaskSize: Integer; |
Index: UInt32 = 1): TBytes; overload; |
/// <summary> |
/// Mask generation: generates an output based on the data given which is |
/// similar to a hash function but incontrast does not have a fixed output |
/// length. Use of a MGF is desirable in cases where a fixed-size hash |
/// would be inadequate. Examples include generating padding, producing |
/// one time pads or keystreams in symmetric key encryption, and yielding |
/// outputs for pseudorandom number generators. |
/// </summary> |
/// <remarks> |
/// This variant of the algorithm does not follow an official standard. |
/// It has been created by the original author of DEC. |
/// </remarks> |
/// <param name="Data"> |
/// Data from which to generate a mask from |
/// </param> |
/// <param name="DataSize"> |
/// Size of the passed data in bytes |
/// </param> |
/// <param name="MaskSize"> |
/// Size of the returned mask in bytes |
/// </param> |
/// <param name="Index"> |
/// Looks like this is a salt applied to each byte of output data? |
{ TODO : Clarify this parameter } |
/// </param> |
/// <returns> |
/// Mask such that one cannot determine the data which had been given to |
/// generate this mask from. |
/// </returns> |
class function MGFx(const Data; DataSize, MaskSize: Integer; |
Index: UInt32 = 1): TBytes; overload; |
/// <summary> |
/// Mask generation: generates an output based on the data given which is |
/// similar to a hash function but incontrast does not have a fixed output |
/// length. Use of a MGF is desirable in cases where a fixed-size hash |
/// would be inadequate. Examples include generating padding, producing |
/// one time pads or keystreams in symmetric key encryption, and yielding |
/// outputs for pseudorandom number generators. |
/// </summary> |
/// <remarks> |
/// This variant of the algorithm does not follow an official standard. |
/// It has been created by the original author of DEC. |
/// </remarks> |
/// <param name="Data"> |
/// Data from which to generate a mask from |
/// </param> |
/// <param name="MaskSize"> |
/// Size of the returned mask in bytes |
/// </param> |
/// <param name="Index"> |
/// Looks like this is a salt applied to each byte of output data? |
{ TODO : Clarify this parameter } |
/// </param> |
/// <returns> |
/// Mask such that one cannot determine the data which had been given to |
/// generate this mask from. |
/// </returns> |
class function MGFx(const Data: TBytes; MaskSize: Integer; |
Index: UInt32 = 1): TBytes; overload; |
/// <summary> |
/// HMAC according to rfc2202: hash message authentication code allow to |
/// verify both the data integrity and the authenticity of a message. |
/// </summary> |
/// <param name="Key"> |
/// This is the secret key which shall not be transmitted over the line. |
/// The sender uses this key to create the resulting HMAC, transmits the |
/// text and the HMAC over the line and the receiver recalculates the HMAC |
/// based on his copy of the secret key. If his calculated HMAC equals the |
/// transfered HMAC value the message has not been tampered. |
/// </param> |
/// <param name="Text"> |
/// Text over which to calculate the HMAC |
/// </param> |
/// <returns> |
/// Calculated HMAC |
/// </returns> |
class function HMAC(const Key, Text: TBytes): TBytes; overload; |
/// <summary> |
/// HMAC according to rfc2202: hash message authentication code allow to |
/// verify both the data integrity and the authenticity of a message. |
/// </summary> |
/// <param name="Key"> |
/// This is the secret key which shall not be transmitted over the line. |
/// The sender uses this key to create the resulting HMAC, transmits the |
/// text and the HMAC over the line and the receiver recalculates the HMAC |
/// based on his copy of the secret key. If his calculated HMAC equals the |
/// transfered HMAC value the message has not been tampered. |
/// </param> |
/// <param name="Text"> |
/// Text over which to calculate the HMAC |
/// </param> |
/// <returns> |
/// Calculated HMAC |
/// </returns> |
class function HMAC(const Key, Text: RawByteString): TBytes; overload; |
/// <summary> |
/// Password based key deviation function 2 |
/// RFC 2898, PKCS #5. |
/// This can be used to create a login sheme by storing the output, |
/// number of iterations and the salt. When the user enters a password |
/// this calculation is done using the same parameters as stored for his |
/// user account and comparing the output. |
/// </summary> |
/// <param name="Password"> |
/// Password to create the deviation from |
/// </param> |
/// <param name="Salt"> |
/// Salt used to modify the password |
/// </param> |
/// <param name="Iterations"> |
/// Number of iterations to perform |
/// </param> |
/// <param name="KeyLength"> |
/// Length of the resulting key in byte |
/// </param> |
/// <returns> |
/// The calculated PBKDF2 value |
/// </returns> |
class function PBKDF2(const Password, Salt: TBytes; Iterations: Integer; |
KeyLength: Integer): TBytes; overload; |
/// <summary> |
/// Password based key deviation function 2 |
/// RFC 2898, PKCS #5. |
/// This can be used to create a login sheme by storing the output, |
/// number of iterations and the salt. When the user enters a password |
/// this calculation is done using the same parameters as stored for his |
/// user account and comparing the output. |
/// </summary> |
/// <param name="Password"> |
/// Password to create the deviation from |
/// </param> |
/// <param name="Salt"> |
/// Salt used to modify the password |
/// </param> |
/// <param name="Iterations"> |
/// Number of iterations to perform |
/// </param> |
/// <param name="KeyLength"> |
/// Length of the resulting key in byte |
/// </param> |
/// <returns> |
/// The calculated PBKDF2 value |
/// </returns> |
class function PBKDF2(const Password, Salt: RawByteString; |
Iterations: Integer; |
KeyLength: Integer): TBytes; overload; |
end; |
/// <summary> |
/// Adds methods which shall not be found in the specialized password hash |
/// classes. Mainly the CalcStreamXXX and CalcFileXXX ones. They shall not |
/// be contained there as those password hashes usually restrict the maximum |
/// length of the data which can be hashed. |
/// </summary> |
TDECHashExtended = class(TDECHashAuthentication, IDECHashExtended) |
/// <summary> |
/// Calculates the hash value over a given stream of bytes |
/// </summary> |
/// <param name="Stream"> |
/// Memory or file stream over which the hash value shall be calculated. |
/// The stream must be assigned. The hash value will always be calculated |
/// from the current position of the stream. |
/// </param> |
/// <param name="Size"> |
/// Number of bytes within the stream over which to calculate the hash value |
/// </param> |
/// <param name="HashResult"> |
/// In this byte array the calculated hash value will be returned. The |
/// array will be automatically sized suitably. |
/// </param> |
/// <param name="OnProgress"> |
/// Optional callback routine. It can be used to display the progress of |
/// the operation. |
/// </param> |
procedure CalcStream(const Stream: TStream; Size: Int64; var HashResult: TBytes; |
const OnProgress:TDECProgressEvent = nil); overload; |
/// <summary> |
/// Calculates the hash value over a givens stream of bytes |
/// </summary> |
/// <param name="Stream"> |
/// Memory or file stream over which the hash value shall be calculated. |
/// The stream must be assigned. The hash value will always be calculated |
/// from the current position of the stream. |
/// </param> |
/// <param name="Size"> |
/// Number of bytes within the stream over which to calculate the hash value |
/// </param> |
/// <param name="Format"> |
/// Optional formatting class. The formatting of that will be applied to |
/// the returned hash value. |
/// </param> |
/// <param name="OnProgress"> |
/// Optional callback routine. It can be used to display the progress of |
/// the operation. |
/// </param> |
/// <returns> |
/// Hash value over the bytes in the stream, formatted with the formatting |
/// passed as format parameter, if used. |
/// </returns> |
function CalcStream(const Stream: TStream; Size: Int64; Format: TDECFormatClass = nil; |
const OnProgress:TDECProgressEvent = nil): RawByteString; overload; |
/// <summary> |
/// Calculates the hash value over a given stream of bytes. The calculated |
/// hash value can be retrieved with one of the DigestAsXXX methods. |
/// </summary> |
/// <param name="Stream"> |
/// Memory or file stream over which the hash value shall be calculated. |
/// The stream must be assigned. The hash value will always be calculated |
/// from the current position of the stream. |
/// </param> |
/// <param name="Size"> |
/// Number of bytes within the stream over which to calculate the hash value |
/// </param> |
/// <param name="OnProgress"> |
/// Optional callback routine. It can be used to display the progress of |
/// the operation. |
/// </param> |
/// <param name="DoFinalize"> |
/// Optinal parameter: if true this call is the last one and the |
/// finalization of the hash calculation, including calling done, will be |
/// carried out in this method call as well. |
/// </param> |
/// <remarks> |
/// Before calling this method for the first time after creation of the |
/// hash instance or after calling Done Init needs to be called. |
/// After calling this method Done needs to be called and in case of |
/// algorithms (like SHA3) with a message size in bits and not whole bytes |
/// the contents of the last byte needs to be assigned to PaddingByte before |
/// calling Done! |
/// </remarks> |
procedure CalcStream(const Stream: TStream; Size: Int64; |
const OnProgress:TDECProgressEvent = nil; |
DoFinalize: Boolean = false); overload; |
/// <summary> |
/// Calculates the hash value over the contents of a given file |
/// </summary> |
/// <param name="FileName"> |
/// Path and name of the file to be processed |
/// </param> |
/// <param name="HashResult"> |
/// Here the resulting hash value is being returned as byte array |
/// </param> |
/// <param name="OnProgress"> |
/// Optional callback. If being used the hash calculation will call it from |
/// time to time to return the current progress of the operation |
/// </param> |
procedure CalcFile(const FileName: string; var HashResult: TBytes; |
const OnProgress:TDECProgressEvent = nil); overload; |
/// <summary> |
/// Calculates the hash value over the contents of a given file |
/// </summary> |
/// <param name="FileName"> |
/// Path and name of the file to be processed |
/// </param> |
/// <param name="Format"> |
/// Optional parameter: Formatting class. If being used the formatting is |
/// being applied to the returned string with the calculated hash value |
/// </param> |
/// <param name="OnProgress"> |
/// Optional callback. If being used the hash calculation will call it from |
/// time to time to return the current progress of the operation |
/// </param> |
/// <returns> |
/// Calculated hash value as RawByteString. |
/// </returns> |
/// <remarks> |
/// We recommend to use a formatting which results in 7 bit ASCII chars |
/// being returned, otherwise the conversion into the RawByteString might |
/// result in strange characters in the returned result. |
/// </remarks> |
function CalcFile(const FileName: string; Format: TDECFormatClass = nil; |
const OnProgress:TDECProgressEvent = nil): RawByteString; overload; |
end; |
/// <summary> |
/// All hash classes with hash algorithms specially developed for password |
/// hashing should inherit from this class in order to be able to distinguish |
/// those from normal hash algorithms not really meant to be used for password |
/// hashing. |
/// </summary> |
TDECPasswordHash = class(TDECHashAuthentication, IDECHashPassword) |
strict private |
/// <summary> |
/// Sets the salt value given. Throws an EDECHashException if a salt is |
/// passed which is longer than MaxSaltLength. |
/// </summary> |
/// <exception cref="EDECHashException"> |
/// Exception raised if length of <c>Value</c> is not in the range of |
/// <c>MinSaltLength</c> and <c>MaxSaltLength</c> |
/// </exception> |
procedure SetSalt(const Value: TBytes); |
/// <summary> |
/// Returns the defined salt value |
/// </summary> |
function GetSalt: TBytes; |
strict protected |
/// <summary> |
/// Most, if not all password hashing algorithms (like bcrypt) have a salt |
/// parameter to modify the entered password value. |
/// </summary> |
FSalt : TBytes; |
/// <summary> |
/// Overwrite the salt value |
/// </summary> |
procedure DoDone; override; |
{$Region CryptFormatHandling} |
/// <summary> |
/// Returns the ID code for Crypt/BSD like storing of passwords. The ID |
/// has to start with the $ at the beginning and does not contain a |
/// trailing $. |
/// </summary> |
/// <returns> |
/// If the algorithm on which this is being used is a Crypt/BSD compatible |
/// password hash algorithm the ID is returned otherwise an empty string. |
/// </returns> |
class function GetCryptID:string; virtual; |
/// <summary> |
/// Returns the parameters required for the crypt-like password storing |
/// in that format. |
/// </summary> |
/// <param name="Params"> |
/// Algorithm specific parameters used for initialization. For details see |
/// documentation of the concrete implementation in the algorithm. |
/// </param> |
/// <param name="Format"> |
/// Format class for formatting the output |
/// </param> |
/// <returns> |
/// Returns an empty string if the the algorithm on which this is being |
/// used is not a Crypt/BSD compatible password hash algorithm |
/// </returns> |
function GetCryptParams(const Params : string; |
Format : TDECFormatClass):string; virtual; |
/// <summary> |
/// Returns the salt required for the crypt-like password storing |
/// in that format. |
/// </summary> |
/// <param name="Salt"> |
/// The raw salt value |
/// </param> |
/// <param name="Format"> |
/// Format class for formatting the output |
/// </param> |
function GetCryptSalt(const Salt : TBytes; |
Format : TDECFormatClass):string; virtual; |
/// <summary> |
/// Returns the hash required for the crypt-like password storing |
/// in that format. If a salt etc. is needed that needs to be scepcified |
/// before calling this method. |
/// </summary> |
/// <param name="Password"> |
/// Password entered which shall be hashed. |
/// </param> |
/// <param name="Params"> |
/// Algorithm specific parameters used for initialization. For details see |
/// documentation of the concrete implementation in the algorithm. |
/// </param> |
/// <param name="Salt"> |
/// Salt value used by the password hash calculation. Depending on the |
/// value of SaltIsRaw, the salt needs to specified in raw encoding or |
/// in the encoding used in the Crypt/BSD password storage string. |
/// </param> |
/// <param name="Salt"> |
/// Salt value used by the password hash calculation in binary raw format, |
/// means not Radix64 encoded or so. |
/// </param> |
/// <param name="Format"> |
/// Format class for formatting the output |
/// </param> |
/// <returns> |
/// Returns an empty string if the the algorithm on which this is being |
/// used is not a Crypt/BSD compatible password hash algorithm. |
/// </returns> |
function GetCryptHash(Password : TBytes; |
const Params : string; |
const Salt : TBytes; |
Format : TDECFormatClass):string; virtual; |
{$EndRegion} |
public |
/// <summary> |
/// Returns the maximum length of a salt value given for the algorithm |
/// in byte |
/// </summary> |
function MaxSaltLength:UInt8; virtual; abstract; |
/// <summary> |
/// Returns the minimum length of a salt value given for the algorithm |
/// in byte |
/// </summary> |
function MinSaltLength:UInt8; virtual; abstract; |
/// <summary> |
/// Returns the maximum length of a user supplied password given for the |
/// algorithm in byte |
/// </summary> |
class function MaxPasswordLength:UInt8; virtual; abstract; |
{$Region CryptBSDFormatHandlingPublic} |
/// <summary> |
/// Tries to find a class type by its Crypt identification |
/// (e.g. 2a is Bcrypt). |
/// </summary> |
/// <param name="Identity"> |
/// Identity to look for, with or without the starting $ delimiter sign. |
/// </param> |
/// <returns> |
/// Returns the class type of the class with the specified identity value |
/// or throws an EDECClassNotRegisteredException exception if no class |
/// with the given Crypt identity has been found |
/// </returns> |
/// <exception cref="EDECClassNotRegisteredException"> |
/// Exception raised if the class specified by <c>Identity</c> is not found |
/// </exception> |
class function ClassByCryptIdentity(Identity: string): TDECPasswordHashClass; |
/// <summary> |
/// Calculates a passwort hash for the given password and returns it in |
/// a BSDCrypt compatible format. This method only works for those hash |
/// algorithms implementing the necessary GetBSDCryptID method. |
/// </summary> |
/// <param name="Password"> |
/// Entered password for which to calculate the hash. The caller is |
/// responsible to ensure the maximum password length is adhered to. |
/// Any exceptions raised due to too long passwords are not caught here! |
/// </param> |
/// <param name="Params"> |
/// Algorithm specific parameters used for initialization. For details see |
/// documentation of the concrete implementation in the algorithm. |
/// </param> |
/// <param name="Salt"> |
/// Salt value used by the password hash calculation. Depending on the |
/// value of SaltIsRaw, the salt needs to specified in raw encoding or |
/// in the encoding used in the Crypt/BSD password storage string. |
/// </param> |
/// <param name="SaltIsRaw"> |
/// If true the passed salt value is a raw value. If false it is encoded |
/// like in the Crypt/BSD password storage string. |
/// </param> |
/// <param name="Format"> |
/// Formatting class used to format the calculated password. Different |
/// algorithms in BSDCrypt use different algorithms so one needs to know |
/// which one to pass. See description of the hash class used. |
/// </param> |
/// <returns> |
/// Calculated hash value in BSD crypt style format. Returns an empty |
/// string if the algorithm is not a Crypt/BSD style password hash algorithm. |
/// </returns> |
/// <exception cref="EDECHashException"> |
/// Exception raised if length of <c>Password</c> is higher than |
/// <c>MaxPasswordLength</c> or if a salt with a different length than |
/// 128 bit has been specified. |
/// </exception> |
function GetDigestInCryptFormat(const Password : string; |
const Params : string; |
const Salt : string; |
SaltIsRaw : Boolean; |
Format : TDECFormatClass):string; overload; |
/// <summary> |
/// Calculates a passwort hash for the given password and returns it in |
/// a BSDCrypt compatible format. This method only works for those hash |
/// algorithms implementing the necessary GetBSDCryptID method. |
/// </summary> |
/// <param name="Password"> |
/// Entered password for which to calculate the hash. The caller is |
/// responsible to ensure the maximum password length is adhered to. |
/// Any exceptions raised due to too long passwords are not caught here! |
/// </param> |
/// <param name="Params"> |
/// Algorithm specific parameters used for initialization. For details see |
/// documentation of the concrete implementation in the algorithm. |
/// </param> |
/// <param name="Salt"> |
/// Salt value used by the password hash calculation. Depending on the |
/// value of SaltIsRaw, the salt needs to specified in raw encoding or |
/// in the encoding used in the Crypt/BSD password storage string. |
/// </param> |
/// <param name="SaltIsRaw"> |
/// If true the passed salt value is a raw value. If false it is encoded |
/// like in the Crypt/BSD password storage string. |
/// </param> |
/// <param name="Format"> |
/// Formatting class used to format the calculated password. Different |
/// algorithms in BSDCrypt use different algorithms so one needs to know |
/// which one to pass. See description of the hash class used. |
/// </param> |
/// <returns> |
/// Calculated hash value in BSD crypt style format. Returns an empty |
/// string if the algorithm is not a Crypt/BSD style password hash algorithm. |
/// </returns> |
/// <exception cref="EDECHashException"> |
/// Exception raised if length of <c>Password</c> is higher than |
/// <c>MaxPasswordLength</c> or if a salt with a different length than |
/// 128 bit has been specified. |
/// </exception> |
function GetDigestInCryptFormat(Password : TBytes; |
const Params : string; |
const Salt : string; |
SaltIsRaw : Boolean; |
Format : TDECFormatClass):string; overload; virtual; |
/// <summary> |
/// Checks whether a given password is the correct one for a password |
/// storage "record"/entry in Crypt/BSD format. |
/// </summary> |
/// <param name="Password"> |
/// Password to check for validity |
/// </param> |
/// <param name="CryptData"> |
/// The data needed to "compare" the password against in Crypt/BSD like |
/// format: $<id>[$<param>=<value>(,<param>=<value>)*][$<salt>[$<hash>]] |
/// The exact format depends on the algorithm used. |
/// </param> |
/// <param name="Format"> |
/// Must be the right type for the Crypt/BSD encoding used by the |
/// algorithm used. This was implemented this way to avoid making the |
/// DECHashAuthentication unit dependant on the DECFormat unit not needed |
/// otherwise. |
/// </param> |
/// <returns> |
/// True if the password given is correct. |
/// </returns> |
function IsValidPassword(const Password : string; |
const CryptData : string; |
Format : TDECFormatClass): Boolean; overload; |
/// <summary> |
/// Checks whether a given password is the correct one for a password |
/// storage "record"/entry in Crypt/BSD format. |
/// </summary> |
/// <param name="Password"> |
/// Password to check for validity |
/// </param> |
/// <param name="CryptData"> |
/// The data needed to "compare" the password against in Crypt/BSD like |
/// format: $<id>[$<param>=<value>(,<param>=<value>)*][$<salt>[$<hash>]] |
/// The exact format depends on the algorithm used. |
/// </param> |
/// <param name="Format"> |
/// Must be the right type for the Crypt/BSD encoding used by the |
/// algorithm used. This was implemented this way to avoid making the |
/// DECHashAuthentication unit dependant on the DECFormat unit not needed |
/// otherwise. |
/// </param> |
/// <returns> |
/// True if the password given is correct. |
/// </returns> |
function IsValidPassword(Password : TBytes; |
const CryptData : string; |
Format : TDECFormatClass): Boolean; overload; virtual; |
{$EndRegion} |
/// <summary> |
/// Defines the salt value used. Throws an EDECHashException if a salt is |
/// passed which is longer than MaxSaltLength. The salt has to be passed |
/// in binary form. Any Base64 encoded salt needs to be decoded before |
/// passing. |
/// </summary> |
/// <exception cref="EDECHashException"> |
/// Exception raised if the length of the value assigned is not in the |
/// range of <c>MinSaltLength</c> and <c>MaxSaltLength</c> |
/// </exception> |
property Salt: TBytes |
read GetSalt |
write SetSalt; |
end; |
{$IFNDEF HAVE_ASSIGN_ARRAY} |
/// <summary> |
/// Class helper for implementing array concatenation which is not available |
/// in Delphi XE6 or lower. |
/// </summary> |
/// <remarks> |
/// Shall be removed as soon as the minimum supported version is XE7 or higher. |
/// </remarks> |
TArrHelper = class |
class procedure AppendArrays<T>(var A: TArray<T>; const B: TArray<T>); |
end; |
{$ENDIF} |
/// <summary> |
/// Meta class for the class containing the authentication methods |
/// </summary> |
TDECHashAuthenticationClass = class of TDECHashAuthentication; |
/// <summary> |
/// Meta class for the class containing the additional calculation methods |
/// </summary> |
TDECHashExtendedClass = class of TDECHashExtended; |
implementation |
uses |
DECUtil; |
resourcestring |
/// <summary> |
/// Exception message when specifying a salt value longer than allowed |
/// </summary> |
sSaltValueTooLong = 'Maximum allowed salt length (%0:d byte) exceeded'; |
/// <summary> |
/// Exception message when specifying a salt value shorter than allowed |
/// </summary> |
sSaltValueTooShort = 'Minumum allowed salt length (%0:d byte) exceeded'; |
/// <summary> |
/// No class for the given crypt ID has been registered, so that ID is |
/// not supported. |
/// </summary> |
sCryptIDNotRegistered = 'No class for crypt ID %s registered'; |
class function TDECHashAuthentication.IsPasswordHash: Boolean; |
begin |
Result := self.InheritsFrom(TDECPasswordHash); |
end; |
class function TDECHashAuthentication.KDFInternal(const Data; DataSize: Integer; const Seed; |
SeedSize, MaskSize: Integer; KDFType: TKDFType): TBytes; |
var |
I, n, |
Rounds, DigestBytes : Integer; |
Count : UInt32; |
HashInstance : TDECHashAuthentication; |
begin |
SetLength(Result, 0); |
DigestBytes := DigestSize; |
Assert(MaskSize >= 0); |
Assert(DataSize >= 0); |
Assert(SeedSize >= 0); |
Assert(DigestBytes >= 0); |
HashInstance := TDECHashAuthenticationClass(self).Create; |
try |
Rounds := (MaskSize + DigestBytes - 1) div DigestBytes; |
SetLength(Result, Rounds * DigestBytes); |
if (KDFType = ktKDF2) then |
n := 1 |
else |
n := 0; |
for I := 0 to Rounds-1 do |
begin |
Count := SwapUInt32(n); |
HashInstance.Init; |
if (KDFType = ktKDF3) then |
begin |
HashInstance.Calc(Count, SizeOf(Count)); |
HashInstance.Calc(Data, DataSize); |
end |
else |
begin |
HashInstance.Calc(Data, DataSize); |
HashInstance.Calc(Count, SizeOf(Count)); |
end; |
HashInstance.Calc(Seed, SeedSize); |
HashInstance.Done; |
Move(HashInstance.Digest[0], Result[(I) * DigestBytes], DigestBytes); |
inc(n); |
end; |
SetLength(Result, MaskSize); |
finally |
HashInstance.Free; |
end; |
end; |
class function TDECHashAuthentication.MGF1(const Data; DataSize, MaskSize: Integer): TBytes; |
begin |
Result := KDF1(Data, DataSize, NullStr, 0, MaskSize); |
end; |
class function TDECHashAuthentication.MGF1(const Data: TBytes; MaskSize: Integer): TBytes; |
begin |
Result := KDFInternal(Data[0], Length(Data), NullStr, 0, MaskSize, ktKDF1); |
end; |
class function TDECHashAuthentication.KDF1(const Data; DataSize: Integer; const Seed; |
SeedSize, MaskSize: Integer): TBytes; |
begin |
Result := KDFInternal(Data, DataSize, Seed, SeedSize, MaskSize, ktKDF1); |
end; |
class function TDECHashAuthentication.KDF1(const Data, Seed: TBytes; |
MaskSize: Integer): TBytes; |
begin |
if (length(Seed) > 0) then |
Result := KDFInternal(Data[0], length(Data), Seed[0], length(Seed), MaskSize, ktKDF1) |
else |
Result := KDFInternal(Data[0], length(Data), NullStr, 0, MaskSize, ktKDF1); |
end; |
class function TDECHashAuthentication.KDF2(const Data; DataSize: Integer; const Seed; |
SeedSize, MaskSize: Integer): TBytes; |
begin |
Result := KDFInternal(Data, DataSize, Seed, SeedSize, MaskSize, ktKDF2); |
end; |
class function TDECHashAuthentication.KDF2(const Data, Seed: TBytes; |
MaskSize: Integer): TBytes; |
begin |
if (length(Seed) > 0) then |
Result := KDFInternal(Data[0], Length(Data), Seed[0], Length(Seed), MaskSize, ktKDF2) |
else |
Result := KDFInternal(Data[0], Length(Data), NullStr, 0, MaskSize, ktKDF2); |
end; |
class function TDECHashAuthentication.KDF3(const Data; DataSize: Integer; |
const Seed; SeedSize, MaskSize: Integer): TBytes; |
begin |
Result := KDFInternal(Data, DataSize, Seed, SeedSize, MaskSize, ktKDF3); |
end; |
class function TDECHashAuthentication.KDF3(const Data, Seed: TBytes; |
MaskSize: Integer): TBytes; |
begin |
if (length(Seed) > 0) then |
Result := KDFInternal(Data[0], Length(Data), Seed[0], Length(Seed), MaskSize, ktKDF3) |
else |
Result := KDFInternal(Data[0], Length(Data), NullStr, 0, MaskSize, ktKDF3); |
end; |
class function TDECHashAuthentication.KDFx(const Data; DataSize: Integer; |
const Seed; SeedSize, MaskSize: Integer; |
Index: UInt32 = 1): TBytes; |
// DEC's own KDF, even stronger |
var |
I, J : Integer; |
Count : UInt32; |
R : Byte; |
HashInstance : TDECHashAuthentication; |
begin |
Assert(MaskSize >= 0); |
Assert(DataSize >= 0); |
Assert(SeedSize >= 0); |
Assert(DigestSize > 0); |
SetLength(Result, MaskSize); |
Index := SwapUInt32(Index); |
HashInstance := TDECHashAuthenticationClass(self).Create; |
try |
for I := 0 to MaskSize - 1 do |
begin |
HashInstance.Init; |
Count := SwapUInt32(I); |
HashInstance.Calc(Count, SizeOf(Count)); |
HashInstance.Calc(Result[0], I); |
HashInstance.Calc(Index, SizeOf(Index)); |
Count := SwapUInt32(SeedSize); |
HashInstance.Calc(Count, SizeOf(Count)); |
HashInstance.Calc(Seed, SeedSize); |
Count := SwapUInt32(DataSize); |
HashInstance.Calc(Count, SizeOf(Count)); |
HashInstance.Calc(Data, DataSize); |
HashInstance.Done; |
R := 0; |
for J := 0 to DigestSize - 1 do |
R := R xor HashInstance.Digest[J]; |
Result[I] := R; |
end; |
finally |
HashInstance.Free; |
end; |
end; |
class function TDECHashAuthentication.KDFx(const Data, Seed: TBytes; |
MaskSize: Integer; |
Index: UInt32 = 1): TBytes; |
begin |
if (length(Seed) > 0) then |
Result := KDFx(Data[0], Length(Data), Seed[0], Length(Seed), MaskSize, Index) |
else |
Result := KDFx(Data[0], Length(Data), NullStr, Length(Seed), MaskSize, Index) |
end; |
class function TDECHashAuthentication.MGFx(const Data; DataSize, MaskSize: Integer; |
Index: UInt32 = 1): TBytes; |
begin |
Result := KDFx(Data, DataSize, NullStr, 0, MaskSize, Index); |
end; |
class function TDECHashAuthentication.MGFx(const Data: TBytes; |
MaskSize: Integer; |
Index: UInt32 = 1): TBytes; |
begin |
Result := KDFx(Data[0], Length(Data), NullStr, 0, MaskSize, Index); |
end; |
class function TDECHashAuthentication.HMAC(const Key, Text: RawByteString): TBytes; |
begin |
result := HMAC(BytesOf(Key), BytesOf(Text)); |
end; |
class function TDECHashAuthentication.HMAC(const Key, Text: TBytes): TBytes; |
const |
CONST_UINT_OF_0x36 = $3636363636363636; |
CONST_UINT_OF_0x5C = $5C5C5C5C5C5C5C5C; |
var |
HashInstance: TDECHashAuthentication; |
InnerKeyPad, OuterKeyPad: array of Byte; |
I, KeyLength, BlockSize, DigestLength: Integer; |
begin |
HashInstance := TDECHashAuthenticationClass(self).Create; |
try |
BlockSize := HashInstance.BlockSize; // 64 for sha1, ... |
DigestLength := HashInstance.DigestSize; |
KeyLength := Length(Key); |
SetLength(InnerKeyPad, BlockSize); |
SetLength(OuterKeyPad, BlockSize); |
I := 0; |
if KeyLength > BlockSize then |
begin |
Result := HashInstance.CalcBytes(Key); |
KeyLength := DigestLength; |
end |
else |
Result := Key; |
while I <= KeyLength - SizeOf(NativeUInt) do |
begin |
PNativeUInt(@InnerKeyPad[I])^ := PNativeUInt(@Result[I])^ xor NativeUInt(CONST_UINT_OF_0x36); |
PNativeUInt(@OuterKeyPad[I])^ := PNativeUInt(@Result[I])^ xor NativeUInt(CONST_UINT_OF_0x5C); |
Inc(I, SizeOf(NativeUInt)); |
end; |
while I < KeyLength do |
begin |
InnerKeyPad[I] := Result[I] xor $36; |
OuterKeyPad[I] := Result[I] xor $5C; |
Inc(I); |
end; |
while I <= BlockSize - SizeOf(NativeUInt) do |
begin |
PNativeUInt(@InnerKeyPad[I])^ := NativeUInt(CONST_UINT_OF_0x36); |
PNativeUInt(@OuterKeyPad[I])^ := NativeUInt(CONST_UINT_OF_0x5C); |
Inc(I, SizeOf(NativeUInt)); |
end; |
while I < BlockSize do |
begin |
InnerKeyPad[I] := $36; |
OuterKeyPad[I] := $5C; |
Inc(I); |
end; |
HashInstance.Init; |
HashInstance.Calc(InnerKeyPad[0], BlockSize); |
if Length(Text) > 0 then |
HashInstance.Calc(Text[0], Length(Text)); |
HashInstance.Done; |
Result := HashInstance.DigestAsBytes; |
HashInstance.Init; |
HashInstance.Calc(OuterKeyPad[0], BlockSize); |
HashInstance.Calc(Result[0], DigestLength); |
HashInstance.Done; |
Result := HashInstance.DigestAsBytes; |
finally |
HashInstance.Free; |
end; |
end; |
class function TDECHashAuthentication.PBKDF2(const Password, Salt: TBytes; Iterations: Integer; KeyLength: Integer): TBytes; |
const |
CONST_UINT_OF_0x36 = $3636363636363636; |
CONST_UINT_OF_0x5C = $5C5C5C5C5C5C5C5C; |
var |
Hash: TDECHashAuthentication; |
I, J, C: Integer; |
BlockCount, HashLengthRounded, SaltLength: Integer; |
PassLength, DigestLength, BlockSize: Integer; |
InnerKeyPad, OuterKeyPad: TBytes; |
SaltEx, T, U, TrimmedKey: TBytes; |
begin |
SetLength(Result, 0); |
Hash := TDECHashAuthenticationClass(self).Create; |
try |
// Setup needed parameters |
DigestLength := Hash.DigestSize; |
HashLengthRounded := DigestLength - SizeOf(NativeUInt) + 1; |
BlockCount := Trunc((KeyLength + DigestLength - 1) / DigestLength); |
BlockSize := Hash.BlockSize; |
PassLength := Length(Password); |
SaltLength := Length(Salt); |
SaltEx := Salt; |
SetLength(SaltEx, SaltLength + 4); // reserve 4 bytes for INT_32_BE(i) |
SetLength(T, DigestLength); |
// Prepare Key for HMAC calculation |
// PrepareKeyForHMAC; |
I := 0; |
if (PassLength > BlockSize) then |
begin |
TrimmedKey := Hash.CalcBytes(Password); |
PassLength := DigestLength; |
end |
else |
TrimmedKey := Password; |
SetLength(InnerKeyPad, BlockSize); |
SetLength(OuterKeyPad, BlockSize); |
while (I < PassLength) do |
begin |
InnerKeyPad[I] := TrimmedKey[I] xor $36; |
OuterKeyPad[I] := TrimmedKey[I] xor $5C; |
Inc(I); |
end; |
while (I < BlockSize) do |
begin |
InnerKeyPad[I] := $36; |
OuterKeyPad[I] := $5C; |
Inc(I); |
end; |
// Calculate DK |
for I := 1 to BlockCount do |
begin |
SaltEx[SaltLength + 0] := Byte(I shr 24); // INT_32_BE(i) |
SaltEx[SaltLength + 1] := Byte(I shr 16); |
SaltEx[SaltLength + 2] := Byte(I shr 8); |
SaltEx[SaltLength + 3] := Byte(I shr 0); |
FillChar(T[0], DigestLength, 0); // reset Ti / F |
U := SaltEx; // initialize U to U1 = Salt + INT_32_BE(i) |
// Calculate F(Password, Salt, c, i) = U1 ^ U2 ^ ... ^ Uc |
for C := 1 to Iterations do |
begin |
Hash.Init; |
Hash.Calc(InnerKeyPad[0], BlockSize); |
Hash.Calc(U[0], Length(U)); |
Hash.Done; |
U := Hash.DigestAsBytes; |
Hash.Init; |
Hash.Calc(OuterKeyPad[0], BlockSize); |
Hash.Calc(U[0], DigestLength); |
Hash.Done; |
U := Hash.DigestAsBytes; // Ui |
// F = U1 ^ U2 ^ ... ^ Uc |
J := 0; |
while (J < HashLengthRounded) do |
begin |
PNativeUInt(@T[J])^ := PNativeUInt(@T[J])^ xor PNativeUInt(@U[J])^; |
Inc(J, SizeOf(NativeUInt)); |
end; |
while (J < DigestLength) do |
begin |
T[J] := T[J] xor U[J]; |
Inc(J); |
end; |
end; |
if (I = 1) then |
Result := Copy(T) |
else |
Result := Result + T; // DK += F , DK = DK || Ti |
end; |
finally |
Hash.Free; |
end; |
// Trim to the needed key length |
SetLength(Result, KeyLength); |
end; |
class function TDECHashAuthentication.PBKDF2(const Password, Salt: RawByteString; Iterations: Integer; KeyLength: Integer): TBytes; |
begin |
Result := PBKDF2(BytesOf(Password), BytesOf(Salt), Iterations, KeyLength); |
end; |
{ TDECHashExtended } |
procedure TDECHashExtended.CalcStream(const Stream: TStream; Size: Int64; |
var HashResult: TBytes; const OnProgress:TDECProgressEvent); |
var |
Buffer: TBytes; |
Bytes: Integer; |
Max, Pos: Int64; |
begin |
Assert(Assigned(Stream), 'Stream to calculate hash on is not assigned'); |
Max := 0; |
SetLength(HashResult, 0); |
try |
Init; |
if StreamBufferSize <= 0 then |
StreamBufferSize := 8192; |
Pos := Stream.Position; |
if Size < 0 then |
Size := Stream.Size - Pos; |
// Last byte is incomplete so it mustn't be processed |
if (FFinalByteLength > 0) then |
Dec(Size); |
Max := Pos + Size; |
if Assigned(OnProgress) then |
OnProgress(Max, 0, Started); |
Bytes := StreamBufferSize mod FBufferSize; |
if Bytes = 0 then |
Bytes := StreamBufferSize |
else |
Bytes := StreamBufferSize + FBufferSize - Bytes; |
if Bytes > Size then |
SetLength(Buffer, Size) |
else |
SetLength(Buffer, Bytes); |
while Size > 0 do |
begin |
Bytes := Length(Buffer); |
if Bytes > Size then |
Bytes := Size; |
Stream.ReadBuffer(Buffer[0], Bytes); |
Calc(Buffer[0], Bytes); |
Dec(Size, Bytes); |
Inc(Pos, Bytes); |
if Assigned(OnProgress) then |
OnProgress(Max, Pos, Processing); |
end; |
// Last byte is incomplete but algorithm may need its value for padding |
if (FFinalByteLength > 0) then |
Stream.ReadBuffer(FPaddingByte, 1); |
Done; |
HashResult := DigestAsBytes; |
finally |
ProtectBytes(Buffer); |
if Assigned(OnProgress) then |
OnProgress(Max, Max, Finished); |
end; |
end; |
function TDECHashExtended.CalcStream(const Stream: TStream; Size: Int64; |
Format: TDECFormatClass; const OnProgress:TDECProgressEvent): RawByteString; |
var |
Hash: TBytes; |
begin |
CalcStream(Stream, Size, Hash, OnProgress); |
Result := BytesToRawString(ValidFormat(Format).Encode(Hash)); |
end; |
procedure TDECHashExtended.CalcStream(const Stream: TStream; Size: Int64; |
const OnProgress:TDECProgressEvent; |
DoFinalize: Boolean); |
var |
Buffer: TBytes; |
Bytes: Integer; |
Max, Pos: Int64; |
begin |
Assert(Assigned(Stream), 'Stream to calculate hash on is not assigned'); |
Max := 0; |
try |
if StreamBufferSize <= 0 then |
StreamBufferSize := 8192; |
Pos := Stream.Position; |
if Size < 0 then |
Size := Stream.Size - Pos; |
// Last byte is incomplete so it mustn't be processed |
if DoFinalize and (FFinalByteLength > 0) then |
Dec(Size); |
Max := Pos + Size; |
if Assigned(OnProgress) then |
OnProgress(Max, 0, Started); |
Bytes := StreamBufferSize mod FBufferSize; |
if Bytes = 0 then |
Bytes := StreamBufferSize |
else |
Bytes := StreamBufferSize + FBufferSize - Bytes; |
if Bytes > Size then |
SetLength(Buffer, Size) |
else |
SetLength(Buffer, Bytes); |
while Size > 0 do |
begin |
Bytes := Length(Buffer); |
if Bytes > Size then |
Bytes := Size; |
Stream.ReadBuffer(Buffer[0], Bytes); |
Calc(Buffer[0], Bytes); |
Dec(Size, Bytes); |
Inc(Pos, Bytes); |
if Assigned(OnProgress) then |
OnProgress(Max, Pos, Processing); |
end; |
// Last byte is incomplete but algorithm may need its value for padding |
if DoFinalize then |
begin |
if (FFinalByteLength > 0) then |
Stream.ReadBuffer(FPaddingByte, 1); |
Done; |
end; |
finally |
ProtectBytes(Buffer); |
if Assigned(OnProgress) then |
OnProgress(Max, Max, Finished); |
end; |
end; |
procedure TDECHashExtended.CalcFile(const FileName: string; var HashResult: TBytes; |
const OnProgress:TDECProgressEvent); |
var |
S: TFileStream; |
begin |
SetLength(HashResult, 0); |
S := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone); |
try |
CalcStream(S, S.Size, HashResult, OnProgress); |
finally |
S.Free; |
end; |
end; |
function TDECHashExtended.CalcFile(const FileName: string; Format: TDECFormatClass; |
const OnProgress:TDECProgressEvent): RawByteString; |
var |
Hash: TBytes; |
begin |
CalcFile(FileName, Hash, OnProgress); |
Result := BytesToRawString(ValidFormat(Format).Encode(Hash)); |
end; |
{ TArrHelper } |
{$IFNDEF HAVE_ASSIGN_ARRAY} |
class procedure TArrHelper.AppendArrays<T>(var A: TArray<T>; const B: TArray<T>); |
var |
i, L: Integer; |
begin |
L := Length(A); |
SetLength(A, L + Length(B)); |
for i := 0 to High(B) do |
A[L + i] := B[i]; |
end; |
{$ENDIF} |
{ TDECPasswordHash } |
function TDECPasswordHash.GetSalt: TBytes; |
begin |
Result := FSalt; |
end; |
procedure TDECPasswordHash.SetSalt(const Value: TBytes); |
begin |
if (Length(Value) > MaxSaltLength) then |
raise EDECHashException.CreateFmt(sSaltValueTooLong, [MaxSaltLength]); |
if (Length(Value) < MinSaltLength) then |
raise EDECHashException.CreateFmt(sSaltValueTooShort, [MinSaltLength]); |
FSalt := Value; |
end; |
class function TDECPasswordHash.GetCryptID: string; |
begin |
Result := ''; |
end; |
function TDECPasswordHash.GetCryptParams(const Params : string; |
Format : TDECFormatClass): string; |
begin |
Result := ''; |
end; |
function TDECPasswordHash.GetCryptSalt(const Salt : TBytes; |
Format : TDECFormatCLass): string; |
var |
FormattedSalt : TBytes; |
begin |
FormattedSalt := Format.Encode(Salt); |
Result := '$' + TEncoding.ASCII.GetString(FormattedSalt); |
end; |
class function TDECPasswordHash.ClassByCryptIdentity( |
Identity: string): TDECPasswordHashClass; |
var |
ClassEntry : TClassListEntry; |
IDLower : string; |
begin |
IDLower := Identity.ToLower; |
if not IDLower.StartsWith('$') then |
IDLower := '$' + IDLower; |
for ClassEntry in ClassList do |
begin |
if TDECHashClass(ClassEntry.Value).IsPasswordHash and |
(string(TDECPasswordHashClass(ClassEntry.Value).GetCryptID).ToLower = IDLower) then |
begin |
Result := TDECPasswordHashClass(ClassEntry.Value); |
Exit; |
end; |
end; |
// If we got this far, we have not found any mathich class |
raise EDECClassNotRegisteredException.CreateResFmt(@sCryptIDNotRegistered, |
[Identity]); |
end; |
procedure TDECPasswordHash.DoDone; |
begin |
inherited; |
ProtectBuffer(FSalt[0], SizeOf(FSalt)); |
SetLength(FSalt, 0); |
end; |
function TDECPasswordHash.GetCryptHash(Password : TBytes; |
const Params : string; |
const Salt : TBytes; |
Format : TDECFormatClass): string; |
begin |
Result := ''; |
end; |
function TDECPasswordHash.GetDigestInCryptFormat( |
const Password : string; |
const Params : string; |
const Salt : string; |
SaltIsRaw : Boolean; |
Format : TDECFormatClass): string; |
begin |
Result := GetDigestInCryptFormat(TEncoding.UTF8.GetBytes(Password), |
Params, |
Salt, |
SaltIsRaw, |
Format); |
end; |
function TDECPasswordHash.GetDigestInCryptFormat( |
Password : TBytes; |
const Params : string; |
const Salt : string; |
SaltIsRaw : Boolean; |
Format : TDECFormatClass): string; |
var |
SaltBytes : TBytes; |
begin |
// generic format used by Crypt, but not every algorithm sticks 100% to it |
// $<id>[$<param>=<value>(,<param>=<value>)*][$<salt>[$<hash>]] |
// if no ID is delivered the algorithm is none of the Crypt/BSD algorithms |
Result := GetCryptID; |
if (Result <> '') then |
begin |
if SaltIsRaw then |
SaltBytes := TEncoding.UTF8.GetBytes(Salt) |
else |
SaltBytes := Format.Decode(TEncoding.UTF8.GetBytes(Salt)); |
Result := Result + GetCryptParams(Params, Format) + |
GetCryptSalt(SaltBytes, Format) + |
GetCryptHash(Password, Params, SaltBytes, Format); |
end; |
end; |
function TDECPasswordHash.IsValidPassword(const Password : string; |
const CryptData : string; |
Format : TDECFormatClass): Boolean; |
begin |
Result := IsValidPassword(TEncoding.UTF8.GetBytes(Password), |
CryptData, |
Format); |
end; |
function TDECPasswordHash.IsValidPassword(Password : TBytes; |
const CryptData : string; |
Format : TDECFormatClass): Boolean; |
begin |
Result := false; |
end; |
end. |
/trunk/Decoder5/VCL_DEC/DECHashBase.pas |
---|
0,0 → 1,796 |
{***************************************************************************** |
The DEC team (see file NOTICE.txt) licenses this file |
to you under the Apache License, Version 2.0 (the |
"License"); you may not use this file except in compliance |
with the License. A copy of this licence is found in the root directory |
of this project in the file LICENCE.txt or alternatively 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. |
*****************************************************************************} |
/// <summary> |
/// Base unit for all the hash algorithms. The key deviation algorithms are |
/// in the DECHashAUthentication unit and hash algorithms which can process |
/// messages with a length specified in bits instead of whole bytes have |
/// to inherit from TDECHashBit |
/// </summary> |
unit DECHashBase; |
{$INCLUDE DECOptions.inc} |
interface |
uses |
{$IFDEF FPC} |
SysUtils, Classes, |
{$ELSE} |
System.SysUtils, System.Classes, Generics.Collections, |
{$ENDIF} |
DECBaseClass, DECFormatBase, DECUtil, DECTypes, DECHashInterface; |
type |
/// <summary> |
/// Meta class for all the hashing classes in order to support the |
/// registration mechanism |
/// </summary> |
TDECHashClass = class of TDECHash; |
/// <summary> |
/// Base class for all hash algorithm implementation classes |
/// </summary> |
{$IFDEF FPC} |
TDECHash = class(TDECObject) // does not find methods of the interface as it |
// searches for AnsiString instead of RawByteString |
// and thus does not find that |
private |
{$ELSE} |
TDECHash = class(TDECObject, IDECHash) |
strict private |
{$ENDIF} |
/// <summary> |
/// Raises an EDECHashException hash algorithm not initialized exception |
/// </summary> |
/// <exception cref="EDECHashException"> |
/// Exception raised unconditionally. |
/// </exception> |
procedure RaiseHashNotInitialized; |
/// <summary> |
/// Returns the current value of the padding byte used to fill up data |
/// if necessary |
/// </summary> |
function GetPaddingByte: Byte; |
/// <summary> |
/// Changes the value of the padding byte used to fill up data |
/// if necessary |
/// </summary> |
/// <param name="Value"> |
/// New value for the padding byte |
/// </param> |
procedure SetPaddingByte(Value: Byte); |
strict protected |
/// <summary> |
/// This array holds some state, espscially for Merkle-Darmgard based |
/// hash algorithms like MD4, SHA1 or HAVAL. |
/// </summary> |
FCount : array[0..7] of UInt32; |
/// <summary> |
/// Internal processing buffer |
/// </summary> |
FBuffer : PUInt8Array; |
/// <summary> |
/// Size of the internal processing buffer in byte |
/// </summary> |
FBufferSize : Integer; |
/// <summary> |
/// Position the algorithm is currently at in the processing buffer |
/// </summary> |
FBufferIndex : Integer; |
/// <summary> |
/// Value used to fill up data |
/// </summary> |
FPaddingByte : UInt8; |
/// <summary> |
/// Setting this to a number of bits allows to process messages which have |
/// a length which is not a exact multiple of bytes. |
/// </summary> |
FFinalByteLength : UInt8; |
/// <summary> |
/// This abstract method has to be overridden by each concrete hash algorithm |
/// to initialize the necessary data structures. |
/// </summary> |
procedure DoInit; virtual; abstract; |
/// <summary> |
/// The concrete calculation. Needs to be overridden by each concrete hash |
/// implementation. |
/// </summary> |
/// <param name="Buffer"> |
/// Data to operate on |
/// </param> |
procedure DoTransform(Buffer: PUInt32Array); virtual; abstract; |
/// <summary> |
/// This abstract method has to be overridden by each concrete hash algorithm |
/// to finalize the calculation of a hash value over the data passed. |
/// </summary> |
procedure DoDone; virtual; abstract; |
/// <summary> |
/// Adds the value of 8*Add to the value (which is interpreted as an |
/// 8*32 bit unsigned integer array. The carry is taken care of. |
/// </summary> |
/// <param name="Value"> |
/// Value which is incremented |
/// </param> |
/// <param name="Add"> |
/// Value (which is being multiplied by 8) by which to increment Value |
/// </param> |
/// <remarks> |
/// Raises an EDECHashException overflow error if the last operation has |
/// set the carry flag |
/// </remarks> |
/// <exception cref="EDECHashException"> |
/// Exception raised if the last operation has set the carry flag. |
/// </exception> |
procedure Increment8(var Value; Add: UInt32); |
/// <summary> |
/// Raises an EDECHashException overflow error |
/// </summary> |
/// <exception cref="EDECHashException"> |
/// Exception raised unconditionally. |
/// </exception> |
procedure RaiseHashOverflowError; |
/// <summary> |
/// Overwrite internally used processing buffers to make it harder to steal |
/// any data from memory. |
/// </summary> |
procedure SecureErase; virtual; |
/// <summary> |
/// Returns the calculated hash value |
/// </summary> |
function Digest: PUInt8Array; virtual; abstract; |
public |
/// <summary> |
/// Initialize internal fields |
/// </summary> |
constructor Create; override; |
/// <summary> |
/// Fees internal resources |
/// </summary> |
destructor Destroy; override; |
/// <summary> |
/// Generic initialization of internal data structures. Additionally the |
/// internal algorithm specific (because of being overridden by each |
/// hash algorithm) DoInit method is called. Needs to be called before |
/// each hash calculation. |
/// </summary> |
procedure Init; |
/// <summary> |
/// Processes one chunk of data to be hashed. |
/// </summary> |
/// <param name="Data"> |
/// Data on which the hash value shall be calculated on |
/// </param> |
/// <param name="DataSize"> |
/// Size of the data in bytes |
/// </param> |
procedure Calc(const Data; DataSize: Integer); virtual; |
/// <summary> |
/// Frees dynamically allocated buffers in a way which safeguards agains |
/// data stealing by other methods which afterwards might allocate this memory. |
/// Additionaly calls the algorithm spercific DoDone method. |
/// </summary> |
procedure Done; |
/// <summary> |
/// Returns the calculated hash value as byte array |
/// </summary> |
function DigestAsBytes: TBytes; virtual; |
/// <summary> |
/// Returns the calculated hash value as formatted Unicode string |
/// </summary> |
/// <param name="Format"> |
/// Optional parameter. If a formatting class is being passed the formatting |
/// will be applied to the returned string. Otherwise no formatting is |
/// being used. |
/// </param> |
/// <returns> |
/// Hash value of the last performed hash calculation |
/// </returns> |
/// <remarks> |
/// We recommend to use a formatting which results in 7 bit ASCII chars |
/// being returned, otherwise the conversion into the Unicode string might |
/// result in strange characters in the returned result. |
/// </remarks> |
function DigestAsString(Format: TDECFormatClass = nil): string; |
/// <summary> |
/// Returns the calculated hash value as formatted RawByteString |
/// </summary> |
/// <param name="Format"> |
/// Optional parameter. If a formatting class is being passed the formatting |
/// will be applied to the returned string. Otherwise no formatting is |
/// being used. |
/// </param> |
/// <returns> |
/// Hash value of the last performed hash calculation |
/// </returns> |
/// <remarks> |
/// We recommend to use a formatting which results in 7 bit ASCII chars |
/// being returned, otherwise the conversion into the RawByteString might |
/// result in strange characters in the returned result. |
/// </remarks> |
function DigestAsRawByteString(Format: TDECFormatClass = nil): RawByteString; |
/// <summary> |
/// Gives the length of the calculated hash value in byte. Needs to be |
/// overridden in concrete hash implementations. |
/// </summary> |
class function DigestSize: UInt32; virtual; |
/// <summary> |
/// Gives the length of the blocks the hash value is being calculated |
/// on in byte. Needs to be overridden in concrete hash implementations. |
/// </summary> |
class function BlockSize: UInt32; virtual; |
/// <summary> |
/// List of registered DEC classes. Key is the Identity of the class. |
/// </summary> |
class var ClassList : TDECClassList; |
/// <summary> |
/// Tries to find a class type by its name |
/// </summary> |
/// <param name="Name"> |
/// Name to look for in the list |
/// </param> |
/// <returns> |
/// Returns the class type if found. if it could not be found a |
/// EDECClassNotRegisteredException will be thrown |
/// </returns> |
/// <exception cref="EDECClassNotRegisteredException"> |
/// Exception raised if the class specified by <c>Name</c> is not found |
/// </exception> |
class function ClassByName(const Name: string): TDECHashClass; |
/// <summary> |
/// Tries to find a class type by its numeric identity DEC assigned to it. |
/// Useful for file headers, so they can easily encode numerically which |
/// cipher class was being used. |
/// </summary> |
/// <param name="Identity"> |
/// Identity to look for |
/// </param> |
/// <returns> |
/// Returns the class type of the class with the specified identity value |
/// or throws an EDECClassNotRegisteredException exception if no class |
/// with the given identity has been found |
/// </returns> |
/// <exception cref="EDECClassNotRegisteredException"> |
/// Exception raised if the class specified by <c>Identity</c> is not found |
/// </exception> |
class function ClassByIdentity(Identity: Int64): TDECHashClass; |
/// <summary> |
/// Detects whether the given hash class is one particularily suited |
/// for storing hashes of passwords |
/// </summary> |
/// <returns> |
/// true if it's a hash class specifically designed to store password |
/// hashes, false for ordinary hash algorithms. |
/// </returns> |
class function IsPasswordHash: Boolean; virtual; |
// hash calculation wrappers |
/// <summary> |
/// Calculates the hash value (digest) for a given buffer. All other |
/// CalcXXX methods do call this one for the actual calculation. So for |
/// algorithms where overwriting of DoTransform and getting is called the |
/// way it is implemented here, the inheriting class should overwrite |
/// CalcBuffer and do calculation in that as desired. If DoTransform is |
/// not really needed in such a case the inheriting class should overwrite |
/// it anyway but leave it empty and comment the reason. |
/// </summary> |
/// <param name="Buffer"> |
/// Untyped buffer the hash shall be calculated for |
/// </param> |
/// <param name="BufferSize"> |
/// Size of the buffer in byte |
/// </param> |
/// <returns> |
/// Byte array with the calculated hash value |
/// </returns> |
function CalcBuffer(const Buffer; BufferSize: Integer): TBytes; |
/// <summary> |
/// Calculates the hash value (digest) for a given buffer |
/// </summary> |
/// <param name="Data"> |
/// The TBytes array the hash shall be calculated on |
/// </param> |
/// <returns> |
/// Byte array with the calculated hash value |
/// </returns> |
function CalcBytes(const Data: TBytes): TBytes; |
/// <summary> |
/// Calculates the hash value (digest) for a given unicode string |
/// </summary> |
/// <param name="Value"> |
/// The string the hash shall be calculated on |
/// </param> |
/// <param name="Format"> |
/// Formatting class from DECFormat. The formatting will be applied to the |
/// returned digest value. This parameter is optional. |
/// </param> |
/// <returns> |
/// string with the calculated hash value |
/// </returns> |
function CalcString(const Value: string; Format: TDECFormatClass = nil): string; overload; |
/// <summary> |
/// Calculates the hash value (digest) for a given rawbytestring |
/// </summary> |
/// <param name="Value"> |
/// The string the hash shall be calculated on |
/// </param> |
/// <param name="Format"> |
/// Formatting class from DECFormat. The formatting will be applied to the |
/// returned digest value. This parameter is optional. |
/// </param> |
/// <returns> |
/// string with the calculated hash value |
/// </returns> |
function CalcString(const Value: RawByteString; Format: TDECFormatClass): RawByteString; overload; |
/// <summary> |
/// Defines the byte used in some algorithms to padd the end of the data |
/// if the length of the data cannot be divided by required size for the |
/// hash algorithm without reminder. For algorithms which can handle message |
/// lengths which are not whole bytes (e.g. SHA3), it can be used to define |
/// the last bits. This should be done only for those methods not already |
/// returning the calculated hash value, as those manage handling of the |
/// last byte themselves. |
/// </summary> |
/// <remarks> |
/// If an algorithm is used which can operate on bit sized message lengths |
/// and a method for feeding the data is used which does not already return |
/// the calculated hash value one needs to set the contents of the last |
/// byte with this property! For a stream for instance the length specified |
/// when calling CalcStream needs to be 1 byte less and that last byte |
/// needs to be assigned to this property just before calling Done. |
/// </remarks> |
property PaddingByte: Byte read GetPaddingByte write SetPaddingByte; |
end; |
/// <summary> |
/// Returns the passed hash class type if it is not nil. Otherwise the |
/// class type class set per SetDefaultHashClass is being returned. If using |
/// the DECHash unit THash_SHA256 is registered in the initialization, otherwise |
/// nil might be returned! |
/// </summary> |
/// <param name="HashClass"> |
/// Class type of a hash class like THash_SHA256. If nil is passed the one set |
/// as default is returned. |
/// </param> |
/// <returns> |
/// Passed class type or defined default hash class type, depending on |
/// HashClass parameter value. |
/// </returns> |
function ValidHash(HashClass: TDECHashClass = nil): TDECHashClass; |
/// <summary> |
/// Defines which cipher class to return by ValidCipher if passing nil to that |
/// </summary> |
/// <param name="HashClass"> |
/// Class type of a hash class to return by ValidHash if passing nil to |
/// that one. This parameter should not be nil! |
/// </param> |
procedure SetDefaultHashClass(HashClass: TDECHashClass); |
implementation |
resourcestring |
sHashNotInitialized = 'Hash must be initialized'; |
sRaiseHashOverflowError = 'Hash Overflow: Too many bits processed'; |
sHashNoDefault = 'No default hash has been registered'; |
var |
/// <summary> |
/// Hash class returned by ValidHash if nil is passed as parameter to it |
/// </summary> |
FDefaultHashClass: TDECHashClass = nil; |
function ValidHash(HashClass: TDECHashClass): TDECHashClass; |
begin |
if Assigned(HashClass) then |
Result := HashClass |
else |
Result := FDefaultHashClass; |
if not Assigned(Result) then |
raise EDECHashException.CreateRes(@sHashNoDefault); |
end; |
procedure SetDefaultHashClass(HashClass: TDECHashClass); |
begin |
Assert(Assigned(HashClass), 'Do not set a nil default hash class!'); |
FDefaultHashClass := HashClass; |
end; |
{ TDECHash } |
constructor TDECHash.Create; |
begin |
inherited; |
FBufferSize := 0; |
FBuffer := nil; |
end; |
destructor TDECHash.Destroy; |
begin |
SecureErase; |
FreeMem(FBuffer, FBufferSize); |
inherited Destroy; |
end; |
procedure TDECHash.SecureErase; |
begin |
ProtectBuffer(Digest^, DigestSize); |
if FBuffer <> nil then |
ProtectBuffer(FBuffer^, FBufferSize); |
end; |
procedure TDECHash.Init; |
begin |
FBufferIndex := 0; |
if (FBuffer = nil) or (UInt32(FBufferSize) <> BlockSize) then |
begin |
FBufferSize := BlockSize; |
// ReallocMemory instead of ReallocMem due to C++ compatibility as per 10.1 help |
// It is necessary to reallocate the buffer as FreeMem in destructor wouldn't |
// accept a nil pointer on some platforms. |
FBuffer := ReallocMemory(FBuffer, FBufferSize); |
end; |
FillChar(FBuffer^, FBufferSize, 0); |
FillChar(FCount, SizeOf(FCount), 0); |
DoInit; |
end; |
class function TDECHash.IsPasswordHash: Boolean; |
begin |
// has to be overwritten by the base class for password hash algorithms |
result := false; |
end; |
procedure TDECHash.Done; |
begin |
DoDone; |
end; |
function TDECHash.GetPaddingByte: Byte; |
begin |
Result := FPaddingByte; |
end; |
procedure TDECHash.Increment8(var Value; Add: UInt32); |
// Value := Value + 8 * Add |
// Value is array[0..7] of UInt32 |
{ TODO -oNormanNG -cCodeReview : !!Unbedingt noch einmal pr�fen, ob das wirklich so alles stimmt!! |
Mein Versuch der Umsetzung von Increment8 in ASM. |
Die Implementierung zuvor hat immer Zugriffsverletzungen ausgel�st. |
Vermutung: die alte Implementierung lag urspr�nglich ausserhalb der Klasse und wurde sp�ter |
in die Klasse verschoben. Dabei ver�ndert sich aber die Nutzung der Register, da zus�tzlich |
der SELF-Parameter in EAX �bergeben wird. Beim Schreiben nach auf Value wurde dann in die Instanz (Self) |
geschrieben -> peng |
} |
{$IF defined(X86ASM) or defined(X64ASM)} |
{$IFDEF X86ASM} |
// type TData = packed array[0..7] of UInt32; 8x32bit |
// TypeOf Param "Value" = TData |
// |
// EAX = Self |
// EDX = Pointer to "Value" |
// ECX = Value of "ADD" |
register; // redundant but informative |
asm |
LEA EAX,[ECX*8] // EAX := ADD * 8 |
SHR ECX,29 // 29bit nach rechts schieben, 3bit beiben stehen |
ADD [EDX].DWord[00],EAX // add [edx], eax TData(Value)[00] := TData(Value)[00] + EAX |
ADC [EDX].DWord[04],ECX // adc [edx+$04], ecx TData(Value)[04] := TData(Value)[04] + ECX + Carry |
ADC [EDX].DWord[08],0 // adc [edx+$08], 0 TData(Value)[08] := TData(Value)[08] + 0 + Carry |
ADC [EDX].DWord[12],0 // adc [edx+$0c], 0 TData(Value)[12] := TData(Value)[12] + 0 + Carry |
ADC [EDX].DWord[16],0 // adc [edx+$10], 0 TData(Value)[16] := TData(Value)[16] + 0 + Carry |
ADC [EDX].DWord[20],0 // adc [edx+$14], 0 TData(Value)[20] := TData(Value)[20] + 0 + Carry |
ADC [EDX].DWord[24],0 // adc [edx+$18], 0 TData(Value)[24] := TData(Value)[24] + 0 + Carry |
ADC [EDX].DWord[28],0 // adc [edx+$1c], 0 TData(Value)[28] := TData(Value)[28] + 0 + Carry |
JC RaiseHashOverflowError |
end; |
{$ENDIF !X86ASM} |
{$IFDEF X64ASM} |
// type TData = packed array[0..3] of UInt64; 4x64bit |
// TypeOf Param "Value" = TData |
// |
// RCX = Self |
// RDX = Pointer to "Value" |
// R8D = Value of "ADD" |
register; // redundant but informative |
asm |
SHL R8, 3 // R8 := Add * 8 the caller writes to R8D what automatically clears the high DWORD of R8 |
ADD QWORD PTR [RDX ], R8 // add [rdx], r8 TData(Value)[00] := TData(Value)[00] + R8 |
ADD QWORD PTR [RDX + 8], 0 // add [rdx+$08], 0 TData(Value)[08] := TData(Value)[08] + 0 + Carry |
ADD QWORD PTR [RDX + 16], 0 // add [rdx+$10], 0 TData(Value)[16] := TData(Value)[16] + 0 + Carry |
ADD QWORD PTR [RDX + 24], 0 // add [rdx+$18], 0 TData(Value)[24] := TData(Value)[24] + 0 + Carry |
JC RaiseHashOverflowError; |
end; |
{$ENDIF !X64ASM} |
{$ELSE PUREPASCAL} |
type |
TData = packed array[0..7] of UInt32; |
var |
HiBits: UInt32; |
Add8: UInt32; |
Carry: Boolean; |
procedure AddC(var Value: UInt32; const Add: UInt32; var Carry: Boolean); |
begin |
if Carry then |
begin |
Value := Value + 1; |
Carry := (Value = 0); // we might cause another overflow by adding the carry bit |
end |
else |
Carry := False; |
Value := Value + Add; |
Carry := Carry or (Value < Add); // set Carry Flag on overflow or keep it if already set |
end; |
begin |
HiBits := Add shr 29; // Save most significant 3 bits in case an overflow occurs |
Add8 := Add * 8; |
Carry := False; |
AddC(TData(Value)[0], Add8, Carry); |
AddC(TData(Value)[1], HiBits, Carry); |
AddC(TData(Value)[2], 0, Carry); |
AddC(TData(Value)[3], 0, Carry); |
AddC(TData(Value)[4], 0, Carry); |
AddC(TData(Value)[5], 0, Carry); |
AddC(TData(Value)[6], 0, Carry); |
AddC(TData(Value)[7], 0, Carry); |
if Carry then |
RaiseHashOverflowError; |
end; |
{$IFEND PUREPASCAL} |
procedure TDECHash.RaiseHashOverflowError; |
begin |
raise EDECHashException.CreateRes(@sRaiseHashOverflowError); |
end; |
procedure TDECHash.SetPaddingByte(Value: Byte); |
begin |
FPaddingByte := Value; |
end; |
procedure TDECHash.RaiseHashNotInitialized; |
begin |
raise EDECHashException.CreateRes(@sHashNotInitialized); |
end; |
procedure TDECHash.Calc(const Data; DataSize: Integer); |
var |
Remain: Integer; |
Value: PByte; |
begin |
if DataSize <= 0 then |
Exit; |
if not Assigned(FBuffer) then |
RaiseHashNotInitialized; |
Increment8(FCount, DataSize); |
Value := @TByteArray(Data)[0]; |
if FBufferIndex > 0 then |
begin |
Remain := FBufferSize - FBufferIndex; |
if DataSize < Remain then |
begin |
Move(Value^, FBuffer[FBufferIndex], DataSize); |
Inc(FBufferIndex, DataSize); |
Exit; |
end; |
Move(Value^, FBuffer[FBufferIndex], Remain); |
DoTransform(Pointer(FBuffer)); |
Dec(DataSize, Remain); |
Inc(Value, Remain); |
end; |
while DataSize >= FBufferSize do |
begin |
DoTransform(Pointer(Value)); |
Inc(Value, FBufferSize); |
Dec(DataSize, FBufferSize); |
end; |
Move(Value^, FBuffer^, DataSize); |
FBufferIndex := DataSize; |
end; |
function TDECHash.DigestAsBytes: TBytes; |
begin |
SetLength(Result, DigestSize); |
if DigestSize <> 0 then |
Move(Digest^, Result[0], DigestSize); |
end; |
function TDECHash.DigestAsRawByteString(Format: TDECFormatClass): RawByteString; |
begin |
Result := BytesToRawString(ValidFormat(Format).Encode(DigestAsBytes)); |
end; |
function TDECHash.DigestAsString(Format: TDECFormatClass): string; |
begin |
Result := StringOf(ValidFormat(Format).Encode(DigestAsBytes)); |
end; |
class function TDECHash.DigestSize: UInt32; |
begin |
// C++ does not support virtual static functions thus the base cannot be |
// marked 'abstract'. This is our workaround: |
raise EDECAbstractError.Create(GetShortClassName); |
end; |
class function TDECHash.BlockSize: UInt32; |
begin |
// C++ does not support virtual static functions thus the base cannot be |
// marked 'abstract'. This is our workaround: |
raise EDECAbstractError.Create(GetShortClassName); |
end; |
function TDECHash.CalcBuffer(const Buffer; BufferSize: Integer): TBytes; |
var |
DataPtr: PByte; |
begin |
Init; |
if (FFinalByteLength = 0) or (BufferSize = 0) then |
Calc(Buffer, BufferSize) |
else |
if (BufferSize > 0) then |
begin |
// Remember last byte as this might be required for padding for such |
// algorithms which have some automatic padding logic |
DataPtr := @Buffer; |
Inc(DataPtr, BufferSize - 1); |
FPaddingByte := DataPtr^; |
// Last byte is incomplete so do not process normally |
Calc(Buffer, BufferSize-1); |
end; |
Done; |
Result := DigestAsBytes; |
end; |
function TDECHash.CalcBytes(const Data: TBytes): TBytes; |
begin |
SetLength(Result, 0); |
if Length(Data) > 0 then |
Result := CalcBuffer(Data[0], Length(Data)) |
else |
Result := CalcBuffer(Data, Length(Data)); |
end; |
function TDECHash.CalcString(const Value: string; Format: TDECFormatClass): string; |
var |
Size : Integer; |
Data : TBytes; |
begin |
Result := ''; |
if Length(Value) > 0 then |
begin |
{$IFDEF HAVE_STR_LIKE_ARRAY} |
Size := Length(Value) * SizeOf(Value[low(Value)]); |
Data := CalcBuffer(Value[low(Value)], Size); |
{$ELSE} |
Size := Length(Value) * SizeOf(Value[1]); |
Data := CalcBuffer(Value[1], Size); |
{$ENDIF} |
Result := StringOf(ValidFormat(Format).Encode(Data)); |
end |
else |
begin |
SetLength(Data, 0); |
result := StringOf(ValidFormat(Format).Encode(CalcBuffer(Data, 0))); |
end; |
end; |
function TDECHash.CalcString(const Value: RawByteString; Format: TDECFormatClass): RawByteString; |
var |
Buf : TBytes; |
begin |
Result := ''; |
if Length(Value) > 0 then |
{$IFDEF HAVE_STR_LIKE_ARRAY} |
result := BytesToRawString( |
ValidFormat(Format).Encode( |
CalcBuffer(Value[low(Value)], |
Length(Value) * SizeOf(Value[low(Value)])))) |
{$ELSE} |
result := BytesToRawString( |
ValidFormat(Format).Encode( |
CalcBuffer(Value[1], |
Length(Value) * SizeOf(Value[1])))) |
{$ENDIF} |
else |
begin |
SetLength(Buf, 0); |
Result := BytesToRawString(ValidFormat(Format).Encode(CalcBuffer(Buf, 0))); |
end; |
end; |
class function TDECHash.ClassByIdentity(Identity: Int64): TDECHashClass; |
begin |
Result := TDECHashClass(ClassList.ClassByIdentity(Identity)); |
end; |
class function TDECHash.ClassByName(const Name: string): TDECHashClass; |
begin |
Result := TDECHashClass(ClassList.ClassByName(Name)); |
end; |
{$IFDEF DELPHIORBCB} |
procedure ModuleUnload(Instance: NativeUInt); |
var // automaticaly deregistration/releasing |
i: Integer; |
Items: TArray<TPair<Int64, TDECCLass>>; |
begin |
// C++Builder calls this function for our own module, but we destroy the ClassList |
// in that case in the finalization section anyway. |
if (Instance <> HInstance) and |
(TDECHash.ClassList <> nil) and (TDECHash.ClassList.Count > 0) then |
begin |
Items := TDECHash.ClassList.ToArray; |
for i := Length(Items) - 1 downto 0 do |
begin |
if FindClassHInstance(Items[i].Value) = HINST(HInstance) then |
TDECHash.ClassList.Remove(Items[i].Key); |
end; |
end; |
end; |
{$ENDIF DELPHIORBCB} |
initialization |
// Code for packages and dynamic extension of the class registration list |
{$IFDEF DELPHIORBCB} |
AddModuleUnloadProc(ModuleUnload); |
{$ENDIF DELPHIORBCB} |
TDECHash.ClassList := TDECClassList.Create; |
finalization |
// Ensure no further instances of classes registered in the registration list |
// are possible through the list after this unit has been unloaded by unloding |
// the package this unit is in |
{$IFDEF DELPHIORBCB} |
RemoveModuleUnloadProc(ModuleUnload); |
{$ENDIF DELPHIORBCB} |
TDECHash.ClassList.Free; |
end. |
/trunk/Decoder5/VCL_DEC/DECHashBitBase.pas |
---|
0,0 → 1,100 |
{***************************************************************************** |
The DEC team (see file NOTICE.txt) licenses this file |
to you under the Apache License, Version 2.0 (the |
"License"); you may not use this file except in compliance |
with the License. A copy of this licence is found in the root directory |
of this project in the file LICENCE.txt or alternatively 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. |
*****************************************************************************} |
/// <summary> |
/// Base unit for all the hash algorithms which can operate on bit sized |
/// messsages as well. |
/// </summary> |
unit DECHashBitBase; |
interface |
{$INCLUDE DECOptions.inc} |
uses |
{$IFDEF FPC} |
SysUtils, Classes, |
{$ELSE} |
System.SysUtils, System.Classes, |
{$ENDIF} |
DECHashAuthentication, DECHashInterface, DECTypes; |
type |
/// <summary> |
/// Meta class for the class containing the additional property for hashes |
/// supporting a last byte with less than 8 bit size. |
/// </summary> |
TDECHashBitClass = class of TDECHashBit; |
/// <summary> |
/// Base class for all hash algorithms which can operate on bit sized |
/// messsages as well. |
/// </summary> |
TDECHashBit = class(TDECHashExtended, IDECHashBitsized) |
strict private |
/// <summary> |
/// Returns the number of bits the final byte of the message consists of |
/// </summary> |
function GetFinalByteLength: UInt8; |
/// <summary> |
/// Sets the number of bits the final byte of the message consists of |
/// </summary> |
/// <exception cref="EDECHashException"> |
/// Exception raised if <c>Value</c> is higher than 7. |
/// </exception> |
procedure SetFinalByteLength(const Value: UInt8); |
public |
/// <summary> |
/// Setting this to a number of bits allows to process messages which have |
/// a length which is not a exact multiple of bytes. |
/// </summary> |
/// <exception cref="EDECHashException"> |
/// Exception raised if <c>Value</c> is higher than 7. |
/// </exception> |
property FinalByteLength : UInt8 |
read GetFinalByteLength |
write SetFinalByteLength; |
end; |
implementation |
resourcestring |
/// <summary> |
/// Exception message for the exception raised when a to long final byte |
/// length is specified. |
/// </summary> |
rFinalByteLengthTooBig = 'Final byte length too big (%0:d) must be 0..7'; |
{ TDECHashBit } |
function TDECHashBit.GetFinalByteLength: UInt8; |
begin |
Result := FFinalByteLength; |
end; |
procedure TDECHashBit.SetFinalByteLength(const Value: UInt8); |
begin |
// if length of final byte is 8 this value shall be 0 as the normal specification |
// of message length is good enough then. |
if (Value > 7) then |
raise EDECHashException.CreateFmt(rFinalByteLengthTooBig, [Value]); |
FFinalByteLength := Value; |
end; |
end. |
/trunk/Decoder5/VCL_DEC/DECHashInterface.pas |
---|
0,0 → 1,492 |
{***************************************************************************** |
The DEC team (see file NOTICE.txt) licenses this file |
to you under the Apache License, Version 2.0 (the |
"License"); you may not use this file except in compliance |
with the License. A copy of this licence is found in the root directory |
of this project in the file LICENCE.txt or alternatively 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. |
*****************************************************************************} |
unit DECHashInterface; |
{$INCLUDE DECOptions.inc} |
interface |
uses |
{$IFDEF FPC} |
SysUtils, Classes, |
{$ELSE} |
System.SysUtils, System.Classes, |
{$ENDIF} |
DECFormat, DECTypes; |
type |
/// <summary> |
/// Generic interface for all hash classes. |
/// Unfortunately without all the class methods, as they are not accepted |
/// in interface declarations |
/// </summary> |
IDECHash = Interface |
['{4AF2CD8C-5438-4E8C-B4EA-D6DAD09642C5}'] |
/// <summary> |
/// Generic initialization of internal data structures. Additionally the |
/// internal algorithm specific (because of being overridden by each |
/// hash algorithm) DoInit method. Needs to be called before each hash |
/// calculation. |
/// </summary> |
procedure Init; |
/// <summary> |
/// Calculates one chunk of data to be hashed. |
/// </summary> |
/// <param name="Data"> |
/// Data on which the hash value shall be calculated on |
/// </param> |
/// <param name="DataSize"> |
/// Size of the data in bytes |
/// </param> |
procedure Calc(const Data; DataSize: Integer); |
/// <summary> |
/// Frees dynamically allocated buffers in a way which safeguards agains |
/// data stealing by other methods which afterwards might allocate this memory. |
/// Additionaly calls the algorithm spercific DoDone method. |
/// </summary> |
procedure Done; |
/// <summary> |
/// Returns the calculated hash value as byte array |
/// </summary> |
function DigestAsBytes: TBytes; |
/// <summary> |
/// Returns the calculated hash value as formatted Unicode string |
/// </summary> |
/// <param name="Format"> |
/// Optional parameter. If a formatting class is being passed the formatting |
/// will be applied to the returned string. Otherwise no formatting is |
/// being used. |
/// </param> |
/// <returns> |
/// Hash value of the last performed hash calculation |
/// </returns> |
/// <remarks> |
/// We recommend to use a formatting which results in 7 bit ASCII chars |
/// being returned, otherwise the conversion into the Unicode string might |
/// result in strange characters in the returned result. |
/// </remarks> |
function DigestAsString(Format: TDECFormatClass = nil): string; |
/// <summary> |
/// Returns the calculated hash value as formatted RawByteString |
/// </summary> |
/// <param name="Format"> |
/// Optional parameter. If a formatting class is being passed the formatting |
/// will be applied to the returned string. Otherwise no formatting is |
/// being used. |
/// </param> |
/// <returns> |
/// Hash value of the last performed hash calculation |
/// </returns> |
/// <remarks> |
/// We recommend to use a formatting which results in 7 bit ASCII chars |
/// being returned, otherwise the conversion into the RawByteString might |
/// result in strange characters in the returned result. |
/// </remarks> |
function DigestAsRawByteString(Format: TDECFormatClass = nil): RawByteString; |
/// <summary> |
/// Calculates the hash value (digest) for a given buffer |
/// </summary> |
/// <param name="Buffer"> |
/// Untyped buffer the hash shall be calculated for |
/// </param> |
/// <param name="BufferSize"> |
/// Size of the buffer in byte |
/// </param> |
/// <returns> |
/// Byte array with the calculated hash value |
/// </returns> |
function CalcBuffer(const Buffer; BufferSize: Integer): TBytes; |
/// <summary> |
/// Calculates the hash value (digest) for a given buffer |
/// </summary> |
/// <param name="Data"> |
/// The TBytes array the hash shall be calculated on |
/// </param> |
/// <returns> |
/// Byte array with the calculated hash value |
/// </returns> |
function CalcBytes(const Data: TBytes): TBytes; |
/// <summary> |
/// Calculates the hash value (digest) for a given unicode string |
/// </summary> |
/// <param name="Value"> |
/// The string the hash shall be calculated on |
/// </param> |
/// <param name="Format"> |
/// Formatting class from DECFormat. The formatting will be applied to the |
/// returned digest value. This parameter is optional. |
/// </param> |
/// <returns> |
/// string with the calculated hash value |
/// </returns> |
function CalcString(const Value: string; |
Format: TDECFormatClass = nil): string; overload; |
/// <summary> |
/// Calculates the hash value (digest) for a given rawbytestring |
/// </summary> |
/// <param name="Value"> |
/// The string the hash shall be calculated on |
/// </param> |
/// <param name="Format"> |
/// Formatting class from DECFormat. The formatting will be applied to the |
/// returned digest value. This parameter is optional. |
/// </param> |
/// <returns> |
/// string with the calculated hash value |
/// </returns> |
function CalcString(const Value: RawByteString; |
Format: TDECFormatClass): RawByteString; overload; |
/// <summary> |
/// Returns the current value of the padding byte used to fill up data |
/// if necessary |
/// </summary> |
function GetPaddingByte: Byte; |
/// <summary> |
/// Changes the value of the padding byte used to fill up data |
/// if necessary |
/// </summary> |
/// <param name="Value"> |
/// New value for the padding byte |
/// </param> |
procedure SetPaddingByte(Value: Byte); |
/// <summary> |
/// Defines the byte used in the KDF methods to padd the end of the data |
/// if the length of the data cannot be divided by required size for the |
/// hash algorithm without reminder |
/// </summary> |
property PaddingByte: Byte read GetPaddingByte write SetPaddingByte; |
end; |
/// <summary> |
/// Adds all methods which shall not be present in the specialized password |
/// hash classes. Mostly the CalcStreamXX and CalcFileXXX ones. |
/// </summary> |
IDECHashExtended = Interface(IDECHash) |
['{FCC6C79E-C32C-4520-967A-FD1E60572E0F}'] |
/// <summary> |
/// Calculates the hash value over a givens stream of bytes |
/// </summary> |
/// <param name="Stream"> |
/// Memory or file stream over which the hash value shall be calculated. |
/// The stream must be assigned. The hash value will always be calculated |
/// from the current position of the stream. |
/// </param> |
/// <param name="Size"> |
/// Number of bytes within the stream over which to calculate the hash value |
/// </param> |
/// <param name="HashResult"> |
/// In this byte array the calculated hash value will be returned |
/// </param> |
/// <param name="OnProgress"> |
/// Optional callback routine. It can be used to display the progress of |
/// the operation. |
/// </param> |
procedure CalcStream(const Stream: TStream; Size: Int64; var HashResult: TBytes; |
const OnProgress:TDECProgressEvent = nil); overload; |
/// <summary> |
/// Calculates the hash value over a givens stream of bytes |
/// </summary> |
/// <param name="Stream"> |
/// Memory or file stream over which the hash value shall be calculated. |
/// The stream must be assigned. The hash value will always be calculated |
/// from the current position of the stream. |
/// </param> |
/// <param name="Size"> |
/// Number of bytes within the stream over which to calculate the hash value |
/// </param> |
/// <param name="Format"> |
/// Optional formatting class. The formatting of that will be applied to |
/// the returned hash value. |
/// </param> |
/// <param name="OnProgress"> |
/// Optional callback routine. It can be used to display the progress of |
/// the operation. |
/// </param> |
/// <returns> |
/// Hash value over the bytes in the stream, formatted with the formatting |
/// passed as format parameter, if used. |
/// </returns> |
function CalcStream(const Stream: TStream; Size: Int64; Format: TDECFormatClass = nil; |
const OnProgress:TDECProgressEvent = nil): RawByteString; overload; |
/// <summary> |
/// Calculates the hash value over a given stream of bytes. The calculated |
/// hash value can be retrieved with one of the DigestAsXXX methods. |
/// </summary> |
/// <param name="Stream"> |
/// Memory or file stream over which the hash value shall be calculated. |
/// The stream must be assigned. The hash value will always be calculated |
/// from the current position of the stream. |
/// </param> |
/// <param name="Size"> |
/// Number of bytes within the stream over which to calculate the hash value |
/// </param> |
/// <param name="OnProgress"> |
/// Optional callback routine. It can be used to display the progress of |
/// the operation. |
/// </param> |
/// <param name="DoFinalize"> |
/// Optinal parameter: if true this call is the last one and the |
/// finalization of the hash calculation, including calling done, will be |
/// carried out in this method call as well. |
/// </param> |
/// <remarks> |
/// Before calling this method for the first time after creation of the |
/// hash instance or after calling Done Init needs to be called. |
/// After calling this method Done needs to be called and in case of |
/// algorithms (like SHA3) with a message size in bits and not whole bytes |
/// the contents of the last byte needs to be assigned to PaddingByte before |
/// calling Done! |
/// </remarks> |
procedure CalcStream(const Stream: TStream; Size: Int64; |
const OnProgress:TDECProgressEvent = nil; |
DoFinalize: Boolean = false); overload; |
/// <summary> |
/// Calculates the hash value over the contents of a given file |
/// </summary> |
/// <param name="FileName"> |
/// Path and name of the file to be processed |
/// </param> |
/// <param name="HashResult"> |
/// Here the resulting hash value is being returned as byte array |
/// </param> |
/// <param name="OnProgress"> |
/// Optional callback. If being used the hash calculation will call it from |
/// time to time to return the current progress of the operation |
/// </param> |
procedure CalcFile(const FileName: string; var HashResult: TBytes; |
const OnProgress:TDECProgressEvent = nil); overload; |
/// <summary> |
/// Calculates the hash value over the contents of a given file |
/// </summary> |
/// <param name="FileName"> |
/// Path and name of the file to be processed |
/// </param> |
/// <param name="Format"> |
/// Optional parameter: Formatting class. If being used the formatting is |
/// being applied to the returned string with the calculated hash value |
/// </param> |
/// <param name="OnProgress"> |
/// Optional callback. If being used the hash calculation will call it from |
/// time to time to return the current progress of the operation |
/// </param> |
/// <returns> |
/// Calculated hash value as RawByteString. |
/// </returns> |
/// <remarks> |
/// We recommend to use a formatting which results in 7 bit ASCII chars |
/// being returned, otherwise the conversion into the RawByteString might |
/// result in strange characters in the returned result. |
/// </remarks> |
function CalcFile(const FileName: string; Format: TDECFormatClass = nil; |
const OnProgress:TDECProgressEvent = nil): RawByteString; overload; |
end; |
/// <summary> |
/// Interface for all hash classes which are able to operate on bit sized |
/// message lengths instead of byte sized ones only. |
/// </summary> |
IDECHashBitsized = Interface(IDECHashExtended) |
['{7F2232CB-C3A7-4A14-858B-D98AB61E04E4}'] |
/// <summary> |
/// Returns the number of bits the final byte of the message consists of |
/// </summary> |
function GetFinalByteLength: UInt8; |
/// <summary> |
/// Sets the number of bits the final byte of the message consists of |
/// </summary> |
procedure SetFinalByteLength(const Value: UInt8); |
/// <summary> |
/// Setting this to a number of bits allows to process messages which have |
/// a length which is not a exact multiple of bytes. |
/// </summary> |
property FinalBitLength : UInt8 |
read GetFinalByteLength |
write SetFinalByteLength; |
end; |
/// <summary> |
/// Interface for all hash classes which provide a variable output length for |
/// the calculated hash value |
/// </summary> |
IDECHashExtensibleOutput = Interface(IDECHash) |
['{C832E9AB-961C-4888-A607-9EC0780B3F8C}'] |
/// <summary> |
/// Returns the length of the calculated hash value in byte |
/// </summary> |
function GetHashSize: UInt16; |
/// <summary> |
/// Defines the length of the calculated hash value |
/// </summary> |
/// <param name="Value"> |
/// Length of the hash value to be returned in byte |
/// </param> |
procedure SetHashSize(const Value: UInt16); |
/// <summary> |
/// Define the lenght of the resulting hash value in byte as these functions |
/// are extendable output functions |
/// </summary> |
property HashSize : UInt16 |
read GetHashSize |
write SetHashSize; |
end; |
/// <summary> |
/// Interface for all hash classes which have a rounds property. |
/// </summary> |
IDECHashRounds = Interface(IDECHash) |
['{22864693-0DC6-41AF-8188-192B770B4717}'] |
/// <summary> |
/// Returns the minimum possible number for the rounds parameter. |
/// Value depends on Digest size which depends on concrete implementation |
/// </summary> |
function GetMinRounds: UInt32; |
/// <summary> |
/// Returns the maximum possible number for the rounds parameter. |
/// Value depends on Digest size which depends on concrete implementation |
/// </summary> |
function GetMaxRounds: UInt32; |
/// <summary> |
/// Sets the number of rounds for the looping over the data |
/// </summary> |
procedure SetRounds(Value: UInt32); |
/// <summary> |
/// Returns the number of rounds the calculation will perform |
/// </summary> |
function GetRounds: UInt32; |
/// <summary> |
/// Define the number of rounds for the calculation. |
/// </summary> |
property Rounds: UInt32 |
read GetRounds |
write SetRounds; |
end; |
/// <summary> |
/// Interface for passwordn hash algorithms |
/// </summary> |
IDECHashPassword = Interface(IDECHash) |
['{B4D8A80C-1F42-46F8-9288-D71ECCFE6F02}'] |
/// <summary> |
/// Calculates a passwort hash for the given password and returns it in |
/// a BSDCrypt compatible format. This method only works for those hash |
/// algorithms implementing the necessary GetBSDCryptID method. |
/// </summary> |
/// <param name="Password"> |
/// Entered password for which to calculate the hash. The caller is |
/// responsible to ensure the maximum password length is adhered to. |
/// Any exceptions raised due to too long passwords are not caught here! |
/// </param> |
/// <param name="Params"> |
/// Algorithm specific parameters used for initialization. For details see |
/// documentation of the concrete implementation in the algorithm. |
/// </param> |
/// <param name="Salt"> |
/// Salt value used by the password hash calculation. Depending on the |
/// value of SaltIsRaw, the salt needs to specified in raw encoding or |
/// in the encoding used in the Crypt/BSD password storage string. |
/// </param> |
/// <param name="SaltIsRaw"> |
/// If true the passed salt value is a raw value. If false it is encoded |
/// like in the Crypt/BSD password storage string. |
/// </param> |
/// <param name="Format"> |
/// Formatting class used to format the calculated password. Different |
/// algorithms in BSDCrypt use different algorithms so one needs to know |
/// which one to pass. See description of the hash class used. |
/// </param> |
/// <returns> |
/// Calculated hash value in BSD crypt style format. Returns an empty |
/// string if the algorithm is not a Crypt/BSD style password hash algorithm. |
/// </returns> |
/// <exception cref="EDECHashException"> |
/// Exception raised if length of <c>Password</c> is higher than |
/// <c>MaxPasswordLength</c> or if a salt with a different length than |
/// 128 bit has been specified. |
/// </exception> |
function GetDigestInCryptFormat(const Password : string; |
const Params : string; |
const Salt : string; |
SaltIsRaw : Boolean; |
Format : TDECFormatClass):string; |
/// <summary> |
/// Checks whether a given password is the correct one for a password |
/// storage "record"/entry in Crypt/BSD format. |
/// </summary> |
/// <param name="Password"> |
/// Password to check for validity |
/// </param> |
/// <param name="CryptData"> |
/// The data needed to "compare" the password against in Crypt/BSD like |
/// format: $<id>[$<param>=<value>(,<param>=<value>)*][$<salt>[$<hash>]]. |
/// The exact format depends on the algorithm used. |
/// </param> |
/// <param name="Format"> |
/// Must be the right type for the Crypt/BSD encoding used by the |
/// algorithm used. This was implemented this way to avoid making the |
/// DECHashAuthentication unit dependant on the DECFormat unit not needed |
/// otherwise. |
/// </param> |
/// <returns> |
/// True if the password given is correct. |
/// </returns> |
function IsValidPassword(const Password : string; |
const CryptData : string; |
Format : TDECFormatClass): Boolean; |
/// <summary> |
/// Sets the salt value given. Throws an EDECHashException if a salt is |
/// passed which is longer than MaxSaltLength. |
/// </summary> |
/// <exception cref="EDECHashException"> |
/// Exception raised if length of <c>Value</c> is not in the range of |
/// <c>MinSaltLength</c> and <c>MaxSaltLength</c> |
/// </exception> |
procedure SetSalt(const Value: TBytes); |
/// <summary> |
/// Returns the defined salt value |
/// </summary> |
function GetSalt: TBytes; |
/// <summary> |
/// Defines the salt value used. Throws an EDECHashException if a salt is |
/// passed which is longer than MaxSaltLength. The salt has to be passed |
/// in binary form. Any Base64 encoded salt needs to be decoded before |
/// passing. |
/// </summary> |
/// <exception cref="EDECHashException"> |
/// Exception raised if the length of the value assigned is not in the |
/// range of <c>MinSaltLength</c> and <c>MaxSaltLength</c> |
/// </exception> |
property Salt: TBytes |
read GetSalt |
write SetSalt; |
end; |
implementation |
end. |
/trunk/Decoder5/VCL_DEC/DECOptions.inc |
---|
0,0 → 1,265 |
{***************************************************************************** |
The DEC team (see file NOTICE.txt) licenses this file |
to you under the Apache License, Version 2.0 (the |
"License"); you may not use this file except in compliance |
with the License. A copy of this licence is found in the root directory |
of this project in the file LICENCE.txt or alternatively 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. |
*****************************************************************************} |
//------------------------------------------------------------------------------ |
// Reset Defines (do not change!) |
//------------------------------------------------------------------------------ |
{$UNDEF NATIVEINT_UNDEFINED} |
{$UNDEF PUREPASCAL} |
{$UNDEF X86ASM} |
{$UNDEF X64ASM} |
{$UNDEF NO_ASM} |
{$UNDEF OLD_SHA_NAME} |
{$UNDEF OLD_WHIRLPOOL_NAMES} |
{$UNDEF OLD_REGISTER_FAULTY_CIPHERS} |
{$UNDEF AUTO_PRNG} |
{$UNDEF DEC52_IDENTITY} |
{$UNDEF DEC3_CMCTS} |
{$UNDEF RESTORE_RANGECHECKS} |
{$UNDEF RESTORE_OVERFLOWCHECKS} |
{$UNDEF ManualRegisterFormatClasses} |
{$UNDEF ManualRegisterCipherClasses} |
{$UNDEF ManualRegisterHashClasses} |
//------------------------------------------------------------------------------ |
// User Configuration (feel free to edit) |
//------------------------------------------------------------------------------ |
// If on, the old class name THash_SHA for the THash_SHA0 class will be available |
// This should only be necessary for cases where the identity value has been |
// used to determine the algorithm to be used and thus it's necessary that the |
// same result will be produced. It is recommended to switch to the new class |
// names where possible |
// Currently this does not work together with using x86 ASM! Either ASM or the |
// old name works |
{.$DEFINE OLD_SHA_NAME} (* default off *) |
// if on the old outdated class names THash_Whirlpool and THash_Whirlpool1 are |
// being used. Nowadays Whirlpool versions are named like this: |
// Whirlpool -> Whirlpool0. Whrilpool1 -> WhirlpoolT and there's a new Whirlpool1 |
// variant which differs to WhrilpoolT only by the initialization of internal data |
// This should only be necessary for cases where the identity value has been |
// used to determine the algorithm to be used and thus it's necessary that the |
// same result will be produced. It is recommended to switch to the new class |
// names where possible |
{.$DEFINE OLD_WHIRLPOOL_NAMES} (* default off *) |
// Automatically use DEC's Pseudo Random Number Generator |
{$DEFINE AUTO_PRNG} (* default ON *) |
// Automatically register all formatting classes |
{.$DEFINE ManualRegisterFormatClasses} (* default off *) |
// Automatically register all cipher classes |
{.$DEFINE ManualRegisterCipherClasses} (* default off *) |
// Automatically register all hash classes |
{.$DEFINE ManualRegisterHashClasses} (* default off *) |
// if the compiler does not support assembler turn usage off and even if restrict |
// it to Windows, as those non Windows platforms which actually do support ASM |
// in Delphi do not use Intel x86 ASM |
{$IFDEF FPC } |
{$IF defined(CPUX86_64) or defined(CPUAMD64) or defined(CPUIA64) } |
{$ifndef CPUX64} |
{$define CPUX64} |
{$endif} |
{$else}{$if defined(CPU386) or defined(CPUI386) } |
{$ifndef CPUX32} |
{$define CPUX32} |
{$endif} |
{$ELSE} |
{$IFNDEF ASSEMBLER } |
{$DEFINE NO_ASM} (* default ON *) |
{$ELSE} |
{$IFDEF WINDOWS} |
{.$DEFINE NO_ASM} (* default OFF *) |
{$ELSE} |
{$DEFINE NO_ASM} (* default ON *) |
{$ENDIF} |
{$ENDIF} |
{$ENDIF}{$endif} |
{$ELSE} |
// Turn ASM off for FPC as we do not know enough about ASM support on FPC |
{$DEFINE NO_ASM} |
{$ENDIF} |
// Enable the following option to restore the *wrong* Identity behavior of |
// DEC version 5.2. See TDECObject.Identity in DECBaseClass.pas for more details |
{.$DEFINE DEC52_IDENTITY} (* default OFF *) |
// Enable the following option to include the cmCTS3 block cipher mode in |
// DECCipher. This mode is less secure due to the padding used on data smaller |
// that cipher's block size but it might help when having to deal with |
// data which needs to be compatible to the DEC 3.0 cmCTS mode. Not recommended! |
{.$DEFINE DEC3_CMCTS} (* default OFF *) |
/// <summary> |
/// When building a Firemonkey project for non Windows platforms |
/// ressource strings are not available. Enabling this enables some |
/// alternative translation mechanism for exception messages based |
/// on Firemonkey's TLang architecture |
/// </summary> |
{$IF DECLARED(FireMonkeyVersion)} |
{$DEFINE FMXTranslateableExceptions} |
{$IFEND} { TODO: convert to $ENDIF when raising minimum supported version to XE4+} |
//------------------------------------------------------------------------------ |
// Do NOT change anything below! |
//------------------------------------------------------------------------------ |
{$IFDEF CONDITIONALEXPRESSIONS} |
{$IF CompilerVersion >= 24.0} |
{$LEGACYIFEND ON} |
{$IFEND} |
{$ENDIF} |
{$DEFINE DELPHIORBCB} |
//------------------------------------------------------------------------------ |
// FPC v2.x support (Experimental) |
//------------------------------------------------------------------------------ |
{$IFDEF FPC} |
{$UNDEF DELPHIORBCB} |
// fpc supports assembler |
//{$DEFINE PUREPASCAL} |
{$DEFINE NATIVEINT_UNDEFINED} |
{$IF declared(FPC_FULLVERSION) and (FPC_FULLVERSION >= 30300)} |
{$DEFINE HAVE_LAMBDAS} |
{$IFEND} |
// use compatibility mode |
{$MODE DELPHI} |
{$IFDEF HAVE_LAMBDAS} |
{$modeswitch functionreferences} |
{$modeswitch anonymousfunctions} |
{$ENDIF} |
{$DEFINE HAVE_ASSIGN_ARRAY} |
// defines for Mac OS X |
{$IFDEF DARWIN} |
{$DEFINE MACOS} |
{$DEFINE ALIGN_STACK} |
{$ENDIF} |
// define delphi-style CPU-width |
{$ifdef CPU64} |
{$define CPU64BITS} |
{$else} {$if defined(CPU32) } |
{$define CPU32BITS} |
{$ifend}{$endif} |
{$ASMMODE intel} |
{$ELSE} |
// assume delphi have "reference to" feature |
{$define HAVE_LAMBDAS} |
{$ENDIF FPC} |
//------------------------------------------------------------------------------ |
// Architecture (x86ASM, x64ASM, PurePascal) |
//------------------------------------------------------------------------------ |
//{$DEFINE NO_ASM} |
{$IFDEF NO_ASM} |
// User config override (see top of this file) |
{$UNDEF X86ASM} |
{$UNDEF X64ASM} |
{$DEFINE PUREPASCAL} |
{$ENDIF} |
{$IFNDEF PUREPASCAL} |
// ignored by FPC (already in PurePascal mode as defined in FPC block above) |
{$IFDEF CPUX86} |
{$DEFINE X86ASM} |
{$ELSE !CPUX86} |
{$IFDEF CPUX64} |
{$DEFINE X64ASM} |
{$ELSE !CPUX64} |
{$DEFINE PUREPASCAL} |
{$ENDIF !CPUX64} |
{$ENDIF} |
{$ENDIF !PUREPASCAL} |
//------------------------------------------------------------------------------ |
// Delphi and C++ Builder |
//------------------------------------------------------------------------------ |
{$IFDEF DELPHIORBCB} |
{$BOOLEVAL OFF} // short-circuit bool eval (Default OFF; Local Scope) |
{$IF CompilerVersion >= 20} // Delphi 2009 and newer |
{$IF CompilerVersion >= 21} // Delphi 2010 and newer |
{$DEFINE DELPHI_2010_UP} |
{$IFEND} |
{$ELSE} |
Sorry, but Delphi 2007 and lower are no longer supported! |
{$IFEND} |
{$IF CompilerVersion >= 24.0} |
{$define HAVE_STR_LIKE_ARRAY} // Deplhi provides Low(str), Hight(Str) features |
{$ifend} |
{$IF CompilerVersion >= 28.0} |
{$define HAVE_ASSIGN_ARRAY} // XE7+ supports result := [] |
{$ifend} |
{$ENDIF} |
//------------------------------------------------------------------------------ |
// Asm Core |
//------------------------------------------------------------------------------ |
{$IFDEF X86ASM} |
{$DEFINE THash_MD4_asm} |
{$DEFINE THash_MD5_asm} |
{$DEFINE THash_RipeMD128_asm} |
{$DEFINE THash_RipeMD160_asm} |
{$DEFINE THash_RipeMD256_asm} |
{$DEFINE THash_RipeMD320_asm} |
{$DEFINE THash_SHA_asm} |
{$DEFINE THash_SHA256_asm} |
{$DEFINE THash_SHA384_asm} |
{$DEFINE THashBaseHaval_asm} |
{$DEFINE THash_Panama_asm} |
{$DEFINE THashBaseWhirlpool_asm} |
{$DEFINE THash_Sapphire_asm} |
{$DEFINE THash_Snefru128_asm} |
{$DEFINE THash_Snefru256_asm} |
// The following asm optimized Hashes were incompatible with newer C++ |
// Builder versions. |
// This statement of the former developers of the library has now been |
// tested with a short console test program. It looks like some of these |
// except two can run without crashing now. The MD2 crashes and Square |
// and Tiger deliver different results. |
// Disabling for C++ Builder requires either that C++ Builder users compile |
// DEC from IDE or with the -DBCB parameter when compiling from command line |
{$IFNDEF BCB} |
{$DEFINE THash_MD2_asm} |
{$DEFINE THash_Square_asm} |
{$DEFINE THash_Tiger_asm} |
{$ENDIF} |
{$ENDIF} |
/trunk/Decoder5/VCL_DEC/DECRandom.pas |
---|
0,0 → 1,458 |
{***************************************************************************** |
The DEC team (see file NOTICE.txt) licenses this file |
to you under the Apache License, Version 2.0 (the |
"License"); you may not use this file except in compliance |
with the License. A copy of this licence is found in the root directory |
of this project in the file LICENCE.txt or alternatively 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. |
*****************************************************************************} |
/// <summary> |
/// Secure Pseudo Random Number Generator based on Yarrow. If used without |
/// doing anything special for initialization a repeatable generator will be |
/// initialized always using the same start value. |
/// </summary> |
unit DECRandom; |
{$INCLUDE DECOptions.inc} |
interface |
uses |
{$IFDEF FPC} |
SysUtils, |
{$ELSE} |
System.SysUtils, |
{$ENDIF} |
DECHashBase, DECHash; |
/// <summary> |
/// Create a seed for the random number generator from system time and |
/// PerformanceCounter. |
/// </summary> |
/// <remarks> |
/// Avoid initializing the seed using this fuction if you can as it is not |
/// really secure. Use RandomBuffer instead and provide user generated input |
/// as Buffer value but ensure that this is not uniform e.g. not a buffer only |
/// containing $00 all over or something like this. |
/// </remarks> |
/// <returns> |
/// Created seed value |
/// </returns> |
function RandomSystemTime: Int64; |
/// <summary> |
/// Fills the provided buffer with random values. If the DoRandomBuffer |
/// variable is assigned (which is usually the case because DoBuffer is |
/// assigned to it in initialization of this unit) the hash based algorithm |
/// in DoBuffer will be used, otherwise the weaker one in DoRndBuffer. |
/// </summary> |
/// <param name="Buffer"> |
/// Buffer to be filled with random values |
/// </param> |
/// <param name="Size"> |
/// Size of the buffer in byte |
/// </param> |
procedure RandomBuffer(out Buffer; Size: Integer); |
/// <summary> |
/// Creates a buffer of the specified size filled with random bytes |
/// </summary> |
/// <param name="Size"> |
/// Size of the buffer to be created in bytes |
/// </param> |
/// <returns> |
/// Buffer of the specified size in bytes filled with random data |
/// </returns> |
function RandomBytes(Size: Integer): TBytes; |
/// <summary> |
/// Creates a RawByteString of the specified length filled with random bytes. |
/// </summary> |
/// <remarks> |
/// This function is deprecated. Better use RandomBytes where ever possible! |
/// </remarks> |
/// <param name="Size"> |
/// Length of the string to be created in bytes |
/// </param> |
/// <returns> |
/// String of the specified length in bytes filled with random data |
/// </returns> |
function RandomRawByteString(Size: Integer): RawByteString; deprecated 'please use RandomBytes now'; |
/// <summary> |
/// Creates a random UInt32 value |
/// </summary> |
/// <returns> |
/// Random value |
/// </returns> |
function RandomLong: UInt32; |
/// <summary> |
/// If the default value of the global DoRandomSeed variable is kept, this |
/// procedure initializes a repeatable or a non repeatable seed, |
/// depending on the parameters specified. Otherwise the alternative DoRandomSeed |
/// implementation is called. The FRndSeed variable is initialized with the |
/// seed value generated. |
/// </summary> |
/// <param name="Buffer"> |
/// If a repeatable seed is to be initialized, the contents of this buffer is |
/// a parameter to the seed generation and a buffer containing at least Size |
/// bytes needs to be passed. |
/// </param> |
/// <param name="Size"> |
/// If Size is > 0 a repeatable seed is initialized. If Size is 0 the |
/// internal seed variable FRndSeed is initialized with 0. If Size is |
/// less than 0 the internal FRndSeed variable is initialized with |
/// a value derrived from current system time/performance counter using |
/// RandomSystemTime. |
/// </param> |
procedure RandomSeed(const Buffer; Size: Integer); overload; |
/// <summary> |
/// Creates a seed (starting) value for the random number generator. If the |
/// default value of the global DoRandomSeed variable is kept, a non repeatable |
/// seed based on RandomSystemTime (based on system time and potentially |
/// QueryPerformanceCounter) is created and assigned to the internal FRndSeed |
/// variable. |
/// </summary> |
procedure RandomSeed; overload; |
type |
/// <summary> |
/// Type for the random buffer generation |
/// </summary> |
/// <param name="Buffer"> |
/// Buffer in which the random bytes shall be written. The buffer needs to |
/// exist and must be of at least Size bytes length. |
/// </param> |
/// <param name="Size"> |
/// Length of the buffer to be filled in Byte. |
/// </param> |
TRandomBufferProc = procedure(out Buffer; Size: Integer) register; |
/// <summary> |
/// Type for an initialization procedure for a seed |
/// </summary> |
/// <param name="Buffer"> |
/// Buffer from which the random bytes shall be taken. The buffer needs to |
/// exist and must be of at least Size bytes length. |
/// </param> |
/// <param name="Size"> |
/// Length of the buffer in Byte. |
/// </param> |
TRandomSeedProc = procedure(const Buffer; Size: Integer); register; |
var |
// secure PRNG initialized by this unit |
/// <summary> |
/// This variable allows overriding the random number generation procedure |
/// used for data buffers. By default it is initialized to point to DoBuffer, |
/// which is a DECRandom internal procedure. |
/// </summary> |
/// <param name="Buffer"> |
/// Buffer in which the random bytes shall be written. The buffer needs to |
/// exist and must be of at least Size bytes length. |
/// </param> |
/// <param name="Size"> |
/// Length of the buffer to be filled in Byte. |
/// </param> |
DoRandomBuffer: TRandomBufferProc = nil; |
/// <summary> |
/// This variable allows overriding the seed value generation procedure. |
/// By default it is initialized with the DECRandom internal procedure DoSeed. |
/// </summary> |
DoRandomSeed: TRandomSeedProc = nil; |
/// <summary> |
/// Defines the hash-algorithm used for generatin seed values or hashed buffers |
/// </summary> |
RandomClass: TDECHashClass = THash_SHA256; |
implementation |
uses |
{$IFDEF DELPHI_2010_UP} |
System.Diagnostics |
{$ELSE} |
{$IFDEF FPC} |
{$IFDEF MSWINDOWS} |
Windows |
{$ELSE} |
LclIntf |
{$ENDIF} |
{$ELSE} |
Winapi.Windows |
{$ENDIF} |
{$ENDIF} |
; |
{$IFOPT Q+}{$DEFINE RESTORE_OVERFLOWCHECKS}{$Q-}{$ENDIF} |
{$IFOPT R+}{$DEFINE RESTORE_RANGECHECKS}{$R-}{$ENDIF} |
var |
/// <summary> |
/// A sequence of values which over time will be random by replacing each |
/// value with a derived value generated by applying the hash algorithm. |
/// </summary> |
FRegister: array[0..127] of Byte; |
/// <summary> |
/// The hash used to generate derived values stored in FRegister is calculated |
/// using this counter as input and this counter additionaly defines the index |
/// in FRegister where the value will be stored. The counter can assume higher |
/// values than the lngth of FRegister. The index calculation takes this into |
/// account. |
/// </summary> |
FCounter: Cardinal; |
/// <summary> |
/// Object instance for the hash generation algorithm used. The object is |
/// created the first time it is needed and freed in finalization of this unit. |
/// </summary> |
FHash: TDECHash = nil; |
/// <summary> |
/// Seed value, stores the last generated random number as start value for |
/// the next randum number generation |
/// </summary> |
FRndSeed: Cardinal = 0; |
function RandomSystemTime: Int64; |
type |
TInt64Rec = packed record |
Lo, Hi: UInt32; |
end; |
var |
{$IF defined(MSWINDOWS) and not defined(DELPHI_2010_UP)} |
SysTime: TSystemTime; |
{$ELSE} |
Hour, Minute, Second, Milliseconds: Word; |
{$IFEND} |
Counter: TInt64Rec; |
Time: Cardinal; |
begin |
{$IF defined(MSWINDOWS) and not defined(DELPHI_2010_UP)} |
GetSystemTime(SysTime); |
Time := ((Cardinal(SysTime.wHour) * 60 + SysTime.wMinute) * 60 + SysTime.wSecond) * 1000 + SysTime.wMilliseconds; |
QueryPerformanceCounter(Int64(Counter)); |
{$ELSE} |
DecodeTime(Now, Hour, Minute, Second, Milliseconds); |
Time := ((Cardinal(Hour) * 60 + Minute) * 60 + Second) * 1000 + Milliseconds; |
{$IFDEF DELPHI_2010_UP} |
Int64(Counter) := TStopWatch.GetTimeStamp; // uses System.Diagnostics |
{$ELSE} |
{$IFDEF FPC} |
Int64(Counter) := LclIntf.GetTickCount * 10000 {TicksPerMillisecond}; // uses LclIntf |
{$ENDIF} |
{$ENDIF} |
{$IFEND} |
Result := Time + Counter.Hi; |
Inc(Result, Ord(Result < Time)); // add "carry flag" |
Inc(Result, Counter.Lo); |
end; |
/// <summary> |
/// Simplistic algorithm for filling a buffer with random numbers. This |
/// algorithm is directly dependant on the seed passed, which by internal use |
/// will normally be FRndSeed. |
/// </summary> |
/// <param name="Seed"> |
/// Seed value as starting value |
/// </param> |
/// <param name="Buffer"> |
/// Buffer which shall be filled with random bytes |
/// </param> |
/// <param name="Size"> |
/// Size of the buffer in byte |
/// </param> |
/// <returns> |
/// New seed value after calculating the random number for the last byte in |
/// the buffer. |
/// </returns> |
function DoRndBuffer(Seed: Cardinal; out Buffer; Size: Integer): Cardinal; |
// comparable to Delphi Random() function |
var |
P: PByte; |
begin |
Result := Seed; |
P := @Buffer; |
if P <> nil then |
begin |
while Size > 0 do |
begin |
Result := Result * $08088405 + 1; |
P^ := Byte(Result shr 24); |
Inc(P); |
Dec(Size); |
end; |
end; |
end; |
procedure RandomBuffer(out Buffer; Size: Integer); |
begin |
if Assigned(DoRandomBuffer) then |
DoRandomBuffer(Buffer, Size) |
else |
FRndSeed := DoRndBuffer(FRndSeed, Buffer, Size); |
end; |
function RandomBytes(Size: Integer): TBytes; |
begin |
SetLength(Result, Size); |
RandomBuffer(Result[0], Size); |
end; |
function RandomRawByteString(Size: Integer): RawByteString; |
begin |
SetLength(Result, Size); |
{$IFDEF HAVE_STR_LIKE_ARRAY} |
RandomBuffer(Result[Low(Result)], Size); |
{$ELSE} |
RandomBuffer(Result[1], Size); |
{$ENDIF} |
end; |
function RandomLong: UInt32; |
begin |
RandomBuffer(Result, SizeOf(Result)); |
end; |
procedure RandomSeed(const Buffer; Size: Integer); |
begin |
if Assigned(DoRandomSeed) then |
DoRandomSeed(Buffer, Size) |
else |
begin |
if Size >= 0 then |
begin |
FRndSeed := 0; |
while Size > 0 do |
begin |
Dec(Size); |
FRndSeed := (FRndSeed shl 8 + FRndSeed shr 24) xor TByteArray(Buffer)[Size] |
end; |
end |
else |
FRndSeed := RandomSystemTime; |
end; |
end; |
procedure RandomSeed; |
begin |
RandomSeed('', -1); |
end; |
/// <summary> |
/// Generate one random byte and modify FCounter and FRegister |
/// </summary> |
function DoGenerateRandomByte: Byte; |
begin |
if FHash = nil then |
FHash := RandomClass.Create; |
FHash.Init; |
FHash.Calc(FCounter, SizeOf(FCounter)); |
FHash.Calc(FRegister, SizeOf(FRegister)); |
FHash.Done; |
FRegister[FCounter mod SizeOf(FRegister)] := FRegister[FCounter mod SizeOf(FRegister)] xor FHash.DigestAsBytes[0]; |
Inc(FCounter); |
Result := FHash.DigestAsBytes[1]; // no real predictable dependency to above FHash.Digest[0] ! |
end; |
procedure DoBuffer(out Buffer; Size: Integer); |
var |
i: Integer; |
begin |
for i := 0 to Size - 1 do |
TByteArray(Buffer)[i] := DoGenerateRandomByte; |
end; |
/// <summary> |
/// Initializes a repeatable or a non repeatable seed, depending on the |
/// parameters specified |
/// </summary> |
/// <param name="Buffer"> |
/// If a repeatable seed is to be initialized, the contents of this buffer is |
/// a parameter to the seed generation and a buffer containing at least Size |
/// bytes needs to be passed. |
/// </param> |
/// <param name="Size"> |
/// If Size is >= 0 a repeatable seed is initialized, otherwise a non repeatable |
/// based on system time |
/// </param> |
procedure DoSeed(const Buffer; Size: Integer); |
var |
i: Integer; |
t: Cardinal; |
begin |
if Size >= 0 then |
begin |
// initalize a repeatable Seed |
FillChar(FRegister, SizeOf(FRegister), 0); |
FCounter := 0; |
for i := 0 to Size - 1 do |
FRegister[i mod SizeOf(FRegister)] := FRegister[i mod SizeOf(FRegister)] xor TByteArray(Buffer)[i]; |
end |
else |
begin |
// ! ATTENTION ! |
// Initalizes a non-repeatable Seed based on Timers, which is not secure |
// and inpredictable. The user should call RandomSeed(Data, SizeOf(Data)) |
// instead, where Date contains i.e. user generated (Human) input. |
t := RandomSystemTime; |
for i := Low(FRegister) to High(FRegister) do |
begin |
FRegister[i] := FRegister[i] xor Byte(t); |
t := t shl 1 or t shr 31; |
end; |
end; |
for i := Low(FRegister) to High(FRegister) do |
DoGenerateRandomByte; |
FCounter := 0; |
end; |
procedure DoInit; |
begin |
DoRandomBuffer := DoBuffer; |
DoRandomSeed := DoSeed; |
DoSeed('', 0); |
end; |
procedure DoDone; |
begin |
try |
if FHash <> nil then |
FHash.Free; |
except |
end; |
FHash := nil; |
FreeAndNil(FHash); |
FillChar(FRegister, SizeOf(FRegister), 0); |
FCounter := 0; |
end; |
{$IFDEF RESTORE_RANGECHECKS}{$R+}{$ENDIF} |
{$IFDEF RESTORE_OVERFLOWCHECKS}{$Q+}{$ENDIF} |
initialization |
{$DEFINE AUTO_PRNG} |
DoInit; |
{$IFDEF AUTO_PRNG} // see DECOptions.inc |
RandomSeed; |
{$ENDIF AUTO_PRNG} |
finalization |
DoDone; |
end. |
/trunk/Decoder5/VCL_DEC/DECTypes.pas |
---|
0,0 → 1,208 |
{***************************************************************************** |
The DEC team (see file NOTICE.txt) licenses this file |
to you under the Apache License, Version 2.0 (the |
"License"); you may not use this file except in compliance |
with the License. A copy of this licence is found in the root directory |
of this project in the file LICENCE.txt or alternatively 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. |
*****************************************************************************} |
/// <summary> |
/// Declarations of various datatypes, some of those have not been |
/// declared for certain platforms but are used in DEC and some do change |
/// meanings between platforms like PLongWord where LongWord is 32 bit on |
/// Windows and Android but 64 bit on iOS for instance |
/// </summary> |
unit DECTypes; |
interface |
{$INCLUDE DECOptions.inc} |
uses |
{$IFDEF FPC} |
SysUtils; |
{$ELSE} |
System.SysUtils; |
{$ENDIF} |
type |
{$IFNDEF FPC} |
{$IF CompilerVersion <= 20} |
// In D2009 NativeInt was not properly treated by the compiler under certain |
// conditions. See: http://qc.embarcadero.com/wc/qcmain.aspx?d=71292 |
NativeInt = Integer; |
{$IFEND} |
{$ENDIF} |
/// <summary> |
/// Replacement for PByteArray |
/// </summary> |
PUInt8Array = ^TInt8Array; |
TInt8Array = array[0..MaxInt-1] of Byte; |
PUInt32Array = ^TUInt32Array; |
TUInt32Array = array[0..1023] of UInt32; |
/// <summary> |
/// Replacement for PLongWord, as LongWord changes between platforms from |
/// 32 to 64 bit |
/// </summary> |
PUInt32 = ^UINT32; |
PUInt64Array = ^TUInt64Array; |
TUInt64Array = array[0..1023] of UInt64; |
/// <summary> |
/// Declared here because it is used by Blowfish cipher and BCrypt hash |
/// </summary> |
PBlowfish = ^TBlowfishMatrix; |
TBlowfishMatrix = array[0..3, 0..255] of UInt32; |
TBlowfishKey = array[0..17] of UInt32; |
/// <summary> |
/// List of standard bit lengths defined in the official standard for some |
/// algorithm property which allows a variable bit length. |
/// </summary> |
TStandardBitLengths = array of UInt16; |
/// <summary> |
/// Reason for calling the progress event |
/// </summary> |
TDECProgressState = (Started, Processing, Finished); |
/// <summary> |
/// Event type used by several hash- and cipher methods to display their |
/// progress. It can be implemented as regular method, procedure and as |
/// anonymous method, means: in place. |
/// </summary> |
/// <param name="Size"> |
/// Number of bytes to process. For files this is usually the file size. For |
/// streams this can be less than the stream size if the stream is not being |
/// processed from the beginning. |
/// </param> |
/// <param name="Pos"> |
/// Position within size in byte. For streams this may be a position |
/// relative to the starting position for processing. |
/// </param> |
{$ifdef HAVE_LAMBDAS} |
TDECProgressEvent = reference to procedure(Size, Pos: Int64; State: TDECProgressState); |
{$else} |
TDECProgressEvent = procedure(Size, Pos: Int64; State: TDECProgressState); |
{$endif} |
// Exception Classes |
/// <summary> |
/// Base exception class for all DEC specific exceptions, |
/// </summary> |
EDECException = class(Exception) |
public |
{$IFDEF FMXTranslateableExceptions} |
/// <summary> |
/// Creates the exception instance and makes the exception message translateable |
/// via Firemonkey's TLang translation mechanism. Normal ressource strings |
/// are not translated in the same way on mobile platforms as they are on |
/// Win32/Win64. |
/// </summary> |
/// <param name="Msg"> |
/// String with a failure message to be output or logged |
/// </param> |
constructor Create(const Msg: string); reintroduce; overload; |
/// <summary> |
/// Creates the exception instance and makes the exception message translateable |
/// via Firemonkey's TLang translation mechanism. Normal ressource strings |
/// are not translated in the same way on mobile platforms as they are on |
/// Win32/Win64. |
/// </summary> |
/// <param name="Msg"> |
/// String with a failure message to be output or logged |
/// </param> |
/// <param name="Args"> |
/// Array with values for the parameters specified in the format string |
/// </param> |
constructor CreateFmt(const Msg: string; |
const Args: array of const); reintroduce; overload; |
{$ENDIF} |
end; |
/// <summary> |
/// Exception class used when reporting that a class searched in a list is |
/// not contained in that list, e.g. when searching for a non existant |
/// formatting class. |
/// </summary> |
EDECClassNotRegisteredException = class(EDECException); |
/// <summary> |
/// Exception class for reporting formatting related exceptions |
/// </summary> |
EDECFormatException = class(EDECException); |
/// <summary> |
/// Exception class for reporting exceptions related to hash functions |
/// </summary> |
EDECHashException = class(EDECException); |
/// <summary> |
/// Exception class for reporting encryption/decryption caused exceptions |
/// </summary> |
EDECCipherException = class(EDECException); |
/// <summary> |
/// Exception class for reporting calculation of a wrong authentication |
/// value when decrypting using a cipher supporting authentication |
/// </summary> |
EDECCipherAuthenticationException = class(EDECException); |
/// <summary> |
/// Exception class for reporting the use of abstract things which cannot |
/// be called directly |
/// </summary> |
EDECAbstractError = class(EDECException) |
/// <summary> |
/// Create the exception using a meaningfull error message |
/// </summary> |
constructor Create(ClassName: string); overload; |
end; |
const |
{ TODO : Check why this is a constant, which is immediately used by the |
resource string. Is this because of the lack of resource string support |
of FMX on some platforms?} |
cAbstractError = 'Abstract Error: %s is not implemented'; |
resourcestring |
sAbstractError = cAbstractError; |
implementation |
{ EDECException } |
{$IFDEF FMXTranslateableExceptions} |
constructor EDECException.Create(const Msg: string); |
begin |
inherited Create(Translate(msg)); |
end; |
constructor EDECException.CreateFmt(const Msg: string; |
const Args: array of const); |
begin |
inherited Create(Format(Translate(Msg), Args)); |
end; |
constructor EDECAbstractError.Create(ClassName: string); |
begin |
inherited Create(Format(Translate(sAbstractError), [ClassName])); |
end; |
{$ELSE} |
constructor EDECAbstractError.Create(ClassName: string); |
begin |
inherited CreateResFmt(@sAbstractError, [ClassName]); |
end; |
{$ENDIF} |
end. |
/trunk/Decoder5/VCL_DEC/DECUtil.pas |
---|
0,0 → 1,632 |
{***************************************************************************** |
The DEC team (see file NOTICE.txt) licenses this file |
to you under the Apache License, Version 2.0 (the |
"License"); you may not use this file except in compliance |
with the License. A copy of this licence is found in the root directory |
of this project in the file LICENCE.txt or alternatively 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. |
*****************************************************************************} |
/// <summary> |
/// Utility functions |
/// </summary> |
unit DECUtil; |
{$INCLUDE DECOptions.inc} |
interface |
uses |
{$IFDEF FPC} |
SysUtils, Classes; |
{$ELSE} |
System.SysUtils, System.Classes; |
{$ENDIF} |
// Byte Ordering |
/// <summary> |
/// Reverses all bits in the passed value, 1111 0000 will be 0000 1111 afterwards |
/// </summary> |
/// <param name="Source"> |
/// Value who's bits are to be reversed |
/// </param> |
/// <returns> |
/// Representation of Source but with all bits reversed |
/// </returns> |
function ReverseBits(Source: UInt32): UInt32; overload; |
/// <summary> |
/// Reverses all bits in the passed value, 1111 0000 will be 0000 1111 afterwards |
/// </summary> |
/// <param name="Source"> |
/// Value who's bits are to be reversed |
/// </param> |
/// <returns> |
/// Representation of Source but with all bits reversed |
/// </returns> |
function ReverseBits(Source: UInt8): UInt8; overload; |
/// <summary> |
/// Reverses the order of the bytes contained in the buffer passed in. |
/// e.g. 1 2 3 will be 3 2 1 afterwards |
/// </summary> |
/// <param name="Buffer"> |
/// Buffer who's contents is to be reversed. |
/// </param> |
/// <param name="Size"> |
/// Size of the passed buffer in byte |
/// </param> |
procedure SwapBytes(var Buffer; Size: Integer); |
/// <summary> |
/// Reverses the byte order of the passed variable |
/// </summary> |
/// <param name="Source"> |
/// value who's byte order shall be reversed |
/// </param> |
/// <returns> |
/// value of the passed vallue with reversed byte order |
/// </returns> |
function SwapUInt32(Source: UInt32): UInt32; |
/// <summary> |
/// Reverses the byte order for all entries of a passed array of UInt32 values |
/// </summary> |
/// <param name="Source"> |
/// Data with a layout like an array of UInt32 values for which the byte order |
/// of all entries shall be reversed |
/// </param> |
/// <param name="Dest"> |
/// In this variable the reversed values will be stored. Layout is like an |
/// array of UInt32 values |
/// </param> |
/// <param name="Count"> |
/// Number of values to be reversed |
/// </param> |
procedure SwapUInt32Buffer(const Source; var Dest; Count: Integer); |
/// <summary> |
/// Reverses the byte order of an Int64 value |
/// </summary> |
/// <param name="Source"> |
/// Value who's byte order shall be reversed |
/// </param> |
/// <returns> |
/// Representation of the passed value after reversing its byte order |
/// </returns> |
function SwapInt64(Source: Int64): Int64; |
/// <summary> |
/// Reverses the byte order for all entries of a passed array of Int64 values |
/// </summary> |
/// <param name="Source"> |
/// Data with a layout like an array of Int64 values for which the byte order |
/// of all entries shall be reversed |
/// </param> |
/// <param name="Dest"> |
/// In this variable the reversed values will be stored. Layout is like an |
/// array of Int64 values |
/// </param> |
/// <param name="Count"> |
/// Number of values to be reversed |
/// </param> |
procedure SwapInt64Buffer(const Source; var Dest; Count: Integer); |
/// <summary> |
/// XORs the contents of two passed buffers and stores the result into a 3rd one |
/// </summary> |
/// <param name="Left"> |
/// One source buffer of bytes to be XORed |
/// </param> |
/// <param name="Right"> |
/// The other source buffer of bytes to be XORed. Buffer size must be equal |
/// or bigger than Left |
/// </param> |
/// <param name="Size"> |
/// Buffer size in byte. |
/// </param> |
/// <param name="Dest"> |
/// Buffer where the result is to be stored in. Must be of equal or bigger |
/// size than Left |
/// </param> |
procedure XORBuffers(const Left, Right; Size: Integer; var Dest); |
// Buffer and Data Protection |
/// <summary> |
/// Fills a given buffer with zeros in a secure way |
/// </summary> |
/// <param name="Buffer"> |
/// Buffer to be zeroed. In case of TBytes to be passed as Buf[0] |
/// </param> |
/// <param name="Size"> |
/// Buffer size in byte |
/// </param> |
procedure ProtectBuffer(var Buffer; Size: NativeUInt); |
/// <summary> |
/// Fills a given stream with zeros in a secure way |
/// </summary> |
/// <param name="Stream"> |
/// Stream to be zeroed. |
/// </param> |
/// <param name="SizeToProtect"> |
/// Number of bytes of that stream to be zeroed. Starting point is Stream.Position |
/// </param> |
procedure ProtectStream(Stream: TStream; SizeToProtect: Int64 = 0); |
/// <summary> |
/// Fills a given byte array with zeros in a secure way and then empties the |
/// buffer. |
/// </summary> |
/// <param name="Source"> |
/// Byte array to be zeroed. The length of the passed buffer is 0 afterwards! |
/// </param> |
procedure ProtectBytes(var Source: TBytes); |
/// <summary> |
/// Overwrites the string's contents in a secure way and returns an empty string. |
/// </summary> |
/// <param name="Source"> |
/// String to be safely overwritten |
/// </param> |
procedure ProtectString(var Source: string); overload; |
/// <summary> |
/// Overwrites the string's contents in a secure way and returns an empty string. |
/// </summary> |
/// <param name="Source"> |
/// String to be safely overwritten |
/// </param> |
procedure ProtectString(var Source: RawByteString); overload; |
{$IFDEF ANSISTRINGSUPPORTED} |
/// <summary> |
/// Overwrites the string's contents in a secure way and returns an empty string. |
/// </summary> |
/// <param name="Source"> |
/// String to be safely overwritten |
/// </param> |
procedure ProtectString(var Source: AnsiString); overload; |
{$ENDIF} |
{$IFNDEF NEXTGEN} |
/// <summary> |
/// Overwrites the string's contents in a secure way and returns an empty string. |
/// </summary> |
/// <param name="Source"> |
/// String to be safely overwritten |
/// </param> |
procedure ProtectString(var Source: WideString); overload; |
{$ENDIF} |
// Byte/String conversion |
/// <summary> |
/// Converts a byte array to a RawByteString |
/// </summary> |
/// <param name="Source"> |
/// Byte array to be converted into a string. An empty byte array is allowed |
/// and results in an empty string. |
/// </param> |
/// <returns> |
/// RawByteString with the same length as Source and all bytes copied over. |
/// No conversion of any sort is being applied to the bytes. |
/// </returns> |
/// <remarks> |
/// Not easily replaced by some RTL function as none for TBytes to RawByteString |
/// seems to exist |
/// </remarks> |
function BytesToRawString(const Source: TBytes): RawByteString; |
// Buffer comparison |
/// <summary> |
/// Checks whether two TBytes values contain the same data |
/// </summary> |
/// <param name="a"> |
/// First value for the comparison |
/// </param> |
/// <param name="b"> |
/// Second value for the comparison |
/// </param> |
/// <returns> |
/// true, if both contain exactly the same data |
/// </returns> |
function IsEqual(const a, b : TBytes ):Boolean; |
implementation |
uses |
DECUtilRawByteStringHelper, DECTypes; |
const |
// Bit Lookup Table - see 'Bit Twiddling Hacks' by Sean Eron Anderson |
// http://graphics.stanford.edu/~seander/bithacks.html |
ReverseBitLookupTable256: array[0..255] of Byte = ($00, $80, $40, $C0, |
$20, $A0, $60, $E0, $10, $90, $50, $D0, $30, $B0, $70, $F0, $08, $88, |
$48, $C8, $28, $A8, $68, $E8, $18, $98, $58, $D8, $38, $B8, $78, $F8, |
$04, $84, $44, $C4, $24, $A4, $64, $E4, $14, $94, $54, $D4, $34, $B4, |
$74, $F4, $0C, $8C, $4C, $CC, $2C, $AC, $6C, $EC, $1C, $9C, $5C, $DC, |
$3C, $BC, $7C, $FC, $02, $82, $42, $C2, $22, $A2, $62, $E2, $12, $92, |
$52, $D2, $32, $B2, $72, $F2, $0A, $8A, $4A, $CA, $2A, $AA, $6A, $EA, |
$1A, $9A, $5A, $DA, $3A, $BA, $7A, $FA, $06, $86, $46, $C6, $26, $A6, |
$66, $E6, $16, $96, $56, $D6, $36, $B6, $76, $F6, $0E, $8E, $4E, $CE, |
$2E, $AE, $6E, $EE, $1E, $9E, $5E, $DE, $3E, $BE, $7E, $FE, $01, $81, |
$41, $C1, $21, $A1, $61, $E1, $11, $91, $51, $D1, $31, $B1, $71, $F1, |
$09, $89, $49, $C9, $29, $A9, $69, $E9, $19, $99, $59, $D9, $39, $B9, |
$79, $F9, $05, $85, $45, $C5, $25, $A5, $65, $E5, $15, $95, $55, $D5, |
$35, $B5, $75, $F5, $0D, $8D, $4D, $CD, $2D, $AD, $6D, $ED, $1D, $9D, |
$5D, $DD, $3D, $BD, $7D, $FD, $03, $83, $43, $C3, $23, $A3, $63, $E3, |
$13, $93, $53, $D3, $33, $B3, $73, $F3, $0B, $8B, $4B, $CB, $2B, $AB, |
$6B, $EB, $1B, $9B, $5B, $DB, $3B, $BB, $7B, $FB, $07, $87, $47, $C7, |
$27, $A7, $67, $E7, $17, $97, $57, $D7, $37, $B7, $77, $F7, $0F, $8F, |
$4F, $CF, $2F, $AF, $6F, $EF, $1F, $9F, $5F, $DF, $3F, $BF, $7F, $FF); |
{$ifdef FPC} |
{$include fpc\DECUtil.inc} |
{$endif} |
{$ifdef X64ASM} |
{$include x86_64\DECUtil.inc} |
{$else}{$ifdef X86ASM} |
{$include x86\DECUtil.inc} |
{$endif}{$endif} |
function ReverseBits(Source: UInt32): UInt32; |
begin |
Result := (ReverseBitLookupTable256[Source and $FF] shl 24) or |
(ReverseBitLookupTable256[(Source shr 8) and $FF] shl 16) or |
(ReverseBitLookupTable256[(Source shr 16) and $FF] shl 8) or |
(ReverseBitLookupTable256[(Source shr 24) and $FF]); |
end; |
function ReverseBits(Source: UInt8): UInt8; |
begin |
Result := ReverseBitLookupTable256[Source]; |
end; |
procedure SwapBytes(var Buffer; Size: Integer); |
{$IFDEF X86ASM} |
asm |
CMP EDX,1 |
JLE @@3 |
AND EAX,EAX |
JZ @@3 |
PUSH EBX |
MOV ECX,EDX |
LEA EDX,[EAX + ECX - 1] |
SHR ECX,1 |
@@1: MOV BL,[EAX] |
XCHG BL,[EDX] |
DEC EDX |
MOV [EAX],BL |
INC EAX |
DEC ECX |
JNZ @@1 |
@@2: POP EBX |
@@3: |
end; |
{$ELSE !X86ASM} |
var |
T: Byte; |
P, Q: PByte; |
i: Integer; |
begin |
P := @Buffer; |
Inc(P, Size - 1); |
Q := @Buffer; |
for i := 0 to Size div 2 - 1 do // using P/Q comparison with 'while' breaks some compilers |
begin |
T := Q^; |
Q^ := P^; |
P^ := T; |
Dec(P); |
Inc(Q); |
end; |
end; |
{$ENDIF !X86ASM} |
{$IFNDEF SwapUInt32_asm} |
function SwapUInt32(Source: UInt32): UInt32; |
begin |
Result := Source shl 24 or |
Source shr 24 or |
Source shl 8 and $00FF0000 or |
Source shr 8 and $0000FF00; |
end; |
{$ENDIF PUREPASCAL} |
procedure SwapUInt32Buffer(const Source; var Dest; Count: Integer); |
{$IFDEF X86ASM} |
asm |
TEST ECX,ECX |
JLE @Exit |
PUSH EDI |
SUB EAX,4 |
SUB EDX,4 |
@@1: MOV EDI,[EAX + ECX * 4] |
BSWAP EDI |
MOV [EDX + ECX * 4],EDI |
DEC ECX |
JNZ @@1 |
POP EDI |
@Exit: |
end; |
{$ELSE !X86ASM} |
var |
i: Integer; |
T: UInt32; |
begin |
for i := 0 to Count - 1 do |
begin |
T := TUInt32Array(Source)[i]; |
TUInt32Array(Dest)[i] := (T shl 24) or (T shr 24) or |
((T shl 8) and $00FF0000) or ((T shr 8) and $0000FF00); |
end; |
end; |
{$ENDIF !X86ASM} |
{$IFNDEF SwapInt64_asm} |
function SwapInt64(Source: Int64): Int64; |
var |
L, H: Cardinal; |
begin |
L := Int64Rec(Source).Lo; |
H := Int64Rec(Source).Hi; |
L := L shl 24 or L shr 24 or L shl 8 and $00FF0000 or L shr 8 and $0000FF00; |
H := H shl 24 or H shr 24 or H shl 8 and $00FF0000 or H shr 8 and $0000FF00; |
Int64Rec(Result).Hi := L; |
Int64Rec(Result).Lo := H; |
end; |
{$ENDIF !X86ASM} |
procedure SwapInt64Buffer(const Source; var Dest; Count: Integer); |
{$IFDEF X86ASM} |
asm |
TEST ECX,ECX |
JLE @Exit |
PUSH ESI |
PUSH EDI |
LEA ESI,[EAX + ECX * 8] |
LEA EDI,[EDX + ECX * 8] |
NEG ECX |
@@1: MOV EAX,[ESI + ECX * 8] |
MOV EDX,[ESI + ECX * 8 + 4] |
BSWAP EAX |
BSWAP EDX |
MOV [EDI + ECX * 8 + 4],EAX |
MOV [EDI + ECX * 8],EDX |
INC ECX |
JNZ @@1 |
POP EDI |
POP ESI |
@Exit: |
end; |
{$ELSE !X86ASM} |
var |
H, L: Cardinal; |
i: Integer; |
begin |
for i := 0 to Count - 1 do |
begin |
H := TUInt32Array(Source)[i * 2 ]; |
L := TUInt32Array(Source)[i * 2 + 1]; |
TUInt32Array(Dest)[i * 2 ] := L shl 24 or L shr 24 or L shl 8 and $00FF0000 or L shr 8 and $0000FF00; |
TUInt32Array(Dest)[i * 2 + 1] := H shl 24 or H shr 24 or H shl 8 and $00FF0000 or H shr 8 and $0000FF00; |
end; |
end; |
{$ENDIF !X86ASM} |
procedure XORBuffers(const Left, Right; Size: Integer; var Dest); |
// Dest^ = Source1^ xor Source2^ |
// Buffers must have the same size! |
{$IFDEF X86ASM} |
asm |
AND ECX,ECX |
JZ @@5 |
PUSH ESI |
PUSH EDI |
MOV ESI,EAX |
MOV EDI,Dest |
@@1: TEST ECX,3 |
JNZ @@3 |
@@2: SUB ECX,4 |
JL @@4 |
MOV EAX,[ESI + ECX] |
XOR EAX,[EDX + ECX] |
MOV [EDI + ECX],EAX |
JMP @@2 |
@@3: DEC ECX |
MOV AL,[ESI + ECX] |
XOR AL,[EDX + ECX] |
MOV [EDI + ECX],AL |
JMP @@1 |
@@4: POP EDI |
POP ESI |
@@5: |
end; |
{$ELSE !X86ASM} |
var |
P, Q, D: PByte; |
i: Integer; |
begin |
P := @Left; |
Q := @Right; |
D := @Dest; |
for i := 0 to Size - 1 do |
begin |
D^ := P^ xor Q^; |
Inc(P); |
Inc(Q); |
Inc(D); |
end; |
end; |
{$ENDIF !X86ASM} |
const |
WipeCount = 4; |
WipeBytes: array[0..WipeCount - 1] of Byte = ( |
$55, // 0101 0101 |
$AA, // 1010 1010 |
$FF, // 1111 1111 |
$00 // 0000 0000 |
); |
procedure ProtectBuffer(var Buffer; Size: NativeUInt); |
var |
Count: Integer; |
begin |
if Size > 0 then |
begin |
for Count := 0 to WipeCount - 1 do |
FillChar(Buffer, Size, WipeBytes[Count]); |
end; |
end; |
procedure ProtectStream(Stream: TStream; SizeToProtect: Int64 = 0); |
const |
BufferSize = 512; |
var |
Buffer: string; |
Count, Bytes, Size: Integer; |
Position: Integer; |
begin |
Position := Stream.Position; |
Size := Stream.Size; |
if SizeToProtect <= 0 then |
begin |
SizeToProtect := Size; |
Position := 0; |
end else |
begin |
Dec(Size, Position); |
if SizeToProtect > Size then |
SizeToProtect := Size; |
end; |
SetLength(Buffer, BufferSize); |
for Count := 0 to WipeCount -1 do |
begin |
Stream.Position := Position; |
Size := SizeToProtect; |
{$IFDEF HAVE_STR_LIKE_ARRAY} |
FillChar(Buffer[Low(Buffer)], BufferSize, WipeBytes[Count]); |
{$ELSE} |
FillChar(Buffer[1], BufferSize, WipeBytes[Count]); |
{$ENDIF} |
while Size > 0 do |
begin |
Bytes := Size; |
if Bytes > BufferSize then |
Bytes := BufferSize; |
{$IFDEF HAVE_STR_LIKE_ARRAY} |
Stream.Write(Buffer[Low(Buffer)], Bytes); |
{$ELSE} |
Stream.Write(Buffer[1], Bytes); |
{$ENDIF} |
Dec(Size, Bytes); |
end; |
end; |
end; |
procedure ProtectBytes(var Source: TBytes); |
begin |
if (Source <> nil) and (Length(Source) > 0) then |
begin |
ProtectBuffer(Source[0], Length(Source)); |
SetLength(Source, 0); |
end; |
end; |
procedure ProtectString(var Source: string); |
begin |
if Length(Source) > 0 then |
begin |
System.UniqueString(Source); |
{$IFDEF HAVE_STR_LIKE_ARRAY} |
ProtectBuffer(Pointer(Source)^, Length(Source) * SizeOf(Source[Low(Source)])); |
{$ELSE} |
ProtectBuffer(Pointer(Source)^, Length(Source) * SizeOf(Source[1])); |
{$ENDIF} |
Source := ''; |
end; |
end; |
procedure ProtectString(var Source: RawByteString); |
begin |
if Length(Source) > 0 then |
begin |
// UniqueString(Source); cannot be called with a RawByteString as there is |
// no overload for it, so we need to call our own one. |
DECUtilRawByteStringHelper.UniqueString(Source); |
{$IFDEF HAVE_STR_LIKE_ARRAY} |
ProtectBuffer(Pointer(Source)^, Length(Source) * SizeOf(Source[Low(Source)])); |
{$ELSE} |
ProtectBuffer(Pointer(Source)^, Length(Source) * SizeOf(Source[1])); |
{$ENDIF} |
Source := ''; |
end; |
end; |
{$IFNDEF NEXTGEN} |
{$IFDEF ANSISTRINGSUPPORTED} //{$ifndef FPC} // FPC use RawByteString == AnsiString |
procedure ProtectString(var Source: AnsiString); overload; |
begin |
if Length(Source) > 0 then |
begin |
System.UniqueString(Source); |
{$IFDEF HAVE_STR_LIKE_ARRAY} |
ProtectBuffer(Pointer(Source)^, Length(Source) * SizeOf(Source[Low(Source)])); |
{$ELSE} |
ProtectBuffer(Pointer(Source)^, Length(Source) * SizeOf(Source[1])); |
{$ENDIF} |
Source := ''; |
end; |
end; |
{$endif FPC} |
procedure ProtectString(var Source: WideString); overload; |
begin |
if Length(Source) > 0 then |
begin |
System.UniqueString(Source); // for OS <> Win, WideString is not RefCounted on Win |
{$IFDEF HAVE_STR_LIKE_ARRAY} |
ProtectBuffer(Pointer(Source)^, Length(Source) * SizeOf(Source[Low(Source)])); |
{$ELSE} |
ProtectBuffer(Pointer(Source)^, Length(Source) * SizeOf(Source[1])); |
{$ENDIF} |
Source := ''; |
end; |
end; |
{$ENDIF} |
function BytesToRawString(const Source: TBytes): RawByteString; |
begin |
SetLength(Result, Length(Source)); |
if Length(Source) > 0 then |
begin |
// determine lowest string index for handling of ZeroBasedStrings |
{$IFDEF HAVE_STR_LIKE_ARRAY} |
Move(Source[0], Result[Low(result)], Length(Source)); |
{$ELSE} |
Move(Source[0], Result[1], Length(Source)); |
{$ENDIF} |
end; |
end; |
function IsEqual(const a, b : TBytes):Boolean; |
begin |
if (length(a) <> length(b)) then |
Result := false |
else |
if (Length(a) > 0) then |
Result := CompareMem(@a[0], @b[0], length(a)) |
else |
Result := true; |
end; |
end. |
/trunk/Decoder5/VCL_DEC/DECUtilRawByteStringHelper.pas |
---|
0,0 → 1,137 |
{***************************************************************************** |
The DEC team (see file NOTICE.txt) licenses this file |
to you under the Apache License, Version 2.0 (the |
"License"); you may not use this file except in compliance |
with the License. A copy of this licence is found in the root directory of |
this project in the file LICENCE.txt or alternatively 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. |
*****************************************************************************} |
unit DECUtilRawByteStringHelper; |
interface |
{$INCLUDE DECOptions.inc} |
/// <summary> |
/// System.pas does not contain a RawByteString compatible version of this |
/// routine so we created our own, copying and adapting code from system.pas |
/// for the NextGen compiler and using a solution from Remy Lebeau for the |
/// Win32/Win64 compiler. |
/// </summary> |
/// <param name="str"> |
/// String to be processed |
/// </param> |
procedure UniqueString(var Str: RawByteString); |
implementation |
uses |
{$IFDEF FPC} |
SysUtils; |
{$ELSE} |
System.SysUtils; |
{$ENDIF} |
type |
// Duplicate of the System.pas internal declaration. Needs to be kept in sync. |
PStrRec = ^StrRec; |
StrRec = packed record |
{$IFDEF CPU64BITS} |
_Padding: Integer; // Make 16 byte align for payload.. |
{$ENDIF} |
codePage: Word; |
elemSize: Word; |
refCnt: Integer; |
length: Integer; |
end; |
function _NewAnsiString(CharLength: Integer; CodePage: Word): Pointer; |
var |
P: PStrRec; |
begin |
Result := nil; |
if CharLength > 0 then |
begin |
// Alloc an extra null for strings with even length. This has no actual |
// cost since the allocator will round up the request to an even size |
// anyway. All _WideStr allocations have even length, and need a double |
// null terminator. |
if CharLength >= MaxInt - SizeOf(StrRec) then |
raise EIntOverflow.Create( |
'IntOverflow in _NewAnsiString. CharLength: ' + IntToStr(CharLength)); |
GetMem(P, CharLength + SizeOf(StrRec) + 1 + ((CharLength + 1) and 1)); |
Result := Pointer(PByte(P) + SizeOf(StrRec)); |
P.length := CharLength; |
P.refcnt := 1; |
if CodePage = 0 then |
{$IFDEF NEXTGEN} |
CodePage := Word(CP_UTF8); |
{$ELSE NEXTGEN} |
CodePage := Word(DefaultSystemCodePage); |
{$ENDIF NEXTGEN} |
P.codePage := CodePage; |
P.elemSize := 1; |
PWideChar(Result)[CharLength div 2] := #0; // length guaranteed >= 2 |
end; |
end; |
function _LStrClr(var S): Pointer; |
var |
P: PStrRec; |
begin |
if Pointer(S) <> nil then |
begin |
P := Pointer(PByte(S) - SizeOf(StrRec)); |
Pointer(S) := nil; |
if P.refCnt > 0 then |
begin |
{$IFDEF FPC} |
if InterlockedDecrement(P.refCnt) = 0 then |
{$ELSE} |
{$IF CompilerVersion >= 24.0} |
if AtomicDecrement(P.refCnt) = 0 then |
{$ELSE} |
Dec(P.refCnt); |
if (P.refCnt = 0) then |
{$IFEND} |
{$ENDIF} |
FreeMem(P); |
end; |
end; |
Result := @S; |
end; |
function InternalUniqueStringA(var Str: RawByteString): Pointer; |
var |
P: PStrRec; |
begin |
Result := Pointer(Str); |
if Result <> nil then |
begin |
Result := Pointer(Str); |
P := Pointer(PByte(Str) - sizeof(StrRec)); |
if P.refCnt <> 1 then |
begin |
Result := _NewAnsiString(P.length, P.codePage); |
Move(Pointer(Str)^, Pointer(Result)^, P.length); |
_LStrClr(Str); |
Pointer(Str) := Result; |
end; |
end; |
end; |
procedure UniqueString(var Str: RawByteString); |
begin |
InternalUniqueStringA(Str); |
end; |
end. |
/trunk/Decoder5/VCL_DEC/DECZIPHelper.pas |
---|
0,0 → 1,87 |
{***************************************************************************** |
The DEC team (see file NOTICE.txt) licenses this file |
to you under the Apache License, Version 2.0 (the |
"License"); you may not use this file except in compliance |
with the License. A copy of this licence is found in the root directory of |
this project in the file LICENCE.txt or alternatively 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. |
*****************************************************************************} |
/// <summary> |
/// Routines etc. for use with encrypted ZIP files |
/// </summary> |
unit DECZIPHelper; |
interface |
uses |
DECCiphers, |
DECCipherFormats; |
/// <summary> |
/// Creates an instance for encrypting or decrypting the algorithm specified |
/// by the ZIP Algorithm ID documented in chapter 7.2.3.2 found in |
/// https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT |
/// </summary> |
/// <param name="AlgorithmID"> |
/// Unique ID for a crypto algorithm as specified in the documentation |
/// </param> |
/// <returns> |
/// Created instance of the cipher class |
/// </returns> |
/// <exception cref="EDECClassNotRegisteredException"> |
/// Exception raised if called with an unknown/unsupported AlgorithmID |
/// </exception> |
function CreateZIPCryptoAlgorithmInstance(AlgorithmID: UInt16):TDECFormattedCipher; |
resourcestring |
/// <summary> |
/// Exception text for attempts to create an instance for an unknown |
/// algorithm ID |
/// </summary> |
rUnknownZIPAlgorithmID = 'Unknown ZIP cypher algorithm ID %0:d'; |
implementation |
uses |
System.SysUtils, |
DECTypes, |
DECCipherBase; |
function CreateZIPCryptoAlgorithmInstance(AlgorithmID: UInt16):TDECFormattedCipher; |
begin |
case AlgorithmID of |
$6601 : Result := TCipher_1DES.Create; |
// $6602 : Result := TCipher_RC2.Create; // (version needed to extract < 5.2) |
// // This has to do with a faulty RC2 |
// // implementation in XP SP1 and earlier |
// // Unsupported as we do not know the |
// // details of the fault |
$6603 : Result := TCipher_3DES.Create; // 3DES 168 |
$6609 : Result := TCipher_2DES.Create; // 3DES 112 |
$660E : Result := TCipher_AES128.Create; |
$660F : Result := TCipher_AES192.Create; |
$6610 : Result := TCipher_AES256.Create; |
$6702 : Result := TCipher_RC2.Create; // (version needed to extract >= 5.2) |
$6720 : Result := TCipher_Blowfish.Create; |
$6721 : Result := TCipher_Twofish.Create; |
$6801 : Result := TCipher_RC4.Create; |
$FFFF : raise EDECClassNotRegisteredException.Create(Format(rUnknownZIPAlgorithmID, |
[AlgorithmID])); |
else |
raise EDECClassNotRegisteredException.Create(Format(rUnknownZIPAlgorithmID, |
[AlgorithmID])); |
end; |
Result.Mode := cmCBCx; // as per ZIP documentation the only supported mode |
end; |
end. |
/trunk/Decoder5/VCL_DEC/LibrarySupport/DelphiWin32/default.txvpck |
---|
0,0 → 1,8 |
<?xml version="1.0" encoding="utf-8"?> |
<nodeSet version="1.0"> |
<view uin="y77zdiaku6k_v"> |
<property name="$defaultDiagram" value="true" /> |
<property name="$metaclass" value="Package Diagram" /> |
<property name="$name" value="default" /> |
</view> |
</nodeSet> |
/trunk/Decoder5/VCL_DEC/LibrarySupport/DelphiWin32/default_diagram.tvsconfig |
---|
0,0 → 1,2 |
<?xml version="1.0"?> |
<TgConfig Version="3" SubLevelDisabled="False" /> |
/trunk/Decoder5/VCL_DEC/SearchPaths-Demo.optset |
---|
0,0 → 1,24 |
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
<PropertyGroup> |
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)</DCC_Namespace> |
<DCC_DcuOutput>.\..\..\Compiled\DCU_IDE$(ProductVersion)_$(Platform)__Demos</DCC_DcuOutput> |
<DCC_ExeOutput>.\..\..\Compiled\BIN_IDExx.x_$(Platform)__Demos</DCC_ExeOutput> |
<DCC_HppOutput>.\..\..\Compiled\DCP_IDE$(ProductVersion)_$(Platform)_$(Config)</DCC_HppOutput> |
<DCC_ObjOutput>.\..\..\Compiled\DCU_IDE$(ProductVersion)_$(Platform)__Demos</DCC_ObjOutput> |
<DCC_BpiOutput>.\..\..\Compiled\DCP_IDE$(ProductVersion)_$(Platform)_$(Config)</DCC_BpiOutput> |
<DCC_UnitSearchPath>.\..\..\Compiled\DCU_IDE$(ProductVersion)_$(Platform)_$(Config);$(DCC_UnitSearchPath)</DCC_UnitSearchPath> |
<DCC_BplOutput>.\..\..\Compiled\BIN_IDExx.x_$(Platform)__Demos</DCC_BplOutput> |
<DCC_DcpOutput>.\..\..\Compiled\DCP_IDE$(ProductVersion)_$(Platform)_$(Config)</DCC_DcpOutput> |
<VerInfo_Locale>1031</VerInfo_Locale> |
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys> |
<SanitizedProjectName></SanitizedProjectName> |
</PropertyGroup> |
<ProjectExtensions> |
<Borland.Personality>Delphi.Personality.12</Borland.Personality> |
<Borland.ProjectType>OptionSet</Borland.ProjectType> |
<BorlandProject> |
<Delphi.Personality/> |
</BorlandProject> |
<ProjectFileVersion>12</ProjectFileVersion> |
</ProjectExtensions> |
</Project> |
/trunk/Decoder5/VCL_DEC/SearchPaths-Source.optset |
---|
0,0 → 1,24 |
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
<PropertyGroup> |
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)</DCC_Namespace> |
<DCC_DcuOutput>.\..\Compiled\DCU_IDE$(ProductVersion)_$(Platform)_$(Config)</DCC_DcuOutput> |
<DCC_ExeOutput>.\..\Compiled\BIN_IDE$(ProductVersion)_$(Platform)_$(Config)</DCC_ExeOutput> |
<DCC_HppOutput>.\..\Compiled\DCP_IDE$(ProductVersion)_$(Platform)_$(Config)</DCC_HppOutput> |
<DCC_ObjOutput>.\..\Compiled\DCU_IDE$(ProductVersion)_$(Platform)_$(Config)</DCC_ObjOutput> |
<DCC_BpiOutput>.\..\Compiled\DCP_IDE$(ProductVersion)_$(Platform)_$(Config)</DCC_BpiOutput> |
<DCC_UnitSearchPath>.\..\Compiled\DCU_IDE$(ProductVersion)_$(Platform)_$(Config);$(DCC_UnitSearchPath)</DCC_UnitSearchPath> |
<DCC_BplOutput>.\..\Compiled\BIN_IDE$(ProductVersion)_$(Platform)_$(Config)</DCC_BplOutput> |
<DCC_DcpOutput>.\..\Compiled\DCP_IDE$(ProductVersion)_$(Platform)_$(Config)</DCC_DcpOutput> |
<VerInfo_Locale>1031</VerInfo_Locale> |
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys> |
<SanitizedProjectName>DEC60</SanitizedProjectName> |
</PropertyGroup> |
<ProjectExtensions> |
<Borland.Personality>Delphi.Personality.12</Borland.Personality> |
<Borland.ProjectType>OptionSet</Borland.ProjectType> |
<BorlandProject> |
<Delphi.Personality/> |
</BorlandProject> |
<ProjectFileVersion>12</ProjectFileVersion> |
</ProjectExtensions> |
</Project> |
/trunk/Decoder5/VCL_DEC/SearchPaths-Test.optset |
---|
0,0 → 1,24 |
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
<PropertyGroup> |
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)</DCC_Namespace> |
<DCC_DcuOutput>.\..\Compiled\DCU_IDE$(ProductVersion)_$(Platform)__Demos</DCC_DcuOutput> |
<DCC_ExeOutput>.\..\Compiled\BIN_IDE$(ProductVersion)_$(Platform)_$(Config)</DCC_ExeOutput> |
<DCC_HppOutput>.\..\Compiled\DCP_IDE$(ProductVersion)_$(Platform)_$(Config)</DCC_HppOutput> |
<DCC_ObjOutput>.\..\Compiled\DCU_IDE$(ProductVersion)_$(Platform)__Demos</DCC_ObjOutput> |
<DCC_BpiOutput>.\..\Compiled\DCP_IDE$(ProductVersion)_$(Platform)_$(Config)</DCC_BpiOutput> |
<DCC_UnitSearchPath>.\..\Compiled\DCU_IDE$(ProductVersion)_$(Platform)_$(Config);.\..\Compiled\DCU_IDE$(ProductVersion)_$(Platform)_Debug;$(DCC_UnitSearchPath)</DCC_UnitSearchPath> |
<DCC_BplOutput>.\..\Compiled\BIN_IDE$(ProductVersion)_$(Platform)_$(Config)</DCC_BplOutput> |
<DCC_DcpOutput>.\..\Compiled\DCP_IDE$(ProductVersion)_$(Platform)_$(Config)</DCC_DcpOutput> |
<VerInfo_Locale>1031</VerInfo_Locale> |
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys> |
<SanitizedProjectName>DECDUnitTestSuite</SanitizedProjectName> |
</PropertyGroup> |
<ProjectExtensions> |
<Borland.Personality>Delphi.Personality.12</Borland.Personality> |
<Borland.ProjectType>OptionSet</Borland.ProjectType> |
<BorlandProject> |
<Delphi.Personality/> |
</BorlandProject> |
<ProjectFileVersion>12</ProjectFileVersion> |
</ProjectExtensions> |
</Project> |
/trunk/Decoder5/VCL_DEC/fpc/DECUtil.inc |
---|
0,0 → 1,14 |
{$define SwapUInt32_asm} |
function SwapUInt32(Source: UInt32): UInt32; |
begin |
result := SwapEndian(Source); |
end; |
{$define SwapInt64_asm} |
function SwapInt64(Source: Int64): Int64; |
begin |
result := SwapEndian(Source); |
end; |
/trunk/Decoder5/VCL_DEC/fpc/dec.lpk |
---|
0,0 → 1,151 |
<?xml version="1.0" encoding="UTF-8"?> |
<CONFIG> |
<Package Version="5"> |
<PathDelim Value="\"/> |
<Name Value="DEC"/> |
<Author Value="geheimniswelten"/> |
<AutoUpdate Value="Manually"/> |
<CompilerOptions> |
<Version Value="11"/> |
<PathDelim Value="\"/> |
<SearchPaths> |
<IncludeFiles Value="..\$(TargetCPU);.."/> |
<OtherUnitFiles Value=".."/> |
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> |
</SearchPaths> |
</CompilerOptions> |
<Description Value="Delphi Encryption Compendium (DEC)"/> |
<License Value="AFL 2.0"/> |
<Version Major="6" Minor="4"/> |
<Files> |
<Item> |
<Filename Value="..\DECCRC.pas"/> |
<UnitName Value="DECCRC"/> |
</Item> |
<Item> |
<Filename Value="..\DECData.pas"/> |
<UnitName Value="DECData"/> |
</Item> |
<Item> |
<Filename Value="..\DECHash.pas"/> |
<UnitName Value="DECHash"/> |
</Item> |
<Item> |
<Filename Value="..\DECRandom.pas"/> |
<UnitName Value="DECRandom"/> |
</Item> |
<Item> |
<Filename Value="..\DECUtil.pas"/> |
<UnitName Value="DECUtil"/> |
</Item> |
<Item> |
<Filename Value="..\DECBaseClass.pas"/> |
<UnitName Value="DECBaseClass"/> |
</Item> |
<Item> |
<Filename Value="..\DECCipherBase.pas"/> |
<UnitName Value="DECCipherBase"/> |
</Item> |
<Item> |
<Filename Value="..\DECCipherFormats.pas"/> |
<UnitName Value="DECCipherFormats"/> |
</Item> |
<Item> |
<Filename Value="..\DECCipherInterface.pas"/> |
<UnitName Value="DECCipherInterface"/> |
</Item> |
<Item> |
<Filename Value="..\DECCipherModes.pas"/> |
<UnitName Value="DECCipherModes"/> |
</Item> |
<Item> |
<Filename Value="..\DECCipherModesGCM.pas"/> |
<UnitName Value="DECCipherModesGCM"/> |
</Item> |
<Item> |
<Filename Value="..\DECCiphers.pas"/> |
<UnitName Value="DECCiphers"/> |
</Item> |
<Item> |
<Filename Value="..\DECDataCipher.pas"/> |
<UnitName Value="DECDataCipher"/> |
</Item> |
<Item> |
<Filename Value="..\DECDataHash.pas"/> |
<UnitName Value="DECDataHash"/> |
</Item> |
<Item> |
<Filename Value="..\DECFormat.pas"/> |
<UnitName Value="DECFormat"/> |
</Item> |
<Item> |
<Filename Value="..\DECFormatBase.pas"/> |
<UnitName Value="DECFormatBase"/> |
</Item> |
<Item> |
<Filename Value="..\DECHashAuthentication.pas"/> |
<UnitName Value="DECHashAuthentication"/> |
</Item> |
<Item> |
<Filename Value="..\DECHashBase.pas"/> |
<UnitName Value="DECHashBase"/> |
</Item> |
<Item> |
<Filename Value="..\DECHashBitBase.pas"/> |
<UnitName Value="DECHashBitBase"/> |
</Item> |
<Item> |
<Filename Value="..\DECHashInterface.pas"/> |
<UnitName Value="DECHashInterface"/> |
</Item> |
<Item> |
<Filename Value="..\DECTypes.pas"/> |
<UnitName Value="DECTypes"/> |
</Item> |
<Item> |
<Filename Value="..\DECUtilRawByteStringHelper.pas"/> |
<UnitName Value="DECUtilRawByteStringHelper"/> |
</Item> |
<Item> |
<Filename Value="..\DECHash.asm86.inc"/> |
<Type Value="Include"/> |
</Item> |
<Item> |
<Filename Value="..\DECHash.sha3_mmx.inc"/> |
<Type Value="Include"/> |
</Item> |
<Item> |
<Filename Value="..\DECHash.sha3_x64.inc"/> |
<Type Value="Include"/> |
</Item> |
<Item> |
<Filename Value="..\DECOptions.inc"/> |
<Type Value="Include"/> |
</Item> |
<Item> |
<Filename Value="..\x86\DECUtil.inc"/> |
<Type Value="Include"/> |
</Item> |
<Item> |
<Filename Value="..\x86_64\DECUtil.inc"/> |
<Type Value="Include"/> |
</Item> |
<Item> |
<Filename Value="DECUtil.inc"/> |
<Type Value="Include"/> |
</Item> |
</Files> |
<RequiredPkgs> |
<Item> |
<PackageName Value="FCL"/> |
</Item> |
</RequiredPkgs> |
<UsageOptions> |
<UnitPath Value="$(PkgOutDir)"/> |
</UsageOptions> |
<PublishOptions> |
<Version Value="2"/> |
<UseFileFilters Value="True"/> |
</PublishOptions> |
</Package> |
</CONFIG> |
/trunk/Decoder5/VCL_DEC/fpc/dec.pas |
---|
0,0 → 1,19 |
{ This file was automatically created by Lazarus. Do not edit! |
This source is only used to compile and install the package. |
} |
unit DEC; |
{$warn 5023 off : no warning about unused units} |
interface |
uses |
DECCRC, DECData, DECHash, DECRandom, DECUtil, DECBaseClass, DECCipherBase, |
DECCipherFormats, DECCipherInterface, DECCipherModes, DECCipherModesGCM, |
DECCiphers, DECDataCipher, DECDataHash, DECFormat, DECFormatBase, |
DECHashAuthentication, DECHashBase, DECHashBitBase, DECHashInterface, |
DECTypes, DECUtilRawByteStringHelper; |
implementation |
end. |
/trunk/Decoder5/VCL_DEC/x86/DECUtil.inc |
---|
0,0 → 1,23 |
{$ifdef FPC} |
{$ASMMODE intel} |
{$endif} |
{$ifndef SwapUInt32_asm} |
{$define SwapUInt32_asm} |
function SwapUInt32(Source: UInt32): UInt32; |
asm |
BSWAP EAX |
end; |
{$endif} |
{$ifndef SwapInt64_asm} |
{$define SwapInt64_asm} |
function SwapInt64(Source: Int64): Int64; |
asm |
MOV EDX,Source.DWord[0] |
MOV EAX,Source.DWord[4] |
BSWAP EDX |
BSWAP EAX |
end; |
{$endif} |
/trunk/Decoder5/VCL_DEC/x86_64/DECUtil.inc |
---|
0,0 → 1,24 |
{$ifdef FPC} |
{$ASMMODE intel} |
{$endif} |
{$ifndef SwapUInt32_asm} |
{$define SwapUInt32_asm} |
function SwapUInt32(Source: UInt32): UInt32; |
asm |
MOV RAX, Source |
BSWAP RAX |
SHR RAX, 32 |
end; |
{$endif} |
{$ifndef SwapInt64_asm} |
{$define SwapInt64_asm} |
function SwapInt64(Source: Int64): Int64; |
asm |
MOV RAX, Source |
BSWAP RAX |
end; |
{$endif} |
/trunk/Decoder5/schloss.dc4 |
---|
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 |
/trunk/Decoder5/schloss_decoded.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 |
/trunk/Decoder5 |
---|
Property changes: |
Added: svn:global-ignores |
+*.dcu |
+*.identcache |
+*.exe |
+__recovery |
+__history |
/trunk/Disclaimer.txt |
---|
0,0 → 1,18 |
DISCLAIMER FOR VIATHINKSOFT (DE)CODER |
Deutsch |
Die Benutzung unserer Software geschieht auf eigene Gefahr! Insbesondere bei der Verschlüsselung führt z.B. eine beschädigte Datei oder ein versehentlich falsch eingegebenes oder vergessenes Passwort zum unwiderruflichen Verlust Ihrer Daten. ViaThinkSoft haftet nicht für Programmfehler und/oder verlorene Daten. Führen Sie stets ein Backup der Originaldateien durch, bevor Sie (De)Coder nutzen. |
Bitte installieren Sie die Software nicht, wenn Sie mit den Bedingungen nicht einverstanden sind. |
Bitte beachten Sie des Weiteren, dass aufgrund einer technischen Limitation des ZIP-Dateiformats die Gesamtgröße auf 4 GB beschränkt ist. |
Um Datenverlust zu vermeiden, verschlüsseln Sie bitte nicht mehr als 1 GB an Daten. |
Diese Beta-Version prüft die Dateigröße nicht! |
English |
Use this software at your own risk! Especially when encrypting files, a damaged file, a forgotten password or a mistyped password will lead to an irreversible loss of your data. ViaThinkSoft is not liable for any program bugs or data loss. Please always backup your unencrypted data before using (De)Coder. |
Do not install the software if you do not agree with these conditions. |
Please note that the ZIP file format can only handle archives of 4 GB size. |
To avoid data loss, please only encrypt 1 GB in total. |
In this beta version, the file size will not be checked! |
/trunk/History/Decoder10_DOS/CODER.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 |
/trunk/History/Decoder10_DOS/Decoder1_DOS.sfv |
---|
0,0 → 1,6 |
; Generated by WIN-SFV32 v1.0 |
; (Compatible: Total Commander 11.03) |
coder.bas A338315A |
CODER.EXE 14158206 |
example_in.txt 2A1EDEC4 |
example_out.txt EAE0B071 |
/trunk/History/Decoder10_DOS/coder.bas |
---|
0,0 → 1,452 |
DECLARE SUB kodieren () |
DECLARE SUB dekodieren () |
CLEAR |
Startbildschirm: |
DO |
CLS |
LOCATE 1, 1 |
PRINT "Willkommen zur (De) Kodiersoftware!" |
LOCATE 2, 1 |
PRINT "Version 1.00" |
LOCATE 4, 1 |
PRINT "1 - Text kodieren" |
LOCATE 5, 1 |
PRINT "2 - Text dekodieren" |
LOCATE 6, 1 |
PRINT "3 - Programm beenden" |
LOCATE 8, 1 |
PRINT "(C)Copyright 2001 Daniel Marschall." |
LOCATE 9, 1 |
PRINT "Alle Rechte vorbehalten." |
DO |
ir$ = UCASE$(INKEY$) |
LOOP UNTIL ir$ = "1" OR ir$ = "2" OR ir$ = "3" |
IF ir$ = "1" THEN |
PLAY "P4" |
CALL kodieren |
END IF |
IF ir$ = "2" THEN |
PLAY "P4" |
CALL dekodieren |
END IF |
IF ir$ = "3" THEN |
PLAY "P4" |
CLS |
SYSTEM |
END IF |
LOOP |
Fehler: |
CLS |
CLOSE #1 |
PRINT "Datei nicht gefunden!" |
PLAY "P4" |
CALL dekodieren |
GOTO Startbildschirm |
END |
SUB dekodieren |
CLS |
i = 0 |
a% = 1 |
b% = 1 |
DIM let$(27) |
let$(1) = "A" |
let$(2) = "B" |
let$(3) = "C" |
let$(4) = "D" |
let$(5) = "E" |
let$(6) = "F" |
let$(7) = "G" |
let$(8) = "H" |
let$(9) = "I" |
let$(10) = "J" |
let$(11) = "K" |
let$(12) = "L" |
let$(13) = "M" |
let$(14) = "N" |
let$(15) = "O" |
let$(16) = "P" |
let$(17) = "Q" |
let$(18) = "R" |
let$(19) = "S" |
let$(20) = "T" |
let$(21) = "U" |
let$(22) = "V" |
let$(23) = "W" |
let$(24) = "X" |
let$(25) = "Y" |
let$(26) = "Z" |
DIM inl$(27) |
inl$(1) = CHR$(200) |
inl$(2) = CHR$(201) |
inl$(3) = CHR$(202) |
inl$(4) = CHR$(203) |
inl$(5) = CHR$(204) |
inl$(6) = CHR$(205) |
inl$(7) = CHR$(206) |
inl$(8) = CHR$(207) |
inl$(9) = CHR$(208) |
inl$(10) = CHR$(209) |
inl$(11) = CHR$(210) |
inl$(12) = CHR$(211) |
inl$(13) = CHR$(212) |
inl$(14) = CHR$(213) |
inl$(15) = CHR$(214) |
inl$(16) = CHR$(215) |
inl$(17) = CHR$(216) |
inl$(18) = CHR$(217) |
inl$(19) = CHR$(218) |
inl$(20) = CHR$(219) |
inl$(21) = CHR$(220) |
inl$(22) = CHR$(221) |
inl$(23) = CHR$(222) |
inl$(24) = CHR$(223) |
inl$(25) = CHR$(224) |
inl$(26) = CHR$(225) |
inl$(27) = CHR$(226) |
100 |
datei$ = "" |
DO |
CLS |
INPUT "Welche Datei soll dekodiert werden"; datei$ |
IF datei$ = "" THEN |
GOTO Ende |
END IF |
LOOP UNTIL datei$ <> "" |
ON ERROR GOTO Fehler |
OPEN datei$ FOR INPUT AS #1 |
FOR y = 1 TO 10 |
IF EOF(1) = 0 THEN |
INPUT #1, line$ |
code$ = code$ + line$ |
END IF |
NEXT y |
CLOSE #1 |
CLS |
IF MID$(code$, 1, 5) <> CHR$(67) + CHR$(79) + CHR$(68) + CHR$(1) + CHR$(1) OR MID$(code$, LEN(code$) - 2, 3) <> CHR$(1) + CHR$(1) + CHR$(1) THEN |
CLS |
PLAY "P4" |
PRINT "Diese Datei wurde nicht mit dieser Kodiersoftware kodiert!" |
PLAY "P4" |
EXIT SUB |
END IF |
FOR h = 6 TO LEN(code$) - 3 STEP 3 |
99 |
IF MID$(code$, h, 3) = CHR$(36) + inl$(1) + CHR$(16) THEN |
LOCATE a% + 1, i + 1 |
PRINT let$(1) |
ELSEIF MID$(code$, h, 3) = CHR$(36) + inl$(2) + CHR$(16) THEN |
LOCATE a% + 1, i + 1 |
PRINT let$(2) |
ELSEIF MID$(code$, h, 3) = CHR$(36) + inl$(3) + CHR$(16) THEN |
LOCATE a% + 1, i + 1 |
PRINT let$(3) |
ELSEIF MID$(code$, h, 3) = CHR$(36) + inl$(4) + CHR$(16) THEN |
LOCATE a% + 1, i + 1 |
PRINT let$(4) |
ELSEIF MID$(code$, h, 3) = CHR$(36) + inl$(5) + CHR$(16) THEN |
LOCATE a% + 1, i + 1 |
PRINT let$(5) |
ELSEIF MID$(code$, h, 3) = CHR$(36) + inl$(6) + CHR$(16) THEN |
LOCATE a% + 1, i + 1 |
PRINT let$(6) |
ELSEIF MID$(code$, h, 3) = CHR$(36) + inl$(7) + CHR$(16) THEN |
LOCATE a% + 1, i + 1 |
PRINT let$(7) |
ELSEIF MID$(code$, h, 3) = CHR$(36) + inl$(8) + CHR$(16) THEN |
LOCATE a% + 1, i + 1 |
PRINT let$(8) |
ELSEIF MID$(code$, h, 3) = CHR$(36) + inl$(9) + CHR$(16) THEN |
LOCATE a% + 1, i + 1 |
PRINT let$(9) |
ELSEIF MID$(code$, h, 3) = CHR$(36) + inl$(10) + CHR$(16) THEN |
LOCATE a% + 1, i + 1 |
PRINT let$(10) |
ELSEIF MID$(code$, h, 3) = CHR$(36) + inl$(11) + CHR$(16) THEN |
LOCATE a% + 1, i + 1 |
PRINT let$(11) |
ELSEIF MID$(code$, h, 3) = CHR$(36) + inl$(12) + CHR$(16) THEN |
LOCATE a% + 1, i + 1 |
PRINT let$(12) |
ELSEIF MID$(code$, h, 3) = CHR$(36) + inl$(13) + CHR$(16) THEN |
LOCATE a% + 1, i + 1 |
PRINT let$(13) |
ELSEIF MID$(code$, h, 3) = CHR$(36) + inl$(14) + CHR$(16) THEN |
LOCATE a% + 1, i + 1 |
PRINT let$(14) |
ELSEIF MID$(code$, h, 3) = CHR$(36) + inl$(15) + CHR$(16) THEN |
LOCATE a% + 1, i + 1 |
PRINT let$(15) |
ELSEIF MID$(code$, h, 3) = CHR$(36) + inl$(16) + CHR$(16) THEN |
LOCATE a% + 1, i + 1 |
PRINT let$(16) |
ELSEIF MID$(code$, h, 3) = CHR$(36) + inl$(17) + CHR$(16) THEN |
LOCATE a% + 1, i + 1 |
PRINT let$(17) |
ELSEIF MID$(code$, h, 3) = CHR$(36) + inl$(18) + CHR$(16) THEN |
LOCATE a% + 1, i + 1 |
PRINT let$(18) |
ELSEIF MID$(code$, h, 3) = CHR$(36) + inl$(19) + CHR$(16) THEN |
LOCATE a% + 1, i + 1 |
PRINT let$(19) |
ELSEIF MID$(code$, h, 3) = CHR$(36) + inl$(20) + CHR$(16) THEN |
LOCATE a% + 1, i + 1 |
PRINT let$(20) |
ELSEIF MID$(code$, h, 3) = CHR$(36) + inl$(21) + CHR$(16) THEN |
LOCATE a% + 1, i + 1 |
PRINT let$(21) |
ELSEIF MID$(code$, h, 3) = CHR$(36) + inl$(22) + CHR$(16) THEN |
LOCATE a% + 1, i + 1 |
PRINT let$(22) |
ELSEIF MID$(code$, h, 3) = CHR$(36) + inl$(23) + CHR$(16) THEN |
LOCATE a% + 1, i + 1 |
PRINT let$(23) |
ELSEIF MID$(code$, h, 3) = CHR$(36) + inl$(24) + CHR$(16) THEN |
LOCATE a% + 1, i + 1 |
PRINT let$(24) |
ELSEIF MID$(code$, h, 3) = CHR$(36) + inl$(25) + CHR$(16) THEN |
LOCATE a% + 1, i + 1 |
PRINT let$(25) |
ELSEIF MID$(code$, h, 3) = CHR$(36) + inl$(26) + CHR$(16) THEN |
LOCATE a% + 1, i + 1 |
PRINT let$(26) |
ELSE |
FOR a = 1 TO 27 |
FOR b = 1 TO 255 |
IF MID$(code$, h, 3) = CHR$(36) + inl$(a) + CHR$(b) THEN |
LOCATE a% + 1, i + 1 |
PRINT CHR$(b) |
END IF |
NEXT b |
NEXT a |
END IF |
PLAY "T255O3L45AP45" |
200 |
FOR C = 27 TO 2 STEP -1 |
let$(C) = let$(C - 1) |
NEXT C |
let$(1) = let$(27) |
300 |
i = i + 1 |
IF i = 78 THEN |
i = 0 |
a% = a% + 1 |
END IF |
NEXT h |
PRINT "Beliebige Taste drcken, um fortzusetzen..." |
SLEEP |
Ende: |
END SUB |
SUB kodieren |
CLS |
i = -1 |
a% = 1 |
b% = 1 |
DIM let$(27) |
let$(1) = CHR$(200) |
let$(2) = CHR$(201) |
let$(3) = CHR$(202) |
let$(4) = CHR$(203) |
let$(5) = CHR$(204) |
let$(6) = CHR$(205) |
let$(7) = CHR$(206) |
let$(8) = CHR$(207) |
let$(9) = CHR$(208) |
let$(10) = CHR$(209) |
let$(11) = CHR$(210) |
let$(12) = CHR$(211) |
let$(13) = CHR$(212) |
let$(14) = CHR$(213) |
let$(15) = CHR$(214) |
let$(16) = CHR$(215) |
let$(17) = CHR$(216) |
let$(18) = CHR$(217) |
let$(19) = CHR$(218) |
let$(20) = CHR$(219) |
let$(21) = CHR$(220) |
let$(22) = CHR$(221) |
let$(23) = CHR$(222) |
let$(24) = CHR$(223) |
let$(25) = CHR$(224) |
let$(26) = CHR$(225) |
let$(27) = CHR$(226) |
PRINT "Geben Sie den zu kodierenden Text ein:" |
i = 39 |
1 |
w$ = "n" |
zeichen$ = UCASE$(INKEY$) |
IF LEN(code$) = 0 AND zeichen$ = CHR$(8) THEN |
zeichen$ = "" |
GOTO 1 |
END IF |
IF zeichen$ = "" THEN |
GOTO 1 |
END IF |
LOCATE a%, i + 1 |
PRINT zeichen$ |
IF zeichen$ = "A" THEN |
code$ = code$ + CHR$(36) + let$(1) + CHR$(16) |
w$ = "y" |
ELSEIF zeichen$ = "B" THEN |
code$ = code$ + CHR$(36) + let$(2) + CHR$(16) |
w$ = "y" |
ELSEIF zeichen$ = "C" THEN |
code$ = code$ + CHR$(36) + let$(3) + CHR$(16) |
w$ = "y" |
ELSEIF zeichen$ = "D" THEN |
code$ = code$ + CHR$(36) + let$(4) + CHR$(16) |
w$ = "y" |
ELSEIF zeichen$ = "E" THEN |
code$ = code$ + CHR$(36) + let$(5) + CHR$(16) |
w$ = "y" |
ELSEIF zeichen$ = "F" THEN |
code$ = code$ + CHR$(36) + let$(6) + CHR$(16) |
w$ = "y" |
ELSEIF zeichen$ = "G" THEN |
code$ = code$ + CHR$(36) + let$(7) + CHR$(16) |
w$ = "y" |
ELSEIF zeichen$ = "H" THEN |
code$ = code$ + CHR$(36) + let$(8) + CHR$(16) |
w$ = "y" |
ELSEIF zeichen$ = "I" THEN |
code$ = code$ + CHR$(36) + let$(9) + CHR$(16) |
w$ = "y" |
ELSEIF zeichen$ = "J" THEN |
code$ = code$ + CHR$(36) + let$(10) + CHR$(16) |
w$ = "y" |
ELSEIF zeichen$ = "K" THEN |
code$ = code$ + CHR$(36) + let$(11) + CHR$(16) |
w$ = "y" |
ELSEIF zeichen$ = "L" THEN |
code$ = code$ + CHR$(36) + let$(12) + CHR$(16) |
w$ = "y" |
ELSEIF zeichen$ = "M" THEN |
code$ = code$ + CHR$(36) + let$(13) + CHR$(16) |
w$ = "y" |
ELSEIF zeichen$ = "N" THEN |
code$ = code$ + CHR$(36) + let$(14) + CHR$(16) |
w$ = "y" |
ELSEIF zeichen$ = "O" THEN |
code$ = code$ + CHR$(36) + let$(15) + CHR$(16) |
w$ = "y" |
ELSEIF zeichen$ = "P" THEN |
code$ = code$ + CHR$(36) + let$(16) + CHR$(16) |
w$ = "y" |
ELSEIF zeichen$ = "Q" THEN |
code$ = code$ + CHR$(36) + let$(17) + CHR$(16) |
w$ = "y" |
ELSEIF zeichen$ = "R" THEN |
code$ = code$ + CHR$(36) + let$(18) + CHR$(16) |
w$ = "y" |
ELSEIF zeichen$ = "S" THEN |
code$ = code$ + CHR$(36) + let$(19) + CHR$(16) |
w$ = "y" |
ELSEIF zeichen$ = "T" THEN |
code$ = code$ + CHR$(36) + let$(20) + CHR$(16) |
w$ = "y" |
ELSEIF zeichen$ = "U" THEN |
code$ = code$ + CHR$(36) + let$(21) + CHR$(16) |
w$ = "y" |
ELSEIF zeichen$ = "V" THEN |
code$ = code$ + CHR$(36) + let$(22) + CHR$(16) |
w$ = "y" |
ELSEIF zeichen$ = "W" THEN |
code$ = code$ + CHR$(36) + let$(23) + CHR$(16) |
w$ = "y" |
ELSEIF zeichen$ = "X" THEN |
code$ = code$ + CHR$(36) + let$(24) + CHR$(16) |
w$ = "y" |
ELSEIF zeichen$ = "Y" THEN |
code$ = code$ + CHR$(36) + let$(25) + CHR$(16) |
w$ = "y" |
ELSEIF zeichen$ = "Z" THEN |
code$ = code$ + CHR$(36) + let$(26) + CHR$(16) |
w$ = "y" |
ELSEIF zeichen$ = CHR$(8) THEN |
code$ = MID$(code$, 1, (LEN(code$)) - 3) |
LOCATE a% + 1, i + 1 |
PRINT " " |
LOCATE a%, i + 1 |
PRINT " " |
IF i = 0 THEN |
i = 78 |
a% = a% - 1 |
END IF |
i = i - 1 |
LOCATE a% + 1, i + 1 |
PRINT " " |
LOCATE a%, i + 1 |
PRINT " " |
FOR C = 26 TO 2 STEP -1 |
let$(C) = let$(C - 1) |
NEXT C |
let$(1) = let$(27) |
let$(27) = let$(26) |
i = i - 1 |
w$ = "y" |
i = i + 1 |
IF i = 78 THEN |
i = 0 |
END IF |
IF w$ <> "y" THEN |
code$ = code$ + CHR$(36) + let$(27) + zeichen$ |
END IF |
PLAY "T255O3L45AP45" |
GOTO 1 |
ELSEIF zeichen$ = CHR$(13) THEN |
CLS |
IF LEN(code$) = 0 THEN |
PLAY "P4" |
PLAY "P2" |
EXIT SUB |
END IF |
DO |
INPUT "Mchten Sie den Text speichern (J/N)"; speichern$ |
IF speichern$ = "J" OR speichern$ = "j" THEN |
CLS |
INPUT "Speichern als"; datei$ |
IF datei$ = "" THEN |
datei$ = "code.txt" |
END IF |
OPEN datei$ FOR OUTPUT AS #1 |
PRINT #1, CHR$(67); |
PRINT #1, CHR$(79); |
PRINT #1, CHR$(68); |
PRINT #1, CHR$(1); |
PRINT #1, CHR$(1); |
PRINT #1, MID$(code$, 1, LEN(code$)); |
PRINT #1, CHR$(1); |
PRINT #1, CHR$(1); |
PRINT #1, CHR$(1); |
CLOSE #1 |
CLS |
PLAY "P4" |
PRINT "Speicherung erfolgreich!" |
PRINT "Gespeicherte Datei:"; SPACE$(1); datei$ |
PLAY "P1P1P2" |
EXIT SUB |
ELSEIF speichern$ = "N" OR speichern$ = "n" THEN |
PLAY "T32O2L16E" |
PLAY "P2" |
EXIT SUB |
END IF |
LOOP |
END IF |
let$(27) = let$(1) |
FOR C = 1 TO 26 |
let$(C) = let$(C + 1) |
NEXT C |
i = i + 1 |
IF i = 78 THEN |
i = 0 |
a% = a% + 1 |
END IF |
IF w$ <> "y" THEN |
code$ = code$ + CHR$(36) + let$(27) + zeichen$ |
END IF |
PLAY "T255O3L45AP45" |
GOTO 1 |
END SUB |
/trunk/History/Decoder10_DOS/example_in.txt |
---|
0,0 → 1,0 |
HELLO WORLD. THIS IS A TEST. |
/trunk/History/Decoder10_DOS/example_out.txt |
---|
0,0 → 1,0 |
COD$Ï$Í$Õ$Ö$Ú$Í $Ê$Ý$á$Ü$Õ$Ó.$Ô $Î$Ý$ß$Ð$Ù $È$Ó$Ü $Ý$Þ $Ø$Ê$Ù$Û$É. |
/trunk/History/Decoder20/256zero_in.txt |
---|
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 |
/trunk/History/Decoder20/256zero_out.txt |
---|
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 |
/trunk/History/Decoder20/Coder.cfg |
---|
0,0 → 1,35 |
-$A8 |
-$B- |
-$C- |
-$D- |
-$E- |
-$F- |
-$G+ |
-$H+ |
-$I+ |
-$J+ |
-$K- |
-$L- |
-$M- |
-$N+ |
-$O+ |
-$P+ |
-$Q- |
-$R- |
-$S- |
-$T- |
-$U- |
-$V+ |
-$W- |
-$X+ |
-$Y- |
-$Z1 |
-cg |
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; |
-H+ |
-W+ |
-M |
-$M16384,1048576 |
-K$00400000 |
-LE"c:\programme\borland\delphi6\standard\Projects\Bpl" |
-LN"c:\programme\borland\delphi6\standard\Projects\Bpl" |
/trunk/History/Decoder20/Coder.dof |
---|
0,0 → 1,97 |
[FileVersion] |
Version=6.0 |
[Compiler] |
A=8 |
B=0 |
C=0 |
D=0 |
E=0 |
F=0 |
G=1 |
H=1 |
I=1 |
J=1 |
K=0 |
L=0 |
M=0 |
N=1 |
O=1 |
P=1 |
Q=0 |
R=0 |
S=0 |
T=0 |
U=0 |
V=1 |
W=0 |
X=1 |
Y=0 |
Z=1 |
ShowHints=1 |
ShowWarnings=1 |
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; |
[Linker] |
MapFile=0 |
OutputObjs=0 |
ConsoleApp=1 |
DebugInfo=0 |
RemoteSymbols=0 |
MinStackSize=16384 |
MaxStackSize=1048576 |
ImageBase=4194304 |
ExeDescription=(De)Coder V2.0 VLL |
[Directories] |
OutputDir= |
UnitOutputDir= |
PackageDLLOutputDir= |
PackageDCPOutputDir= |
SearchPath= |
Packages=VCL50;VCLX50;VCLSMP50;VCLDB50;VCLADO50;ibevnt50;VCLBDE50;VCLDBX50;QRPT50;TEEUI50;TEEDB50;TEE50;DSS50;TEEQR50;VCLIB50;VCLMID50;VCLIE50;INETDB50;INET50;NMFAST50;WEBMID50;dclocx50;dclaxserver50;DelphiX_for5 |
Conditionals= |
DebugSourceDirs= |
UsePackages=0 |
[Parameters] |
RunParams= |
HostApplication= |
Launcher= |
UseLauncher=0 |
DebugCWD= |
[Version Info] |
IncludeVerInfo=1 |
AutoIncBuild=0 |
MajorVer=2 |
MinorVer=0 |
Release=0 |
Build=0 |
Debug=0 |
PreRelease=0 |
Special=0 |
Private=0 |
DLL=0 |
Locale=1031 |
CodePage=1252 |
[Version Info Keys] |
CompanyName=Daniel Marschall Computersoftware |
FileDescription=Ein Verschlüsselungsprogramm... |
FileVersion=2.0.0.0 |
InternalName=(De)Coder V2.0 VLL |
LegalCopyright=(C)Copyright 2001 Daniel Marschall. |
LegalTrademarks=Keine |
OriginalFilename=CODER.EXE |
ProductName=(De)Coder V2.0 |
ProductVersion=2.0.0.0 |
Homepage=http://www.d-m-home.de |
[Excluded Packages] |
c:\programme\borland\delphi6\standard\Projects\Bpl\dclusr60.bpl=Borland Anwenderkomponenten |
c:\programme\borland\delphi6\standard\Projects\Bpl\Package1.bpl=(Unbenannt) |
[HistoryLists\hlUnitAliases] |
Count=1 |
Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; |
/trunk/History/Decoder20/Coder.dpr |
---|
0,0 → 1,16 |
program Coder; |
{$Description '(De)Coder V2.0 VLL'} |
uses |
Forms, |
Unit1 in 'Unit1.pas' {Form1}; |
{$R *.RES} |
begin |
Application.Initialize; |
Application.Title := '(De)Coder V2.0'; |
Application.CreateForm(TForm1, Form1); |
Application.Run; |
end. |
/trunk/History/Decoder20/Coder.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 |
/trunk/History/Decoder20/Coder.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 |
/trunk/History/Decoder20/Unit1.dfm |
---|
0,0 → 1,5302 |
object Form1: TForm1 |
Left = 313 |
Top = 227 |
BorderIcons = [biSystemMenu, biMinimize] |
BorderStyle = bsSingle |
Caption = '(De)Coder V2.0' |
ClientHeight = 174 |
ClientWidth = 356 |
Color = clBtnFace |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clWindowText |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
OldCreateOrder = False |
Position = poDesktopCenter |
PixelsPerInch = 96 |
TextHeight = 13 |
object Image1: TImage |
Left = 0 |
Top = 0 |
Width = 356 |
Height = 155 |
Align = alClient |
Picture.Data = { |
07544269746D6170DA860200424DDA8602000000000036000000280000006401 |
00009B0000000100180000000000A4860200C40E0000C40E0000000000000000 |
0000000000000000000000000000000000000000000000000000220F0F000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000523637000000000000000000 |
000000000000000000000000000000000000000000000000000000220F0F0000 |
00220F0F000000220F0F000000220F0FD5BDBBD5BDBBD5BDBB523637220F0F00 |
0000000000000000000000220F0F000000220F0F000000000000220F0F220F0F |
220F0F220F0F000000806B6A000000000000000000000000220F0F220F0F0000 |
00220F0F000000000000000000220F0F000000220F0F000000220F0F00000022 |
0F0F000000000000220F0F220F0F000000000000000000000000220F0F000000 |
220F0F000000000000220F0F220F0F0000000000000000000000000000000000 |
00000000000000220F0F000000000000220F0F00000000000000000000000022 |
0F0F000000000000000000220F0F000000000000000000000000000000000000 |
000000000000000000220F0F523637220F0F000000220F0F0000000000000000 |
00000000000000220F0F000000220F0F000000220F0F220F0F220F0F220F0F52 |
3637220F0F220F0F220F0F220F0F523637523637220F0F220F0F000000220F0F |
220F0F000000220F0F220F0F0000000000000000000000000000000000000000 |
00000000000000220F0F00000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000220F0F000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000052363700 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000000000000220F |
0F000000000000000000000000000000000000000000000000220F0F220F0FEB |
EBEB806B6A220F0F000000000000000000220F0F000000220F0F220F0F000000 |
000000000000220F0F000000D5BDBB220F0F0000005236370000000000000000 |
00000000523637220F0F000000000000000000220F0F220F0F220F0F220F0F00 |
0000220F0F000000220F0F000000000000000000000000000000000000220F0F |
220F0F000000000000000000220F0F000000000000000000000000220F0F0000 |
00000000000000000000220F0F220F0F00000000000000000000000000000000 |
0000000000000000000000220F0F000000000000000000000000000000000000 |
000000000000000000000000220F0F000000000000220F0F806B6A5236370000 |
00000000000000000000220F0F000000000000000000000000523637220F0F22 |
0F0F220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F220F0F |
220F0F000000220F0F000000000000220F0F000000220F0F0000000000000000 |
00000000000000000000000000000000000000220F0F00000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000220F0F0000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000220F0F0000000000000000000000000000 |
00000000000000000000220F0F00000000000000000000000000000000000022 |
0F0F000000220F0F220F0F523637220F0F000000000000000000220F0F000000 |
000000000000220F0F000000000000220F0F220F0F0000000000000000000000 |
00000000000000000000000000000000220F0F806B6A220F0F220F0F00000000 |
0000000000220F0F000000220F0F220F0F000000220F0F220F0F000000220F0F |
000000000000220F0F000000000000220F0F0000000000000000000000000000 |
00000000000000220F0F000000000000000000000000000000220F0F220F0F00 |
0000000000000000000000220F0F000000000000000000000000000000000000 |
220F0F000000000000000000220F0F220F0F0000000000000000000000000000 |
00000000220F0F220F0F000000000000000000000000523637220F0F00000000 |
0000000000220F0F000000220F0F220F0F220F0F523637523637523637220F0F |
220F0F220F0F220F0F220F0F0000000000000000000000000000000000000000 |
00000000000000220F0F220F0F00000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000220F0F0000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000220F0F000000000000000000 |
0000000000000000000000005236370000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000220F0F000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000220F0F000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00220F0F806B6A00000000000000000000000000000000000000000000000022 |
0F0F220F0F000000220F0F000000000000000000220F0F220F0F220F0F220F0F |
220F0F220F0F000000000000000000000000000000220F0F000000000000220F |
0F220F0F00000000000000000000000000000000000000000000000000000022 |
0F0F220F0F220F0F220F0F000000000000220F0F000000000000000000000000 |
220F0F000000523637000000000000000000220F0F0000000000000000000000 |
00000000000000000000220F0F000000220F0F000000000000000000220F0F22 |
0F0F000000000000000000000000000000220F0F000000220F0F000000220F0F |
000000000000000000000000000000000000000000220F0F0000000000000000 |
00000000000000000000000000000000220F0F00000000000000000000000022 |
0F0F000000000000220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F523637220F0F220F0F220F0F220F0F220F0F000000000000220F |
0F000000220F0F220F0F00000000000000000000000000000000000000000022 |
0F0F000000220F0F220F0F000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000005236370000000000000000000000005236370000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000220F0F806B6A0000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000220F0F000000220F0F00000000000000000000000000 |
0000000000000000000000220F0F000000220F0F523637000000000000220F0F |
000000000000000000220F0F000000220F0F000000000000220F0F000000220F |
0F220F0F220F0F220F0F000000000000220F0F00000000000000000052363700 |
0000000000000000000000220F0F000000523637220F0F000000000000220F0F |
000000000000000000000000220F0F220F0F000000523637000000000000220F |
0F000000220F0F000000000000000000523637220F0F220F0F220F0F00000000 |
0000000000000000000000000000220F0F000000000000000000000000000000 |
220F0F000000220F0F000000000000000000000000000000220F0F000000220F |
0F220F0F00000000000000000000000000000000000000000000000000000022 |
0F0F000000000000000000220F0F000000000000000000000000000000000000 |
220F0F220F0F220F0F220F0F220F0F523637220F0F523637523637220F0F220F |
0F000000220F0F220F0F000000000000000000000000000000000000220F0F00 |
0000000000000000220F0F220F0F000000000000220F0F000000220F0F000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000220F0F000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000052363700000052363700 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000220F0F000000220F0F0000000000 |
00000000000000000000000000220F0F00000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000220F0F806B6A0000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000005236370000000000 |
00000000000000000000000000000000000000000000000000000000220F0F00 |
0000000000000000000000000000000000220F0F000000000000000000000000 |
000000000000000000000000220F0F000000000000000000000000000000220F |
0F000000000000220F0F000000000000523637806B6A52363700000000000000 |
0000000000220F0F220F0F000000220F0F000000000000000000220F0F000000 |
220F0F220F0F220F0F220F0F220F0F000000000000000000220F0F0000000000 |
00000000000000220F0F000000000000000000000000000000000000220F0F00 |
0000220F0F000000000000000000000000000000000000000000220F0F000000 |
220F0F0000000000000000000000000000000000000000000000000000000000 |
00000000220F0F220F0F000000220F0F000000000000220F0F220F0F220F0F22 |
0F0F000000000000220F0F000000000000220F0F000000220F0F220F0F000000 |
000000000000220F0F220F0F000000220F0F000000220F0F220F0F523637220F |
0F220F0F523637523637523637220F0F000000000000000000220F0F220F0F22 |
0F0F220F0F000000000000000000220F0F000000000000220F0F220F0F000000 |
220F0F0000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
220F0F0000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000523637000000000000000000000000220F0F00 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000220F0F0000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000220F0F806B6A000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
5236370000000000000000000000000000000000000000000000000000000000 |
00000000220F0F00000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000220F0F0000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000220F0F00000000000000000000000000000000000000000000000000 |
0000220F0F000000000000220F0F000000000000000000000000220F0F220F0F |
000000000000000000000000000000000000000000220F0F000000220F0F220F |
0F000000000000000000000000220F0F220F0F000000220F0F220F0F00000022 |
0F0F220F0F220F0F220F0F220F0F000000806B6A220F0F000000000000000000 |
220F0F000000000000000000000000220F0F220F0F000000000000220F0F220F |
0F000000220F0F000000220F0F523637000000220F0F000000220F0F00000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000220F0F000000000000000000000000000000000000000000000000220F |
0F220F0F220F0F000000000000000000000000000000220F0F220F0F00000000 |
0000220F0F000000523637220F0F000000000000220F0F000000220F0F000000 |
220F0F000000220F0F000000220F0F000000000000000000220F0F220F0F0000 |
00000000000000220F0F220F0F220F0F220F0F523637220F0F00000000000000 |
0000000000000000220F0F220F0F220F0F000000000000220F0F000000000000 |
000000220F0F220F0F000000000000220F0F0000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000220F0F000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000220F0F0000000000000000000000000000000000 |
00000000000000000000220F0F000000000000220F0F00000000000052363722 |
0F0F000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000523637220F0F0000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000220F0F000000000000000000523637000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
220F0F000000000000000000220F0F220F0F000000220F0F000000220F0F0000 |
00220F0F000000220F0F000000220F0F000000000000000000220F0F00000000 |
0000220F0F220F0F000000220F0F000000220F0F000000000000000000523637 |
806B6A000000000000000000220F0F0000000000000000000000000000000000 |
00220F0F220F0F000000000000000000220F0F000000806B6AD5BDBB00000000 |
0000000000000000220F0F220F0F000000220F0F000000000000220F0F000000 |
220F0F000000000000220F0F220F0F0000000000000000000000000000000000 |
00000000220F0F000000000000000000000000000000000000000000220F0F22 |
0F0F000000000000220F0F000000220F0F220F0F000000000000000000523637 |
523637220F0F220F0F000000000000000000220F0F220F0F220F0F220F0F0000 |
00220F0F000000220F0F000000000000000000000000000000220F0F00000000 |
0000000000000000000000000000220F0F220F0F220F0F000000220F0F220F0F |
220F0F0000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000523637220F0F00000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000523637 |
220F0F0000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000220F0F00000000000000000052 |
3637000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000220F0F220F0F000000000000000000000000000000000000000000 |
0000005236370000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000220F0F220F0F000000000000000000220F0F0000000000 |
00000000000000000000000000220F0F220F0F220F0F000000000000220F0F22 |
0F0F000000000000000000000000000000000000220F0F220F0F220F0F000000 |
000000000000000000220F0F5236370000000000000000000000000000000000 |
00000000000000000000000000220F0F000000000000000000220F0F220F0F80 |
6B6A523637220F0F220F0F220F0F220F0F220F0F000000220F0F000000000000 |
000000220F0F000000000000220F0F0000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000220F0F220F0F000000220F0F220F0F220F0F000000220F0F000000 |
000000000000000000000000000000220F0F220F0F220F0F220F0F0000000000 |
00220F0F000000000000000000220F0F220F0F000000000000220F0F220F0F00 |
0000000000000000000000000000000000220F0F000000000000000000220F0F |
000000220F0F000000000000000000000000000000000000000000220F0F0000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000220F0F220F0F00000000000000000000000000 |
0000000000000000000000523637000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000523637000000000000000000000000000000000000 |
0000000000000000005236370000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000220F0F0000000000000000000000 |
00000000000000000000220F0F000000000000220F0F220F0F000000220F0F00 |
0000000000000000000000000000000000000000000000220F0F000000220F0F |
000000220F0F220F0F220F0F220F0F000000000000000000806B6A0000000000 |
00000000000000220F0F000000000000000000000000000000220F0F00000000 |
0000000000220F0F220F0F523637220F0F220F0F000000000000000000000000 |
0000000000000000000000000000005236370000000000000000000000000000 |
00000000000000000000000000000000220F0F220F0F000000220F0F00000000 |
0000000000000000220F0F000000220F0F220F0F000000220F0F000000000000 |
000000000000000000000000000000000000000000220F0F000000220F0F5236 |
37806B6A220F0F000000000000000000220F0F220F0F220F0F000000220F0F22 |
0F0F000000220F0F000000000000000000000000000000000000220F0F000000 |
000000000000000000220F0F0000000000000000000000000000000000000000 |
00000000000000000000220F0F000000000000220F0F00000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000005236370000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000052363700000000000000000000 |
0000000000000000000000000000000000523637000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000052363700000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000000000220F0F52 |
3637000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000220F0F000000000000000000000000000000220F |
0F220F0F000000000000000000000000000000000000220F0F00000000000022 |
0F0F000000220F0F000000000000220F0F220F0F523637220F0F220F0F000000 |
000000220F0F000000000000000000220F0F220F0F220F0F0000000000000000 |
00220F0F52363700000000000000000052363700000000000000000000000000 |
0000000000000000000000000000000000000000000000220F0F220F0F000000 |
000000000000000000000000220F0F000000000000000000000000220F0F0000 |
00000000000000220F0F000000000000000000000000220F0F220F0F00000000 |
0000000000000000220F0F000000000000220F0F220F0F220F0F220F0F220F0F |
220F0F000000000000220F0F220F0F0000000000000000000000000000000000 |
00000000000000000000220F0F220F0F220F0F000000220F0F220F0F00000022 |
0F0F220F0F220F0F220F0F220F0F220F0F000000220F0F000000000000000000 |
220F0F000000220F0F000000220F0F000000000000220F0F220F0F0000000000 |
00000000000000000000220F0F000000000000000000000000220F0F00000022 |
0F0F000000000000220F0F000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000005236 |
3700000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000220F0F52363700000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000220F0F000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000052363700000000000000000000000000000052363700 |
0000000000000000000000000000000000523637000000000000000000000000 |
0000005236370000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000220F0F000000000000220F0F000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000000000000220F |
0F000000000000000000000000220F0F000000220F0F00000000000000000022 |
0F0F220F0F000000000000000000220F0F000000000000000000000000000000 |
220F0F000000000000220F0F220F0F220F0F220F0F000000220F0F220F0F220F |
0F220F0F000000000000000000000000806B6A000000D5BDBB00000052363700 |
0000000000000000000000000000000000000000000000000000000000220F0F |
000000000000000000220F0F000000000000000000220F0F000000000000220F |
0F00000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000220F0F220F0F |
000000220F0F000000220F0F220F0F000000000000220F0F000000000000220F |
0F220F0F220F0F000000000000000000220F0F220F0F00000000000000000022 |
0F0F220F0F000000220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F000000000000220F0F220F0F220F0F000000220F0F220F0F806B |
6A220F0F220F0F000000000000000000000000220F0F220F0F220F0F00000022 |
0F0F000000220F0F220F0F220F0F000000220F0F000000000000220F0F000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000005236370000000000000000000000 |
0000000052363700000000000000000000000000000000000052363700000000 |
0000000000000000000000523637000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000220F0F000000000000220F0F00000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000220F0F0000000000000000000000000000000000000000000000 |
0000000000000000000052363700000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000523637000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000220F0F000000000000220F0FD5BDBB523637000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000220F0F000000000000000000000000220F0F22 |
0F0F220F0F220F0F000000000000220F0F000000220F0F220F0F000000220F0F |
220F0F000000220F0F220F0F220F0F220F0F000000220F0F000000220F0F0000 |
00000000000000000000220F0F220F0F000000000000000000220F0F52363700 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000220F0F000000000000000000000000220F0F523637220F0F220F0F220F |
0F000000000000000000000000000000000000000000000000220F0F00000000 |
0000000000000000220F0F000000000000000000220F0F220F0F000000220F0F |
806B6A220F0F000000220F0F220F0F220F0F220F0F000000000000220F0F220F |
0F000000000000220F0F000000220F0F806B6A220F0F000000220F0F220F0F00 |
0000220F0F220F0F220F0F220F0F000000000000220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F0000 |
00220F0F220F0F523637523637220F0F00000000000000000000000000000000 |
0000000000000000220F0F220F0F220F0F220F0F220F0F220F0F523637220F0F |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000052363700000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000005236370000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000052 |
3637000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000220F0F000000000000220F0FD5BDBB52363700000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000220F0F0000000000005236 |
3700000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000005236370000000000000000005236370000 |
0000000000000000000000000000000000000000000052363700000052363700 |
0000000000000000000000000000220F0F000000000000523637806B6A523637 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000022 |
0F0F000000000000000000523637523637000000000000220F0F000000000000 |
000000220F0F220F0F000000000000000000000000220F0F000000000000220F |
0F000000220F0F000000220F0F000000220F0F220F0F220F0F220F0F00000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
220F0F000000000000000000000000000000000000000000220F0F220F0F0000 |
00000000220F0F220F0F220F0F00000000000000000000000000000000000000 |
0000000000000000220F0F220F0F220F0F000000000000000000000000000000 |
000000000000000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F0000 |
00220F0F000000220F0F000000220F0F000000000000000000220F0F220F0F22 |
0F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F0000 |
00220F0F523637220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F00 |
0000220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F000000 |
220F0F220F0F220F0F220F0F220F0F000000000000000000220F0F0000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000005236370000000000000000000000000000000000000000005236 |
3752363700000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000005236370000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000523637000000000000 |
0000005236370000000000000000000000000000000000000000000000005236 |
37000000523637000000000000000000000000000000220F0F00000000000052 |
3637806B6A523637000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000220F0F00000000000000000000000000000000000000000000 |
0000523637000000000000000000000000523637000000000000000000000000 |
5236370000000000000000000000000000005236370000000000000000000000 |
0000000052363752363700000000000000000000000000000000000000000000 |
0000000000000000523637000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000806B6A220F0F0000 |
0000000000000000000000000000000000000000000000000000000000000022 |
0F0F806B6A000000000000000000220F0F220F0F220F0F000000000000000000 |
000000220F0F220F0F000000220F0F000000220F0F220F0F220F0F220F0F220F |
0F220F0F000000220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F00 |
0000220F0F000000000000000000000000220F0F220F0F220F0F000000220F0F |
0000005236370000000000005236375236370000000000000000000000000000 |
00000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F00000000000000 |
0000000000000000000000000000000000220F0F523637000000220F0F000000 |
000000220F0F000000000000000000220F0F000000220F0F220F0F000000220F |
0F220F0F220F0F000000000000000000000000220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F806B6A220F0F000000000000220F0F000000 |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F000000220F0F220F0F000000220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F0000000000 |
00523637220F0F00000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000052363700000000000000000000000052363700000000 |
0000000000000000523637000000000000000000000000000000523637000000 |
0000000000000000000000005236375236370000000000000000000000000000 |
0000000000000000000000000000000052363700000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
806B6A220F0F0000000000000000000000000000000000000000000000000000 |
00000000000000220F0F806B6A00000000000000000000000000000052363700 |
0000523637000000000000000000000000000000000000000000000000000000 |
523637000000000000000000220F0F0000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000220F0F000000000000000000000000000000000000000000000000220F0F |
000000000000000000000000220F0F000000220F0F220F0F220F0F0000000000 |
00000000220F0F220F0F220F0F220F0F220F0F000000000000000000220F0F00 |
0000000000523637220F0F000000220F0F000000220F0F220F0F220F0F220F0F |
220F0F000000220F0F220F0F000000523637220F0F0000000000000000000000 |
00000000000000000000000000220F0F220F0F000000523637523637220F0F22 |
0F0F220F0F220F0F000000000000000000000000000000220F0F000000000000 |
220F0F000000000000000000000000000000000000220F0F000000000000220F |
0F220F0F220F0F000000220F0F220F0F220F0F220F0F000000000000220F0F22 |
0F0F220F0F220F0F000000000000220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F000000220F0F220F0F220F0F000000220F0F220F0F220F0F000000220F |
0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F000000220F0F220F |
0F220F0F220F0F00000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000052363700000000000000000000000000 |
0000000000000000000000000000000000523637000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000052363700000052363700000000000000000000000000000000000000 |
0000000000000000523637000000000000000000220F0F000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000220F0F00000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000005236370000000000 |
0000000000000000000000000000000052363700000000000000000000000000 |
0000000000000000000000000000000000523637000000000000000000000000 |
000000000000000000000000000000000000523637220F0F000000523637220F |
0F00000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000220F0F000000000000000000000000 |
220F0F000000000000000000000000220F0F000000000000000000000000220F |
0F000000000000220F0F000000220F0F220F0F220F0F00000000000000000000 |
0000000000000000000000220F0F000000000000220F0F220F0F220F0F220F0F |
220F0F000000000000000000220F0F000000000000220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F000000000000000000000000220F0F000000220F0F22 |
0F0FD5BDBBD5BDBB000000806B6A523637220F0F220F0F000000000000000000 |
000000000000000000000000000000220F0F0000000000000000000000000000 |
00000000000000220F0F220F0F000000000000000000220F0F220F0F220F0F22 |
0F0F000000220F0F806B6AD5BDBB220F0F220F0F000000220F0F000000220F0F |
000000220F0F220F0F000000220F0F220F0F000000000000000000220F0F220F |
0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F000000000000220F0F00000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000052363700000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
5236370000000000000000000000000000000000000000005236370000000000 |
0000000000000000000000000000000000000000000000000052363700000000 |
0000000000000000000000000000000000000000000000000000523637220F0F |
000000523637220F0F0000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000220F0F00000000 |
0000000000000000220F0F000000000000000000000000000000000000000000 |
5236370000000000000000000000000000000000000000000000000000000000 |
0000000000000052363700000052363700000000000000000000000000000000 |
0000000000000000000000000000000000000000000000523637000000000000 |
000000000000000000523637000000000000000000000000000000000000220F |
0F000000000000220F0F220F0F00000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
220F0F000000220F0F0000000000000000000000000000000000000000000000 |
00000000000000220F0F220F0F000000220F0F00000000000000000000000022 |
0F0F000000220F0F220F0F000000000000220F0F220F0F220F0F220F0F000000 |
000000000000000000000000000000000000220F0F220F0F0000000000000000 |
00220F0F000000000000220F0F000000000000523637220F0F220F0F220F0F00 |
0000000000220F0F220F0F000000523637000000000000EBEBEB000000220F0F |
220F0F000000000000000000000000000000523637220F0F0000000000000000 |
00000000000000000000000000220F0F000000000000000000220F0F00000000 |
0000000000220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F523637 |
220F0F220F0F000000000000220F0F000000220F0F220F0F000000220F0F220F |
0F523637220F0F000000220F0F220F0F000000000000220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F0000 |
00000000000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F00 |
0000000000000000000000000000000000220F0F000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000523637523637000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000005236370000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000523637000000000000000000000000000000000000000000 |
0000000000000000000000000000005236370000005236370000000000000000 |
0000000000000000000000000000000000000000000000000000000000000052 |
3637000000000000000000000000000000523637000000000000000000000000 |
000000000000220F0F000000000000220F0F220F0F0000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000220F0F000000220F0F000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000052363700000000000000000000000000000052 |
3637000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000052363700000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000523637220F0F000000000000000000220F0F0000000000000000000000 |
00000000000000000000220F0F000000220F0F000000220F0F00000000000022 |
0F0F000000000000220F0F000000220F0F000000000000220F0F000000000000 |
000000000000220F0F220F0F000000000000220F0F220F0F000000000000220F |
0F220F0F000000220F0F220F0F220F0F220F0F000000220F0F220F0F52363752 |
3637220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F |
806B6AD5BDBB000000806B6A220F0F0000000000000000000000000000000000 |
00000000220F0F000000000000000000000000000000000000000000220F0F00 |
0000220F0F000000000000220F0F000000220F0F000000000000220F0F220F0F |
220F0F220F0F220F0F000000220F0F000000000000220F0F000000000000220F |
0F000000000000220F0F220F0FD5BDBB220F0F000000220F0F220F0F220F0F22 |
0F0F220F0F220F0F000000000000220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F000000000000220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F000000220F0F000000000000000000 |
0000000000000000000000000000000000000000005236370000000000000000 |
0000000000000052363700000052363752363700000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
5236370000000000000000000000000000000000000000000000000000000000 |
0000000000000000000052363700000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000005236370000000000000000 |
0000000000000052363700000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000005236370000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000523637220F0F000000000000000000220F0F000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000052363700000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000523637000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000052363700000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000220F0F220F0F0000000000000000000000 |
00220F0F000000000000000000000000220F0F000000000000220F0F00000000 |
0000220F0F000000000000000000220F0F000000000000220F0F220F0F220F0F |
220F0F000000000000000000000000220F0F000000220F0F220F0F000000220F |
0F220F0F523637220F0F220F0F000000220F0F220F0F220F0F220F0F00000000 |
0000220F0F220F0F523637523637220F0F220F0F806B6A000000000000220F0F |
220F0F220F0F000000523637523637000000523637220F0F220F0F0000000000 |
00000000000000000000000000000000220F0F000000000000000000220F0F00 |
0000000000220F0F000000220F0F000000220F0F000000000000000000220F0F |
220F0F220F0F000000220F0F000000220F0F000000220F0F220F0F220F0F220F |
0F220F0F000000000000220F0F000000220F0F220F0F523637220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F |
000000220F0F000000220F0F220F0F220F0F220F0F220F0F000000220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F806B6A220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F000000000000 |
000000000000000000000000000000000000220F0F0000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000523637000000000000000000000000000000 |
000000523637806B6A0000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000005236370000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000052 |
3637000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000005236370000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000220F0F220F0F000000 |
000000000000000000220F0F0000000000000000000000000000005236370000 |
0052363700000000000000000052363700000000000000000052363752363752 |
3637000000523637000000523637000000523637000000523637000000000000 |
0000005236370000000000000000000000000000000000005236370000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000523637000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000220F0F00000000 |
0000000000000000000000220F0F220F0F220F0F000000000000220F0F000000 |
220F0F000000000000220F0F000000220F0F220F0F220F0F000000220F0F5236 |
37220F0F220F0F220F0F220F0F220F0F00000000000000000000000000000022 |
0F0F220F0F220F0F220F0F220F0F000000000000D5BDBB000000000000806B6A |
000000000000220F0F220F0F220F0F000000220F0F000000220F0F220F0F220F |
0F220F0F220F0F00000000000000000000000000000000000000000000000000 |
0000220F0F000000220F0F220F0F000000000000000000000000220F0F220F0F |
220F0F000000000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F000000220F0F220F0F000000220F0F220F0F00000022 |
0F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F806B6A220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F000000000000000000220F0F220F0F0000000000000000000000000000 |
00000000000000000000220F0F00000000000000000052363700000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000005236370000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000005236370000005236370000000000000000005236370000000000000000 |
0052363752363752363700000052363700000052363700000052363700000052 |
3637000000000000000000523637000000000000000000000000000000000000 |
5236370000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000052363700000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0052363700000000000000000000000052363700000052363700000000000000 |
0000523637000000000000000000000000000000806B6A523637000000000000 |
0000005236370000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000052363700000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000220F0F00000000000000 |
0000000000000000000000000000220F0F220F0F220F0F000000000000220F0F |
220F0F220F0F220F0F0000000000000000000000000000000000000000000000 |
00220F0F220F0F000000220F0F220F0F000000000000000000220F0F00000000 |
0000220F0F523637523637220F0F000000220F0F000000000000000000523637 |
220F0F806B6AD5BDBBEBEBEBEBEBEB220F0F000000220F0F220F0F0000000000 |
00220F0F220F0F220F0F220F0F220F0F220F0F220F0F00000000000000000000 |
0000000000220F0FD5BDBB220F0F220F0F000000220F0F000000000000220F0F |
000000000000000000523637220F0F000000220F0F000000220F0F000000220F |
0F220F0F220F0F000000220F0F220F0F000000220F0F000000220F0F220F0F22 |
0F0F220F0F220F0F220F0F000000220F0F000000000000220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F |
220F0F523637220F0F220F0F000000000000000000000000000000220F0F0000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000523637000000000000 |
0000000000005236370000000000000000000000005236375236370000000000 |
0000000052363700000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000005236370000000000000000000000005236370000005236 |
37000000000000000000523637000000000000000000000000000000806B6A52 |
3637000000000000000000523637000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000005236370000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000000000000220F |
0F00000000000000000000000000000000000052363700000000000000000000 |
0000000000000000000000523637000000523637000000000000000000523637 |
523637220F0F5236370000005236370000000000000000005236375236370000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000523637000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000220F0F00000000000000000000000000000000 |
0000000000000000000000220F0F000000000000000000220F0F000000000000 |
220F0F220F0F220F0F000000000000220F0F000000220F0F0000000000000000 |
00000000000000220F0F000000000000000000000000220F0F000000220F0F22 |
0F0F220F0F000000000000000000000000220F0F220F0F000000000000000000 |
523637000000D5BDBB220F0F220F0F806B6AD5BDBB000000000000000000220F |
0F000000000000220F0F000000220F0F220F0F000000220F0F220F0F52363722 |
0F0F220F0F000000000000000000000000806B6A220F0F220F0F000000220F0F |
000000000000220F0F523637000000000000220F0F000000000000220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F00000022 |
0F0F220F0F220F0F220F0F220F0F000000000000220F0F220F0F220F0F220F0F |
000000220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F000000220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F000000000000220F0F000000220F0F00000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
5236370000000000000000000000000000005236370000000000000000000000 |
0000000052363700000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000005236370000 |
0000000000000000000000000000000000000052363700000052363700000000 |
0000000000523637523637220F0F523637000000523637000000000000000000 |
5236375236370000000000000000000000000000000000000000000000000000 |
0000000000000000000000000052363700000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000220F0F0000000000000000 |
00000000000000000000000000000000000000220F0F00000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000052363700000000000000000000000000000052363700000000 |
0000000000000000000000000000000000000000000000000000000000523637 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000220F0F00000000000000000000000000000000000000000000 |
0000000000000000000000220F0F000000000000000000000000220F0F000000 |
220F0F000000220F0F000000000000000000220F0F000000000000220F0F220F |
0F220F0F000000000000000000000000000000000000000000220F0F220F0F00 |
0000000000000000220F0F220F0F000000220F0F000000000000220F0F220F0F |
220F0F220F0F220F0F000000523637220F0F000000000000220F0F0000005236 |
37523637000000220F0F220F0F523637000000000000220F0F220F0F52363722 |
0F0F220F0F000000806B6A220F0F523637220F0F220F0F220F0F000000220F0F |
220F0F220F0F220F0F000000220F0F220F0F220F0F523637220F0F220F0F220F |
0F220F0F000000000000220F0F000000000000220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F000000220F0F220F0F220F0F000000000000220F0F000000 |
000000220F0F220F0F220F0F000000220F0F220F0F220F0F000000220F0F220F |
0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F00 |
0000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000000000220F0F00 |
0000220F0F000000000000000000000000000000000000000000000000000000 |
0000005236370000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000005236370000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000005236370000000000000000000000000000 |
0052363700000000000000000000000000000000000000000000000000000000 |
0000000000523637000000000000000000000000000000000000000000000000 |
000000000000000000000000000000220F0F0000000000000000000000000000 |
00000000000000000000000000000000000000220F0F00000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000005236370000000000000000000000000000000000000000000000 |
0000000000000000000052363752363700000000000000000000000052363700 |
0000000000523637000000000000000000000000523637000000000000000000 |
0000005236370000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000220F0F |
000000000000220F0F000000000000000000220F0F000000000000220F0F220F |
0F000000000000220F0F220F0F220F0F220F0F000000220F0F220F0F00000022 |
0F0F220F0F220F0F220F0F000000000000220F0F000000220F0F220F0F220F0F |
220F0F000000523637220F0F220F0F220F0F000000806B6A0000000000000000 |
00000000000000220F0F220F0F523637220F0F000000220F0F52363700000022 |
0F0F220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F |
220F0F000000000000000000220F0F220F0F220F0F0000000000000000000000 |
00220F0F220F0F220F0F000000220F0F000000000000000000220F0F00000000 |
0000000000000000000000000000220F0F220F0F220F0F220F0F000000220F0F |
220F0F000000000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F000000000000000000220F0F000000000000000000000000220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F5236 |
37220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F000000220F0F22 |
0F0F000000523637000000000000000000523637000000000000000000000000 |
0000000000000000005236370000000000000000000000000000005236370000 |
0000000000000052363700000052363700000000000000000000000000000000 |
0000000000000000523637000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000523637000000000000000000000000000000 |
0000000000000000000000000000000000005236375236370000000000000000 |
0000000052363700000000000052363700000000000000000000000052363700 |
0000000000000000000000523637000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000220F0F000000000000000000000000523637000000000000000000 |
0000000000000000005236370000000000000000000000000000000000000000 |
0000000052363700000000000052363700000000000000000000000000000000 |
0000000000523637000000000000000000523637000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000220F0F000000000000000000220F0F000000000000000000220F |
0F220F0F523637000000220F0F000000000000220F0F00000000000000000022 |
0F0F000000000000220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F |
220F0F000000220F0F000000220F0F220F0F000000220F0F220F0F523637220F |
0F000000220F0F220F0F000000220F0F220F0F000000220F0F523637220F0F22 |
0F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F0000000000000000000000000000 |
00220F0F220F0F220F0F000000000000000000000000220F0F000000220F0F22 |
0F0F000000000000000000000000220F0F000000220F0F220F0F000000220F0F |
220F0F000000220F0F220F0F000000000000000000220F0F000000220F0F220F |
0F220F0F000000220F0F220F0F220F0F000000220F0F220F0F000000220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F000000000000220F0F220F0F000000000000220F0F000000 |
220F0F0000000000000000000000000000005236375236375236370000000000 |
0000000000000000000000000000000000000000000000000052363700000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000052363700 |
0000000000000000000000000000000000523637000000000000000000000000 |
0000000000000000000000005236370000000000005236370000000000000000 |
0000000000000000000000000052363700000000000000000052363700000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000220F0F000000000000000000000000523637 |
0000000000005236370000000000000000000000000000000000000000000000 |
0000000000000000000000000052363752363752363700000000000000000000 |
0000000000000000000000000000000000000000000000000000000000220F0F |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000220F0F000000220F0F0000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000523637220F0F220F0F220F0F220F0F220F0F220F0F000000 |
220F0F220F0F000000000000220F0F220F0F0000000000000000000000000000 |
00000000220F0F220F0F000000220F0F220F0F220F0F000000220F0F00000000 |
0000000000000000220F0F220F0F220F0F000000000000000000000000220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F0000 |
00000000220F0F220F0F220F0F220F0F000000000000000000220F0F00000000 |
0000220F0F000000000000220F0F220F0F220F0F220F0F000000000000220F0F |
000000220F0F000000220F0F220F0F220F0F000000220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F000000000000220F0F220F0F00000022 |
0F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F523637806B6A220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F |
000000220F0F220F0F000000000000000000000000000000000000220F0F0000 |
0000000000000000000000000052363752363700000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000220F0F5236370000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000523637000000000000523637000000000000000000000000000000 |
0000000000000000000000000000000000000000005236375236375236370000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000220F0F000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000220F0F000000220F0F000000000000 |
0000000000005236370000000000005236370000000000000000005236370000 |
0000000052363700000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000523637000000000000000000 |
000000220F0F220F0F0000000000000000000000000000000000000000005236 |
3700000000000052363700000000000052363700000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000220F0F00000000000000000000000000000000000000 |
0000000000000000000000220F0F000000000000220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F806B6A0000 |
00000000220F0F220F0F220F0F220F0F220F0F000000000000220F0F220F0F22 |
0F0F000000220F0F220F0F000000220F0F000000220F0F220F0F220F0F000000 |
000000000000000000523637220F0F523637000000220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000000000220F0F00 |
0000220F0F220F0F220F0F220F0F000000000000220F0F220F0F220F0F000000 |
000000220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F000000220F0F000000000000220F0F220F0F000000220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F000000000000220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000 |
000000220F0F220F0F000000220F0F220F0F523637220F0F220F0F0000005236 |
37220F0F00000000000052363752363700000000000000000000000000000000 |
0000000000000000000000000000523637000000000000000000000000000000 |
0000005236370000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000523637000000000000523637000000000000 |
0000005236370000000000005236370000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000052363700 |
0000000000000000000000220F0F220F0F000000000000000000000000000000 |
0000000000005236370000000000005236370000000000005236370000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000005236 |
3752363700000000000000000000000000000000000000000052363700000000 |
0000000000000000000000000000000000000000523637000000000000523637 |
000000000000000000000000000000000000000000000000000000220F0F0000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000806B6A220F0F000000000000000000220F0F0000 |
00000000000000000000000000000000000000000000000000220F0F00000000 |
0000000000000000000000000000000000220F0F000000000000220F0F220F0F |
220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000220F |
0F220F0F000000220F0F220F0F000000220F0F220F0F220F0F000000220F0F00 |
0000220F0F000000000000220F0F000000220F0F220F0F000000000000220F0F |
220F0F220F0F220F0F000000000000000000220F0FD5BDBB220F0F220F0F5236 |
37523637523637220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F000000000000220F0F220F0F000000 |
220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F0000000000000000 |
00000000220F0F000000220F0F220F0F220F0F000000220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F806B6A220F0F |
220F0F000000220F0F000000220F0F220F0F220F0F220F0F220F0F000000220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F00000000000000000000000000000052363752363700000000000000000000 |
0000000000523637000000000000523637523637000000000000000000000000 |
5236370000000000000000005236370000000000005236370000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000005236375236370000000000000000000000000000000000000000 |
0052363700000000000000000000000000000000000000000000000052363700 |
0000000000523637000000000000000000000000000000000000000000000000 |
000000220F0F0000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000806B6A220F0F000000000000 |
000000220F0F0000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000523637000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000052363700000000000000000000000000000052363700000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000220F0F0000000000 |
00000000000000000000220F0F000000220F0F00000000000000000000000022 |
0F0F000000220F0F000000220F0F000000000000000000000000000000000000 |
000000220F0F000000000000000000000000000000220F0F000000000000220F |
0F220F0F220F0F220F0F220F0F000000806B6A000000220F0F220F0F00000022 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F000000220F0F000000220F0F220F0F220F0F220F0F000000220F |
0F523637220F0F220F0F523637220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F000000000000220F0F220F0F220F0F220F0F |
220F0F220F0F000000220F0F000000220F0F000000000000220F0F000000220F |
0F220F0F000000220F0F220F0F220F0F000000000000220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F |
000000220F0F220F0F000000000000220F0F220F0F220F0F220F0F220F0F220F |
0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F00000000000000000000000000000000 |
0000000000000000000000000000000000523637000000000000000000000000 |
523637220F0F000000000000000000000000000000000000000000000000220F |
0F806B6A00000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000052363700000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000005236370000000000000000000000000000005236 |
3700000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
220F0F000000000000000000000000000000220F0F000000220F0F0000000000 |
00000000000000220F0F00000000000000000052363700000000000000000000 |
0000000000523637000000000000000000000000000000000000000000000000 |
0000000000000000005236370000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000220F0F000000000000000000000000000000220F0F000000000000 |
220F0F000000000000000000000000000000220F0F000000220F0F000000220F |
0F000000000000220F0F220F0F220F0F000000000000D5BDBB220F0FD5BDBB22 |
0F0F220F0F220F0F000000000000000000000000000000000000523637220F0F |
000000000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F000000523637523637523637220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F806B6A |
806B6A220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F000000000000220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F000000220F0F220F0F000000220F0F220F0F220F0F000000220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000000000220F0F220F |
0F220F0F220F0F220F0F523637220F0F220F0F220F0F523637220F0F00000022 |
0F0F000000000000000000000000000000000000000000000000000000000000 |
523637000000000000000000220F0F0000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000005236370000 |
0000000000000000000000000052363700000000000000000000000000000000 |
0000000000000000000000000000000000523637000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000220F0F00000000000000000000000000000000 |
0000523637000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000052363700000000000000000000000000 |
0000000000000000000000000000000000000000000000000000523637000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000052363700000000000000000000000000000000 |
0000000000000000000000000000000000000000220F0F220F0F000000000000 |
220F0F000000220F0F000000000000000000000000000000000000220F0F0000 |
00220F0F000000000000000000220F0F220F0F000000220F0F00000052363700 |
0000000000EBEBEBD5BDBB000000000000000000220F0F000000000000000000 |
220F0F000000806B6A000000220F0F220F0F806B6A220F0F220F0F220F0F5236 |
37220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F00 |
0000523637220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F806B6A000000220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F000000220F0F220F0F000000000000220F0F22 |
0F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F000000220F0F000000220F0F523637220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F0000 |
00220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F22 |
0F0F523637220F0F220F0F000000000000220F0F000000220F0F000000220F0F |
0000000000005236370000005236370000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000052363700000000 |
0000000000000000523637000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000052363700000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000005236370000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000523637000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000005236370000000000000000 |
00000000000000000000000000000000000000000000000000000000220F0F22 |
0F0F000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000523637000000000000000000220F0F220F0F00000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000220F0F000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00523637220F0F220F0F000000220F0F000000000000000000000000220F0F00 |
0000000000220F0F000000220F0F000000000000220F0F523637523637523637 |
220F0F220F0F220F0F220F0F220F0F000000000000000000000000523637220F |
0F000000220F0F220F0F000000220F0F000000220F0F220F0F220F0F220F0F22 |
0F0F220F0F000000220F0F000000220F0F220F0F220F0F220F0F220F0F000000 |
220F0F220F0F220F0F000000220F0F220F0F220F0F523637220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F00000022 |
0F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F0000 |
00220F0F000000220F0F220F0F523637523637220F0F220F0F220F0F00000022 |
0F0F220F0F220F0F000000220F0F220F0F220F0F806B6A220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F22 |
0F0F000000220F0F000000220F0F220F0F220F0F220F0F523637523637523637 |
220F0F220F0F000000000000220F0F0000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000052 |
3637523637000000523637000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000523637000000000000000000220F0F220F |
0F00000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000220F0F00000000000000000000000000000000 |
0000000000000000000000000000000000000000000000523637000000000000 |
0000000000005236370000000000005236370000000000000000005236370000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000523637000000000000000000000000000000000000220F0F000000 |
000000000000000000000000000000000000000000000000000000220F0F0000 |
00000000000000220F0F220F0F000000000000000000000000220F0F00000022 |
0F0F000000000000220F0F220F0F000000523637220F0F523637523637000000 |
806B6A220F0F806B6A523637000000000000220F0F220F0F000000220F0F0000 |
00220F0F220F0F806B6A220F0F220F0F000000220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0FD5BDBBD5BDBB523637523637523637806B6A |
806B6A220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F00 |
0000220F0F220F0F000000220F0F220F0F000000220F0F220F0F220F0F000000 |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F000000523637220F0F220F0F000000000000220F0F22 |
0F0F220F0F220F0F000000220F0F220F0F220F0F000000220F0F220F0F220F0F |
523637220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F523637220F0F220F0F220F0F220F0F220F0F523637220F0F22 |
0F0F220F0F000000220F0F220F0F523637220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F523637220F0F000000523637220F0F0000000000 |
0000000000000000000000000052363700000000000052363700000052363700 |
0000000000523637000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000052 |
3637000000000000000000000000523637000000000000523637000000000000 |
0000005236370000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000052363700000000000000000000000000000000 |
0000220F0F000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000523637000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000052363700000000000000000000000000 |
0000000000000000000000000000000000220F0F000000000000000000000000 |
000000220F0F000000000000000000000000000000000000000000220F0F0000 |
00000000000000220F0F000000220F0F000000000000220F0F220F0F00000000 |
0000220F0F220F0F000000000000000000220F0F000000220F0F000000220F0F |
000000220F0F220F0F220F0F806B6A000000D5BDBB523637220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F000000220F0F220F0F00000000000000000000 |
0000220F0F220F0F220F0F220F0F000000000000220F0F523637806B6A220F0F |
220F0F806B6A220F0F220F0F806B6A220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F000000000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F000000220F0F220F0F220F0F220F0F000000220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F00 |
0000000000220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F523637 |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F5236 |
37220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F000000220F0F220F0F000000000000220F0F220F0F |
220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F220F0F5236375236 |
37220F0F000000000000000000220F0F00000000000000000000000000000000 |
0000000000000000000000000000000000000000000000523637000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000052363700 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000005236370000000000 |
00000000000000000000000000000000000000000000000000220F0F00000000 |
0000000000000000000000220F0F000000000000000000000000000000000000 |
000000220F0F5236370000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000220F0F0000000000 |
00000000220F0F000000000000000000000000000000220F0F00000000000000 |
0000000000220F0F000000000000000000220F0F220F0F000000220F0F000000 |
220F0F220F0F220F0F000000220F0F220F0F220F0F000000D5BDBB220F0F220F |
0F523637000000220F0F000000000000000000000000220F0F00000000000000 |
0000000000220F0F000000000000523637220F0F220F0F220F0F220F0F220F0F |
220F0F000000220F0F220F0F220F0F806B6A220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F000000220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F0000 |
00220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F523637000000220F0F220F0F000000220F0F523637000000220F0F000000 |
220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F523637220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F |
220F0F523637220F0F523637000000220F0F220F0F220F0F220F0F220F0F5236 |
37220F0F220F0F220F0F00000000000000000000000000000000000000000000 |
0000000000523637000000000000523637000000523637000000000000523637 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000523637000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
220F0F000000000000000000220F0F0000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000523637220F0F00000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000000000000220F |
0F00000000000000000000000000000000000000000000000000000000000000 |
0000000000220F0F000000000000000000220F0F000000000000000000220F0F |
000000000000220F0F220F0F220F0F220F0F000000220F0F523637523637220F |
0F000000000000000000220F0F000000220F0F220F0F220F0F523637220F0F00 |
0000000000000000220F0F000000000000000000220F0F220F0F220F0F220F0F |
000000220F0F220F0F220F0F220F0F806B6A523637220F0F220F0F220F0F220F |
0F220F0F000000220F0F220F0F220F0F000000220F0F220F0F220F0F00000022 |
0F0F220F0F220F0F220F0F220F0F523637220F0F000000220F0F220F0F220F0F |
000000220F0F220F0F000000220F0F000000000000220F0F220F0F220F0F220F |
0F000000000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F523637220F0F |
220F0F000000220F0F220F0F220F0F000000000000220F0F000000220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F000000220F0F523637220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F0000 |
00000000220F0F220F0F000000000000220F0F52363700000000000000000000 |
0000220F0F000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000052363700000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000005236 |
37220F0F00000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000220F0F0000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000220F0F000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000000220F0F0000 |
00000000000000000000220F0F00000000000000000000000000000000000000 |
0000000000220F0F220F0F220F0F000000000000000000220F0F000000000000 |
000000000000220F0F220F0F220F0F220F0F000000000000220F0F000000220F |
0F220F0F220F0F000000220F0F220F0F000000220F0F00000052363700000022 |
0F0F220F0F220F0F220F0F000000220F0F000000000000000000000000220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F22 |
0F0F523637220F0F220F0F000000220F0F523637220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F000000220F0F000000220F0F000000220F0F220F |
0F220F0F000000220F0F220F0F220F0F000000000000000000220F0F220F0F00 |
0000220F0F000000000000000000220F0F000000220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F00000000 |
0000220F0F523637220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F000000220F0F000000220F0F220F0F220F0F000000220F0F00000022 |
0F0F000000000000000000000000000000000000000000523637000000000000 |
5236370000000000000000005236370000000000000000005236370000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000220F0F00000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000220F0F000000000000000000000000220F0F0000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000220F0F523637000000000000220F0F000000 |
000000000000000000000000000000220F0F0000000000000000000000000000 |
00000000000000000000220F0F000000220F0F220F0F220F0F000000806B6A80 |
6B6A220F0F220F0F220F0F000000000000220F0F000000000000220F0F000000 |
000000000000220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F000000523637000000220F0F000000806B6A |
D5BDBB220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F0000 |
00220F0F220F0F220F0F220F0F220F0F000000220F0F000000220F0F220F0F00 |
0000220F0F220F0F000000220F0F000000220F0F220F0F220F0F220F0F000000 |
220F0F220F0F000000220F0F523637523637523637220F0F000000220F0F220F |
0F220F0F523637220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F523637220F0F220F |
0F220F0F000000220F0F220F0F220F0F000000000000523637000000220F0F22 |
0F0F220F0F000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000220F0F000000000000220F0F000000000000000000000000 |
220F0F0000000000000000000000000000000000000000000000000000000000 |
00000000220F0F220F0F220F0F000000000000000000220F0F00000000000022 |
0F0F000000220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F |
000000220F0F000000000000220F0F000000000000000000220F0F220F0F220F |
0F220F0F220F0F220F0F000000000000220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000 |
220F0F000000220F0F806B6A220F0F220F0F000000220F0F000000000000220F |
0F000000220F0F220F0F220F0F220F0F000000220F0F000000220F0F220F0F22 |
0F0F220F0F000000000000220F0F220F0F220F0F220F0F220F0F220F0F000000 |
000000220F0F220F0F220F0F220F0F000000523637523637220F0F220F0F220F |
0F523637220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F000000220F0F523637220F0F00000000000052363700000000000000000000 |
0000523637220F0F220F0F220F0F220F0F523637220F0F220F0F000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000220F0F000000000000220F0F00000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000220F0F000000 |
000000000000000000000000000000000000000000000000000000220F0F0000 |
00000000000000000000220F0F220F0F000000000000220F0F00000000000000 |
0000220F0F220F0F220F0F000000220F0F220F0F220F0F523637000000220F0F |
220F0F000000220F0F220F0F220F0F220F0F000000000000220F0F000000220F |
0F523637220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F523637220F0F000000220F0F220F0F000000220F0F220F |
0F000000000000220F0F000000000000000000220F0F220F0F220F0F220F0F22 |
0F0F000000220F0F220F0F000000000000220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F0000 |
00220F0F220F0F523637220F0F000000220F0F220F0F220F0F220F0F220F0F22 |
0F0F000000220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F |
220F0F523637220F0F220F0F220F0F220F0F220F0F000000220F0F523637220F |
0F220F0F220F0F220F0F220F0F220F0F000000220F0F00000000000052363700 |
0000220F0F523637000000000000220F0F523637220F0F220F0F000000220F0F |
523637220F0F0000000000000000000000000000000000000000000000000000 |
0000000000000000000000000052363700000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000220F0F000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00220F0F000000000000000000220F0F000000000000000000000000220F0F00 |
0000220F0F000000000000000000220F0F220F0F000000000000000000220F0F |
220F0F220F0F000000220F0F220F0F220F0F220F0F000000000000220F0F220F |
0F000000000000220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F00 |
0000000000000000220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F5236375236375236 |
37523637000000220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F00 |
0000220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000806B6A523637 |
220F0F220F0F000000220F0F000000220F0F220F0F220F0F000000000000220F |
0F220F0F000000523637220F0F220F0F000000220F0F220F0F220F0F220F0F52 |
3637220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F000000000000220F0F523637220F0F220F0F22 |
0F0F000000220F0F000000000000220F0F220F0F000000220F0F000000000000 |
220F0F000000000000220F0F0000005236370000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000220F0F00000000000000000000000000000000000000000000000000 |
0000000000000000220F0F000000000000220F0F000000220F0F000000000000 |
000000000000000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F0000 |
00523637000000220F0F220F0F220F0F220F0F220F0F220F0F00000000000000 |
0000220F0F220F0F220F0F000000000000220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F523637220F0F220F0F220F0F220F0F220F0F523637220F0F00000052363722 |
0F0F220F0F000000220F0F000000220F0F220F0F220F0F220F0F000000220F0F |
220F0F220F0F000000000000000000220F0F000000000000523637000000220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F000000000000220F0F220F0F00 |
0000000000220F0F000000220F0F220F0F220F0F220F0F000000220F0F220F0F |
220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F000000220F |
0F523637000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F000000220F0F000000000000523637000000000000000000000000 |
523637220F0F000000220F0F000000220F0F5236370000000000000000000000 |
0000000000000000000052363700000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000005236375236370000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00220F0F220F0F00000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000220F0F000000000000 |
000000000000220F0F000000000000000000220F0F220F0F000000220F0F220F |
0F000000220F0F220F0F220F0F806B6A220F0F000000220F0F00000000000000 |
0000220F0F000000220F0F000000000000000000000000000000220F0F000000 |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F523637220F0F000000000000220F0F220F0F00000052363752363722 |
0F0F220F0F000000220F0F000000523637220F0F000000000000220F0F220F0F |
220F0F220F0F220F0F806B6A220F0F000000000000220F0F220F0F220F0F220F |
0F000000220F0F220F0F000000000000220F0F000000220F0F220F0F220F0F00 |
0000220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F000000220F0F |
220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F5236 |
37000000000000220F0F000000220F0F000000000000220F0F220F0F00000022 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F000000000000 |
220F0F220F0F220F0F220F0F000000000000220F0F220F0F000000000000220F |
0F00000052363700000000000000000000000000000000000000000000000000 |
0000000000000000000000000000220F0F000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000220F0F220F0F0000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000220F0F000000220F0F0000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000220F0F000000000000000000000000220F0F000000000000 |
220F0F000000000000000000000000220F0F220F0F220F0F220F0F220F0F0000 |
00000000220F0F000000000000000000220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F000000000000220F0F220F0F220F0F220F0F220F0F000000 |
220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F523637523637220F0F220F0F00000052 |
3637806B6A220F0F000000220F0F220F0F523637220F0F220F0F000000000000 |
220F0F220F0F000000220F0F220F0F523637523637220F0F806B6A0000000000 |
00220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F000000220F0F22 |
0F0F220F0F220F0F220F0F220F0F000000000000220F0F000000220F0F220F0F |
000000220F0F523637220F0F000000220F0F220F0F220F0F220F0F000000220F |
0F523637000000220F0F220F0F523637523637220F0F220F0F000000220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F523637 |
220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F |
0F220F0F220F0F000000000000000000220F0F00000000000000000000000022 |
0F0F000000523637000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000220F0F000000220F0F000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000022 |
0F0F000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000005236 |
3700000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000523637D5BDBB220F0F0000000000000000000000000000000000 |
00220F0F000000000000220F0F000000220F0F000000220F0F00000052363722 |
0F0F000000000000220F0F220F0F523637220F0F000000000000000000220F0F |
220F0F220F0F523637523637220F0F806B6A220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F00000022 |
0F0F220F0F220F0F220F0F000000806B6A220F0F220F0F220F0F806B6A000000 |
000000220F0F000000220F0F000000000000000000523637220F0F220F0F0000 |
00806B6A220F0F220F0F523637220F0F220F0F220F0F220F0F000000220F0F22 |
0F0F220F0F220F0F000000523637000000523637220F0F000000000000523637 |
220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F000000220F0F220F |
0F523637220F0F220F0F523637220F0F220F0F523637220F0F523637220F0F22 |
0F0F000000220F0F220F0F523637220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F523637220F0F220F0F000000220F0F000000220F0F220F0F0000 |
00000000000000220F0F000000000000000000000000220F0F00000000000000 |
0000000000000000000000220F0F000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000220F0F00000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000005236370000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000220F0F000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000220F0F00000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000220F0FEBEBEB220F0F0000000000 |
00220F0F000000000000000000000000000000000000220F0F220F0F220F0F22 |
0F0F000000000000220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F000000220F0F220F0F000000220F0F806B6A523637000000523637220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F00000022 |
0F0F220F0F000000523637523637000000220F0F000000000000220F0F220F0F |
000000220F0F220F0F000000220F0F220F0F000000000000000000220F0F0000 |
00220F0F220F0F806B6A220F0F000000220F0F523637523637220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F |
000000220F0F523637000000220F0F000000000000523637220F0F220F0F0000 |
00000000000000220F0F000000523637220F0F220F0F220F0F220F0F220F0F00 |
0000000000523637000000220F0F220F0F000000220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F523637000000220F0F523637220F0F220F0F220F |
0F000000000000000000000000000000000000000000220F0F52363700000022 |
0F0F523637000000220F0F000000220F0F000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000220F0F00000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000220F0F0000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000052363700000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000000000000220F |
0F523637220F0F00000000000000000000000000000000000000000000000000 |
0000220F0F000000000000000000000000220F0F000000220F0F000000220F0F |
220F0F220F0F000000000000220F0F000000220F0F000000220F0F0000000000 |
00220F0F220F0F220F0F000000806B6A523637220F0F220F0F220F0F220F0F22 |
0F0F220F0F000000220F0F000000523637220F0F220F0F000000000000000000 |
220F0F000000806B6A220F0F220F0F220F0F000000000000220F0F220F0F220F |
0F000000000000220F0F523637000000220F0F220F0F220F0F000000220F0F22 |
0F0F000000220F0F000000000000000000220F0F220F0F220F0F000000000000 |
220F0F220F0F220F0F220F0F523637000000220F0F220F0F220F0F220F0F0000 |
00220F0F220F0F220F0F220F0F000000220F0F000000220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F |
0F220F0F220F0F220F0F220F0F000000220F0F000000000000000000220F0F22 |
0F0F220F0F000000220F0F000000000000000000000000000000000000000000 |
000000000000000000220F0F0000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000005236370000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000220F0F0000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000022 |
0F0F000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000220F0F0000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000220F0F220F0F000000000000000000220F0F000000220F0F220F0F |
000000000000000000000000220F0F000000000000000000220F0F0000000000 |
00220F0F000000220F0F220F0F220F0F220F0F220F0F220F0FD5BDBB806B6A22 |
0F0F220F0F220F0F220F0F000000220F0F220F0F220F0F000000000000523637 |
220F0F000000523637000000220F0F220F0F220F0F000000000000220F0F0000 |
00220F0F000000220F0F000000000000000000220F0F220F0F220F0F220F0F00 |
0000000000000000000000000000000000220F0F000000000000220F0F220F0F |
220F0F523637220F0F220F0F220F0F000000220F0F000000220F0F523637220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F52363700000000000022 |
0F0F220F0F220F0F000000523637220F0F523637000000220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F0000000000 |
00220F0F000000220F0F000000000000220F0F220F0F220F0F000000220F0F00 |
0000000000000000000000220F0F000000000000220F0F000000000000220F0F |
000000000000000000000000000000000000220F0F0000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000220F0F000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000220F0F00000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000220F0F00000000000000000000000000 |
0000000000000000220F0F220F0F000000000000000000220F0F220F0F220F0F |
000000000000000000000000000000000000000000220F0F220F0F000000220F |
0F000000220F0F220F0F000000220F0F220F0F000000000000220F0F220F0F22 |
0F0F000000220F0F220F0F220F0F000000000000220F0F220F0F000000220F0F |
000000220F0F220F0F000000523637220F0F220F0F220F0F000000220F0F220F |
0F000000220F0F523637000000220F0F00000052363700000052363700000000 |
0000000000000000000000000000000000220F0F000000220F0F220F0F000000 |
220F0F220F0F220F0F220F0F000000000000000000220F0F000000000000220F |
0F000000220F0F000000220F0F220F0F220F0F000000523637220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F523637 |
220F0F000000220F0F220F0F220F0F000000220F0F000000220F0F806B6A220F |
0F523637220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F00000022 |
0F0F000000000000220F0F220F0F220F0F000000220F0F220F0F000000000000 |
000000000000000000000000000000220F0F0000000000000000000000000000 |
00000000000000000000000000000000000000000000000000220F0F00000000 |
0000000000000000000000000000000000000000000000000000000000523637 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000806B6A000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000220F0F52363700000000000000000000000000000000 |
0000000000000000000000000000000000220F0F000000000000000000000000 |
220F0F000000220F0F000000000000220F0F000000220F0F000000220F0F220F |
0F000000220F0F220F0F220F0F220F0F220F0F220F0F000000806B6A220F0F00 |
0000000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000 |
220F0F220F0F000000220F0F000000220F0F000000220F0F220F0F220F0F220F |
0F220F0F000000220F0F000000000000220F0F000000220F0F220F0F00000052 |
3637000000220F0F000000000000000000000000220F0F220F0F000000000000 |
000000523637220F0F000000000000220F0F220F0F220F0F000000220F0F220F |
0F000000000000220F0F000000000000220F0F523637000000220F0F00000022 |
0F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F523637523637220F0F220F0F220F0F523637220F0F220F0F220F0F0000 |
00220F0F523637000000220F0F220F0F523637000000220F0F220F0F220F0F22 |
0F0F220F0F220F0F000000220F0F220F0F000000000000000000220F0F220F0F |
220F0F220F0F000000000000220F0F000000000000000000220F0F220F0F0000 |
00220F0F220F0F000000000000000000000000000000220F0F220F0F00000022 |
0F0F220F0F000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000806B6A00000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000220F0F000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000220F0F000000 |
220F0F000000000000000000000000220F0F220F0F000000000000220F0F220F |
0F000000000000000000220F0F220F0F220F0F523637220F0F00000000000000 |
0000000000220F0F000000220F0F000000000000000000000000220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F0000000000000000 |
00000000000000220F0F523637220F0F000000000000220F0F00000000000080 |
6B6A220F0F000000000000000000000000220F0F523637220F0F000000220F0F |
000000000000220F0F000000000000220F0F000000220F0F000000000000220F |
0F220F0F000000220F0F220F0F000000000000220F0F52363700000052363700 |
0000220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F000000220F0F |
220F0F000000220F0F523637220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F523637220F0F220F0F523637000000000000220F0F220F0F00 |
0000220F0F220F0F220F0F220F0F220F0F000000000000220F0F000000220F0F |
000000000000220F0F000000220F0F000000000000000000000000220F0F0000 |
00000000000000000000000000220F0F00000000000000000000000000000000 |
0000000000000000000000220F0F000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000000000220F0F00 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000220F0F0000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000220F0F000000000000000000000000000000000000 |
000000000000220F0F220F0F000000000000000000000000000000000000220F |
0F000000220F0F220F0F000000000000220F0F000000220F0F000000220F0F00 |
0000220F0F000000220F0F000000220F0F000000220F0F000000000000220F0F |
000000220F0F220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F220F |
0F220F0F806B6A220F0F220F0F000000220F0F220F0F00000000000000000000 |
0000000000220F0F220F0F000000000000000000000000220F0F000000523637 |
000000000000000000220F0F000000000000000000220F0F220F0F523637220F |
0F220F0F000000000000000000220F0F523637000000220F0F220F0F00000000 |
0000000000220F0F220F0F220F0F000000220F0F220F0F000000220F0F220F0F |
000000000000000000220F0F000000000000220F0F220F0F220F0F220F0F220F |
0F220F0F523637000000220F0F523637523637523637220F0F220F0F220F0F22 |
0F0F220F0F000000220F0F220F0F220F0F220F0F000000000000000000220F0F |
220F0F220F0F000000000000220F0F000000220F0F220F0F523637000000220F |
0F000000000000000000000000000000220F0F000000000000220F0F00000022 |
0F0F000000000000220F0F000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000220F0F000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000220F0F000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00220F0F000000220F0F000000000000000000000000220F0F220F0F00000022 |
0F0F000000000000220F0F000000000000000000000000220F0F220F0F220F0F |
000000000000000000220F0F000000220F0F000000220F0F220F0F220F0F0000 |
00000000220F0F000000220F0F220F0F000000523637000000000000220F0F00 |
0000000000220F0F220F0F000000000000220F0F000000000000220F0F000000 |
000000000000000000220F0F000000000000220F0F000000220F0F0000000000 |
00523637000000000000220F0F000000000000220F0F000000220F0F00000000 |
0000220F0F523637220F0F000000523637000000220F0F220F0F000000220F0F |
220F0F220F0F220F0F000000000000000000000000220F0F000000220F0F220F |
0F220F0F220F0F220F0F000000220F0F220F0F523637220F0F523637220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F000000D5BDBB220F0F000000220F0F000000220F0F0000000000 |
00220F0F000000000000220F0F000000000000220F0F00000000000052363700 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000220F0F00000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000220F0F000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000005236 |
37000000000000000000000000000000220F0F000000220F0F220F0F00000022 |
0F0F220F0F220F0F220F0F000000000000000000000000000000000000220F0F |
220F0F220F0F000000000000220F0F000000000000000000000000220F0F0000 |
00000000000000000000000000000000000000523637220F0F220F0F52363722 |
0F0F220F0F000000523637000000000000220F0F220F0F220F0F000000000000 |
000000000000806B6A000000220F0F000000000000000000220F0F000000220F |
0F220F0F220F0F000000000000000000000000220F0F000000000000220F0F00 |
0000000000000000220F0F523637220F0F220F0F000000220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F5236 |
37220F0F000000220F0F220F0F220F0F220F0F220F0F000000000000220F0F22 |
0F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F000000 |
220F0F000000220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F0000 |
00220F0F220F0F000000000000000000000000000000000000000000220F0F00 |
0000000000000000000000220F0F220F0F220F0F220F0F220F0F220F0F000000 |
000000220F0F000000220F0F0000000000000000000000000000000000000000 |
00000000000000000000000000220F0F00000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000022 |
0F0F000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000220F0F00000000000000000000000000000000000000 |
0000000000000000000000000000220F0F000000000000220F0F000000000000 |
000000000000000000220F0F220F0F000000220F0F220F0F000000000000220F |
0F220F0F000000220F0F220F0F000000220F0F220F0F000000220F0F00000052 |
3637000000523637000000523637000000000000000000000000000000000000 |
000000000000000000000000000000000000000000220F0F0000000000000000 |
00000000220F0F220F0F000000000000523637000000220F0F00000000000000 |
0000523637000000220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F |
220F0F000000220F0F000000000000220F0F220F0F000000000000220F0F0000 |
00523637220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F00000022 |
0F0F220F0F523637220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
000000220F0F220F0F220F0F220F0F220F0F220F0F0000000000000000000000 |
00000000000000000000220F0F000000000000000000220F0F00000000000000 |
0000000000220F0F000000000000000000000000523637000000000000000000 |
000000000000220F0F000000000000220F0F000000000000220F0F0000000000 |
0000000000000000000000000000000000000000000000000052363700000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000220F0F220F0F000000 |
000000000000220F0F220F0F220F0F000000220F0F220F0F220F0F000000220F |
0F000000000000000000220F0F00000000000000000000000000000000000000 |
0000000000220F0F000000000000000000000000220F0F000000000000000000 |
220F0F000000220F0F220F0F000000220F0F000000220F0F0000000000000000 |
00220F0F000000000000220F0F000000000000000000000000220F0F00000022 |
0F0F000000220F0F220F0F220F0F000000000000220F0F220F0F220F0F000000 |
220F0F220F0F000000220F0F523637220F0F000000220F0F220F0F000000220F |
0F220F0F000000220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F22 |
0F0F220F0F000000220F0F523637000000220F0F000000220F0F000000000000 |
220F0F523637220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F000000000000220F0F000000000000000000220F0F22 |
0F0F000000220F0F000000000000000000000000000000000000000000000000 |
220F0F0000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000220F0F00000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000523637220F0F00000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
220F0F000000000000000000220F0F000000000000000000000000220F0F220F |
0F000000220F0F220F0F220F0F000000000000220F0F220F0F00000000000000 |
0000220F0F000000220F0F000000000000000000000000220F0F000000000000 |
000000000000220F0F220F0F000000000000000000000000220F0F220F0F220F |
0F000000000000000000000000220F0F000000220F0F220F0F00000000000000 |
0000000000000000000000806B6A000000000000000000000000220F0F000000 |
220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F0000 |
00523637523637220F0F220F0F220F0F523637000000220F0F220F0F220F0F22 |
0F0F806B6A220F0F523637220F0F220F0F000000000000220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F000000000000220F0F00000000000022 |
0F0F220F0F220F0F000000000000220F0F000000000000000000000000220F0F |
220F0F220F0F000000220F0F220F0F0000000000000000000000000000000000 |
00000000000000000000000000000000220F0F220F0F00000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000523637220F0F0000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000220F0F00000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000080 |
6B6A220F0F000000000000000000000000000000000000000000000000000000 |
000000000000000000000000220F0F000000000000000000220F0F000000220F |
0F220F0F000000220F0F220F0F220F0F220F0F000000000000220F0F00000022 |
0F0F000000000000220F0F000000000000220F0F220F0F220F0F000000220F0F |
220F0F000000220F0F0000000000000000000000000000000000000000000000 |
00220F0F220F0F000000523637000000220F0F220F0F220F0F000000220F0F22 |
0F0F220F0F220F0F806B6A000000000000000000220F0F000000220F0F523637 |
000000000000000000000000220F0F220F0F000000220F0F220F0F0000000000 |
00000000000000000000220F0F000000000000000000220F0F000000220F0F52 |
3637000000000000220F0F806B6A220F0F220F0F220F0F220F0F220F0F220F0F |
000000220F0F220F0F220F0F220F0F000000220F0F220F0F000000523637220F |
0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F22 |
0F0F000000000000000000000000000000220F0F000000000000000000000000 |
220F0F0000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000220F0F220F0F0000005236370000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000000000000220F |
0F00000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000523637000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000220F0F52363722 |
0F0F000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000000000000806B |
6A220F0F000000220F0F000000000000000000220F0F00000000000000000022 |
0F0F220F0F220F0F220F0F000000000000000000220F0F000000000000000000 |
000000000000220F0F220F0F220F0F220F0F220F0F000000220F0F0000000000 |
00220F0F000000000000000000220F0F000000220F0F00000000000000000000 |
0000000000000000806B6A000000000000220F0F000000000000000000220F0F |
000000000000000000000000000000000000220F0F220F0F000000220F0F0000 |
00000000220F0F000000000000220F0F220F0F000000523637220F0F220F0F00 |
0000000000220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F000000 |
220F0F523637220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F |
0F000000220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F000000000000000000000000000000000000000000220F0F |
000000000000220F0F0000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000000000220F0F00 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000220F0F0000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000052363700000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000806B6AEBEBEB523637000000000000000000000000000000000000 |
000000000000000000000000220F0F0000000000000000000000000000000000 |
00000000000000000000806B6A220F0F000000220F0F00000000000000000000 |
0000000000220F0F000000220F0F000000000000000000000000000000000000 |
000000220F0F000000000000000000000000220F0F220F0F220F0F220F0F0000 |
00000000000000000000220F0F000000220F0F220F0F00000000000000000000 |
0000000000220F0F000000000000220F0F000000220F0F000000000000220F0F |
220F0F000000220F0F000000000000000000000000000000000000220F0F220F |
0F000000000000220F0F220F0F220F0F000000220F0F220F0F523637220F0F22 |
0F0F220F0F000000220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F |
220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F000000220F0F523637220F0F220F0F220F0F220F0F000000220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F000000000000000000220F0F000000000000000000220F |
0F000000220F0F000000000000000000000000000000000000000000220F0F00 |
0000000000000000000000000000000000000000000000000000220F0F000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000220F0F00000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000220F0F0000000000 |
00000000000000000000220F0F220F0F806B6A52363700000000000000000000 |
0000000000000000000000000000000000806B6AD5BDBB523637000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000220F0F000000220F0F000000220F0F000000 |
000000000000000000220F0F000000000000220F0F000000000000220F0F220F |
0F000000000000000000000000220F0F220F0F00000000000000000000000000 |
0000000000000000000000000000220F0F000000000000000000000000000000 |
000000000000000000000000000000220F0F220F0F000000220F0F0000000000 |
00523637000000000000220F0F523637000000000000000000000000220F0F00 |
0000220F0F523637220F0F220F0F000000000000220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F5236370000 |
00220F0F000000220F0F000000220F0F000000220F0F220F0F220F0F220F0F52 |
3637220F0F220F0F220F0F220F0F220F0F000000806B6A220F0F220F0F220F0F |
000000220F0F220F0F220F0F000000000000000000000000220F0F0000000000 |
00220F0F000000000000000000000000000000000000000000220F0F220F0F22 |
0F0F000000000000220F0F000000000000220F0F000000220F0F220F0F000000 |
000000000000000000000000000000220F0F220F0F000000220F0F0000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
220F0F000000000000000000000000000000220F0F220F0F806B6A5236370000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000220F0F523637D5BDBBD5 |
BDBB220F0F000000000000000000000000000000000000000000000000000000 |
220F0F0000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000220F0F000000000000000000000000220F0F220F0F000000000000 |
000000220F0F000000000000220F0F000000220F0F000000000000220F0F0000 |
00000000220F0F000000220F0F220F0F000000000000220F0F000000220F0F52 |
3637000000000000000000000000220F0F000000000000000000000000220F0F |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000220F0F000000000000220F0F000000220F0F00000022 |
0F0F000000220F0F000000220F0F220F0F220F0F220F0F000000220F0F220F0F |
220F0F220F0F523637220F0F220F0F220F0F220F0F000000220F0F523637220F |
0F220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F000000523637000000220F0F220F0F220F0F523637220F0F220F0F220F0F |
220F0F000000220F0F000000000000000000220F0F220F0F220F0F220F0F0000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000220F0F000000000000000000000000000000000000 |
000000220F0F220F0F0000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000000000000220F |
0F523637D5BDBBD5BDBB220F0F00000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000022 |
0F0F000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000806B6A523637000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000220F0F000000000000000000000000000000000000220F0F |
220F0F000000220F0F220F0F000000000000000000220F0F000000523637220F |
0F000000000000000000220F0F000000220F0F000000220F0F220F0F00000052 |
3637220F0F220F0F220F0F000000000000000000000000000000000000523637 |
000000000000000000000000000000000000000000000000000000220F0F0000 |
00000000000000000000000000000000220F0F220F0F00000000000000000022 |
0F0F000000220F0F220F0F220F0F000000220F0F000000000000220F0F220F0F |
220F0F000000220F0F220F0F220F0F523637000000220F0F523637220F0F220F |
0F523637220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F52 |
3637220F0F220F0F523637000000523637000000523637220F0F000000220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F000000000000000000000000220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F00 |
0000000000000000220F0F000000220F0F000000000000000000000000000000 |
000000000000220F0F000000000000000000000000220F0F220F0F0000000000 |
00000000220F0F00000000000052363700000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000220F0F00000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000806B6A52363700000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
5236370000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000220F0F000000000000 |
220F0F220F0F000000220F0F000000000000000000000000000000220F0F220F |
0F220F0F220F0F000000000000220F0F00000000000000000000000000000022 |
0F0F220F0F000000000000220F0F000000220F0F220F0F000000000000000000 |
220F0F220F0F000000000000220F0F000000000000000000000000000000220F |
0F000000000000000000000000000000000000000000000000000000220F0F00 |
0000523637000000220F0F000000220F0F220F0F000000000000000000000000 |
220F0F000000220F0F220F0F220F0F220F0F000000523637000000220F0F0000 |
00220F0F220F0F523637220F0F220F0F220F0F000000000000220F0F00000022 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F |
220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F000000000000220F0F220F0F00000000000000000000000000000022 |
0F0F220F0F220F0F220F0F000000000000000000000000000000000000220F0F |
220F0F000000220F0F0000000000000000000000000000000000000000000000 |
00000000220F0F000000000000000000220F0F000000220F0F00000000000022 |
0F0F000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000523637000000000000000000000000000000000000000000 |
000000000000000000000000220F0F5236370000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000220F0F220F0F220F0F000000000000000000000000220F0F220F0F0000 |
00220F0F220F0F000000000000220F0F000000220F0F220F0F220F0F00000022 |
0F0F000000220F0F220F0F000000220F0F000000220F0F000000220F0F000000 |
0000005236370000000000000000000000000000000000000000000000000000 |
00000000000000000000000000220F0F000000000000220F0F000000220F0F22 |
0F0F000000000000000000000000000000000000000000220F0F000000220F0F |
220F0F220F0F220F0F220F0F000000000000523637523637220F0F000000220F |
0F220F0F220F0F523637220F0F220F0F000000000000220F0F220F0F220F0F22 |
0F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F523637220F0F220F0F523637220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F00000052363752363700000000 |
0000000000000000220F0F000000220F0F000000000000000000000000000000 |
000000220F0F0000000000000000000000000000000000000000000000000000 |
00000000000000220F0F00000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000220F0F000000000000000000 |
000000220F0F0000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000220F0F523637000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000000220F0F0000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000220F0F0000000000000000000000000000000000000000 |
00000000220F0F220F0F220F0F000000000000220F0F220F0F220F0F00000000 |
0000220F0F000000000000220F0F220F0F220F0F220F0F000000220F0F000000 |
220F0F220F0F000000220F0F000000000000000000220F0F0000000000000000 |
00000000000000806B6A806B6A00000000000000000000000000000000000000 |
0000000000220F0F220F0F000000000000000000000000000000220F0F220F0F |
220F0F000000220F0F000000000000000000220F0F000000220F0F000000220F |
0F220F0F523637220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F52 |
3637220F0F000000220F0F000000220F0F220F0F220F0F220F0F220F0F523637 |
220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F523637220F0F220F |
0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F00 |
0000000000220F0F220F0F220F0F000000220F0F000000000000220F0F000000 |
220F0F0000000000000000000000000000000000000000000000000000000000 |
00220F0F000000000000000000000000220F0F220F0F000000220F0F00000000 |
0000220F0F000000000000000000220F0F000000220F0F000000000000000000 |
000000000000000000220F0F0000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000220F0F0000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000220F0F00000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00220F0F000000220F0F000000000000220F0F000000000000000000220F0F00 |
0000000000220F0F000000000000000000220F0F000000000000220F0F220F0F |
220F0F220F0F000000000000220F0F000000220F0F0000000000000000000000 |
00220F0F000000000000000000220F0F00000000000000000000000000000022 |
0F0F000000000000000000000000220F0F220F0F000000220F0F000000220F0F |
220F0F220F0F220F0F220F0F220F0F000000000000220F0F220F0F220F0F0000 |
00220F0F000000220F0F000000220F0F000000220F0F220F0F220F0F220F0F22 |
0F0F220F0F000000220F0F523637523637220F0F220F0F220F0F220F0F220F0F |
220F0F000000000000220F0F523637220F0F000000220F0F523637523637220F |
0F220F0F220F0F000000220F0F220F0F220F0F000000220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F000000000000000000000000000000 |
000000000000000000000000000000000000000000220F0F0000000000000000 |
00000000000000000000000000220F0F00000000000000000000000000000000 |
0000000000220F0F000000000000000000220F0F220F0F000000000000000000 |
220F0F5236370000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000220F0F0000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000523637220F0F0000000000000000000000000000000000000000 |
00000000000000000000000000220F0F000000000000220F0F220F0F00000022 |
0F0F000000220F0F000000000000000000000000220F0F220F0F000000000000 |
000000000000000000000000220F0F000000220F0F220F0F000000000000220F |
0F220F0F000000220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F00 |
0000220F0F000000000000000000220F0F000000000000000000220F0F000000 |
000000220F0F220F0F220F0F000000220F0F220F0F220F0F000000220F0F220F |
0F000000000000000000000000220F0F220F0F000000220F0F00000000000022 |
0F0F220F0F000000220F0F220F0F000000220F0F523637000000523637220F0F |
220F0F523637220F0F220F0F220F0F000000220F0F220F0F220F0F523637220F |
0F523637220F0F220F0F220F0F220F0F000000000000220F0F220F0F220F0F00 |
0000220F0F220F0F220F0F220F0F220F0F000000000000220F0F000000000000 |
000000220F0F000000000000000000000000000000000000000000220F0F0000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000220F0F000000000000000000000000 |
000000000000220F0F220F0F000000000000000000000000000000220F0F0000 |
00000000220F0F00000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000220F0F523637 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000052363700000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000005236375236370000000000000000 |
00000000000000000000000000000000000000220F0F220F0F00000000000000 |
0000000000000000220F0F220F0F000000220F0F000000000000220F0F000000 |
220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F000000220F0F220F0F220F0F220F0F220F0F523637000000523637220F0F00 |
0000220F0F000000000000000000000000000000806B6A000000000000000000 |
000000220F0F000000000000000000000000220F0F000000000000220F0F220F |
0F220F0F000000220F0F220F0F000000220F0F220F0F220F0F220F0F00000022 |
0F0F220F0F220F0F523637000000000000000000220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F523637220F0F000000220F0F220F |
0F220F0F220F0F000000220F0F220F0F220F0F220F0F000000220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F |
000000000000000000220F0F220F0F220F0F220F0F000000000000000000220F |
0F000000000000220F0F000000220F0F000000000000000000220F0F00000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
220F0F0000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000220F0F523637000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000005236 |
3700000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000220F0F000000000000220F0F00000000 |
0000000000220F0F000000000000000000000000220F0F220F0F000000220F0F |
000000220F0F220F0F000000000000220F0F0000000000000000000000000000 |
00220F0F000000220F0F000000220F0F000000220F0F220F0F000000220F0F22 |
0F0F220F0F000000000000000000000000220F0F000000220F0F000000000000 |
000000000000000000220F0F000000000000220F0F0000000000000000000000 |
00220F0F220F0F220F0F220F0F000000000000000000220F0F00000052363722 |
0F0F000000523637220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F |
000000523637220F0F523637220F0F220F0F523637220F0F523637220F0F5236 |
37220F0F000000523637220F0F220F0F000000220F0F523637220F0F52363700 |
0000220F0F220F0F523637806B6A220F0F220F0F220F0F220F0F000000220F0F |
220F0F000000000000220F0F000000000000000000000000000000000000220F |
0F00000000000000000000000000000000000000000000000000000000000000 |
0000220F0F000000000000000000000000000000523637000000000000000000 |
220F0F0000000000000000000000005236370000000000000000005236370000 |
00000000000000000000000000220F0F00000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000220F0F52363700000000000000000000 |
0000000000000000000000000000000000000000000000000000000000523637 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000523637806B6A523637000000000000000000000000000000000000 |
220F0F000000000000000000220F0F220F0F220F0F000000220F0F220F0F0000 |
00000000220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F00000000 |
0000220F0F220F0F000000000000000000523637220F0F000000000000220F0F |
220F0F220F0F000000000000220F0F000000000000000000000000220F0F0000 |
00000000220F0F000000000000220F0F220F0F000000000000220F0F00000022 |
0F0F000000220F0F000000220F0F220F0F220F0F000000220F0F220F0F000000 |
220F0F523637220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F523637220F0F220F0F220F0F220F0F000000220F0F523637220F0F523637 |
220F0F220F0F220F0F220F0F220F0F000000000000000000000000220F0F220F |
0F000000000000000000220F0F000000220F0F000000000000220F0F220F0F22 |
0F0F000000000000000000000000000000000000000000220F0F000000000000 |
000000000000000000220F0F000000000000000000000000000000000000220F |
0F000000220F0F000000000000000000220F0F220F0F00000000000000000022 |
0F0F000000000000000000000000000000000000000000000000220F0F000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000220F0F5236370000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000523637000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000220F0F52363700 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000220F0F220F0F220F0F |
220F0F000000220F0F000000000000220F0F523637000000220F0F220F0F0000 |
00220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F00000000000022 |
0F0F000000000000220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F000000000000000000220F0F220F0F220F0F220F0F220F |
0F523637220F0F000000220F0F000000220F0F220F0F220F0F220F0F00000000 |
0000220F0F000000000000000000000000220F0F220F0F000000220F0F806B6A |
220F0F000000220F0F523637220F0F220F0F523637220F0F523637220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F22 |
0F0F523637220F0F523637220F0F220F0F220F0F220F0F220F0F000000220F0F |
220F0F220F0F523637220F0F220F0F220F0F220F0F220F0F220F0F220F0F0000 |
00220F0F000000220F0F220F0F220F0F806B6A000000000000220F0F00000000 |
0000000000000000000000000000000000220F0F000000000000000000000000 |
000000000000000000000000000000000000000000000000000000000000220F |
0F220F0F000000220F0F523637000000000000000000220F0F220F0F00000000 |
0000000000000000220F0F000000000000000000000000000000000000220F0F |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00220F0F52363700000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000523637000000220F0F000000000000000000523637220F0F |
220F0F000000220F0F000000000000000000000000220F0F000000220F0F5236 |
37220F0F220F0F000000000000000000220F0F220F0F220F0F220F0F220F0F00 |
0000000000000000220F0F220F0F220F0F000000220F0F000000220F0F220F0F |
220F0F220F0F000000220F0F000000000000220F0F220F0F000000000000220F |
0F000000220F0F000000000000000000220F0F000000220F0F000000220F0F00 |
0000000000000000220F0F000000220F0F220F0F000000000000000000220F0F |
220F0F220F0F000000220F0F220F0F000000220F0F220F0F220F0F220F0F220F |
0F000000220F0F220F0F523637220F0F220F0F220F0F220F0F220F0F52363722 |
0F0F220F0F220F0F220F0F220F0F220F0F523637220F0F000000220F0F000000 |
220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F |
0F000000000000000000000000000000000000000000000000000000220F0F00 |
0000000000220F0F000000000000220F0F000000000000000000000000000000 |
000000000000000000220F0F000000000000220F0F0000000000000000005236 |
37000000000000220F0F000000000000220F0F220F0F220F0F00000000000000 |
0000000000000000000000220F0F000000220F0F000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000052363700000000000000000000000000 |
0000523637000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000523637000000000000000000000000 |
000000000000000000523637523637000000220F0F000000220F0F220F0F0000 |
00220F0F220F0F220F0F000000000000000000220F0F220F0F220F0F00000022 |
0F0F220F0F220F0F220F0F000000000000220F0F000000220F0F000000220F0F |
000000220F0F220F0F000000000000220F0F220F0F523637523637000000220F |
0F000000000000523637000000220F0F220F0F220F0F220F0F00000000000000 |
0000523637000000220F0F000000220F0F000000000000220F0F000000220F0F |
000000220F0F523637220F0F220F0F220F0F806B6A220F0F000000220F0F220F |
0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F000000523637220F0F220F0F220F0F220F0F000000220F0F220F0F523637 |
220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F00000000000000000000000000000000000000000000 |
0000000000000000000000000000220F0F220F0F220F0F000000220F0F000000 |
220F0F0000000000000000000000000000000000000000000000000000000000 |
00000000220F0F000000220F0F523637000000000000220F0F220F0F00000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000005236370000000000 |
0000000000000000000052363700000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000220F0F523637000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000523637000000000000 |
000000000000000000000000000000000000220F0F000000000000220F0F0000 |
00000000000000220F0F000000220F0F220F0F52363700000052363700000022 |
0F0F000000000000220F0F220F0F220F0F220F0F000000000000000000220F0F |
000000220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F |
0F000000220F0F000000220F0F000000220F0F220F0F220F0F220F0F00000022 |
0F0F220F0F220F0F000000220F0F000000220F0F220F0F220F0F220F0F000000 |
000000220F0F220F0F220F0F220F0F000000523637220F0F220F0F523637220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F22 |
0F0F220F0F523637220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F0000 |
00220F0F000000220F0F220F0F220F0F000000000000000000220F0F00000000 |
0000000000000000000000000000000000000000220F0F220F0F000000220F0F |
000000000000000000000000220F0F000000220F0F000000220F0F0000000000 |
00220F0F000000000000220F0F000000000000220F0F000000220F0F00000000 |
0000000000000000220F0F000000220F0F220F0F000000220F0F523637000000 |
000000000000000000000000000000000000220F0F0000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000220F0F52363700000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000005236370000000000000000000000000000000000 |
00523637220F0F000000523637000000000000220F0F220F0F000000220F0F00 |
0000000000000000000000220F0F220F0F220F0F000000523637220F0F000000 |
000000000000000000220F0F220F0F000000220F0F220F0F220F0F000000220F |
0F000000220F0F000000000000220F0F000000000000220F0F00000000000052 |
3637220F0F000000220F0F523637000000000000220F0F523637523637000000 |
000000220F0F000000000000000000220F0F220F0F220F0F523637220F0F220F |
0F220F0F523637523637523637523637220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F00000000 |
0000000000220F0F220F0F000000000000000000000000000000000000000000 |
220F0F220F0F000000220F0F000000220F0F0000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000220F0F000000 |
000000000000220F0F000000220F0F220F0F0000000000000000000000000000 |
00000000000000220F0F000000220F0F220F0F00000000000000000000000022 |
0F0F000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000005236370000000000000000000000000000 |
00000000000000000000000000000000220F0F220F0F00000000000000000000 |
0000220F0F000000220F0F000000000000000000000000000000220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F22 |
0F0F000000220F0F220F0F000000000000000000220F0F220F0F000000000000 |
000000220F0F523637000000000000000000000000220F0F220F0F220F0F0000 |
00220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F523637220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F523637220F0F000000220F0F220F0F000000220F0F22 |
0F0F220F0F000000220F0F000000000000000000220F0F000000000000000000 |
000000000000000000000000000000000000000000000000220F0F0000000000 |
00000000000000220F0F000000000000000000000000000000220F0F00000000 |
0000220F0F000000220F0F000000220F0F000000220F0F000000000000000000 |
000000220F0F000000000000000000000000220F0F5236370000000000000000 |
00220F0F000000220F0F220F0F000000000000000000220F0F00000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000220F0F000000000000000000523637220F0F000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000523637000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000005236370000 |
00000000000000000000220F0F000000220F0F00000000000000000000000000 |
0000000000000000220F0F000000220F0F000000220F0F220F0F523637000000 |
220F0F000000000000220F0F000000000000220F0F000000220F0F000000220F |
0F220F0F220F0F220F0F220F0F000000220F0F220F0F000000220F0F220F0F22 |
0F0F220F0F220F0F000000000000000000523637220F0F000000220F0F220F0F |
220F0F000000000000220F0F220F0F220F0F000000000000523637220F0F220F |
0F000000000000220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F523637220F0F220F0F523637220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F000000000000220F0F523637D5BDBB000000 |
220F0F000000000000000000000000000000000000000000000000220F0F0000 |
00000000220F0F000000000000220F0F00000000000000000000000000000000 |
0000523637000000000000000000000000000000000000000000000000000000 |
000000000000000000000000220F0F000000000000000000000000220F0F0000 |
0000000052363700000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000220F0F00000000000000000052 |
3637220F0F000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000005236370000 |
00000000000000220F0F52363700000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000052363700000000000000000000000000000052363700000000000000 |
0000000000220F0F000000000000220F0F000000000000523637000000220F0F |
220F0F000000220F0F000000220F0F000000000000000000000000220F0F0000 |
00000000000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F00000022 |
0F0F220F0F220F0F000000220F0F220F0F523637220F0F220F0F220F0F000000 |
220F0F220F0F000000523637523637220F0F000000806B6A0000005236370000 |
00220F0F220F0F220F0F220F0F220F0F220F0F523637523637220F0F52363752 |
3637220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F000000523637220F0F220F0F220F0F220F0F000000000000 |
000000220F0F806B6A000000000000220F0F806B6A000000220F0F220F0F0000 |
00000000806B6A220F0F00000000000052363700000000000000000000000000 |
0000000000000000220F0F000000000000000000000000000000000000000000 |
000000220F0F0000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000523637220F0F00000052363700 |
0000220F0F220F0F000000000000000000000000000000000000000000000000 |
0000000000000000005236370000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000523637000000000000000000220F0F5236370000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000005236370000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000523637220F0F000000000000000000523637806B6A00000000000000 |
0000000000000000000000000000000000000000000000000000000000523637 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000523637000000000000220F0F220F0F000000220F0F000000220F0F |
220F0F220F0F000000000000220F0F000000220F0F000000000000220F0F220F |
0F220F0F220F0F000000220F0F220F0F220F0F220F0F000000220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F000000523637220F0F000000000000 |
220F0F220F0F220F0F000000000000523637000000220F0F220F0F220F0F220F |
0F523637220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F00 |
0000523637523637220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F523637220F0F523637220F0F523637220F |
0F220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F220F0F22 |
0F0F806B6A220F0F220F0F523637220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F000000000000220F0F000000000000000000000000220F0F5236 |
37000000220F0F220F0F00000000000000000000000000000000000000000000 |
0000000000000000000000000000220F0F806B6A220F0F000000000000220F0F |
0000000000000000000000000000000000000000000000000000000000005236 |
3700000000000000000000000000000052363700000000000000000000000000 |
0000523637000000000000523637220F0F000000000000000000523637000000 |
000000000000220F0F0000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000523637000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000523637220F0F000000000000000000523637806B |
6A00000000000000000000000000000000000000000000000000000000000000 |
0000000000523637000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000000220F0F0000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000220F0F0000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000052 |
3637806B6A000000000000000000000000000000000000000000000000220F0F |
220F0F220F0F000000000000523637220F0F220F0F0000005236370000000000 |
00220F0F220F0F220F0F220F0F000000220F0F000000220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
000000000000000000220F0F220F0F523637523637220F0F220F0F220F0F220F |
0F000000000000220F0F523637220F0F523637523637000000220F0F52363722 |
0F0F220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F220F0F |
000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F523637220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F523637523637000000220F0F523637220F0F220F0F523637220F0F |
220F0F220F0F000000220F0F220F0F000000000000000000000000220F0F0000 |
00000000000000220F0FD5BDBB000000220F0F806B6A00000000000000000000 |
0000000000220F0F000000000000220F0F000000000000000000000000220F0F |
220F0F000000000000000000000000000000220F0F000000000000220F0F0000 |
00000000000000000000000000220F0F000000000000000000220F0F52363700 |
0000220F0F000000000000000000000000220F0F000000220F0F000000220F0F |
000000000000523637000000523637220F0F0000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000220F0F0000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000220F0F000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000005236370000000000005236370000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000523637000000220F0F000000523637000000000000000000000000 |
000000000000000000523637000000000000220F0F220F0F220F0F220F0F0000 |
00220F0F000000220F0F220F0F523637523637220F0F220F0F220F0F00000022 |
0F0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F000000 |
220F0F000000220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F |
0F000000220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F52 |
3637220F0F220F0F000000000000000000000000220F0F000000220F0F220F0F |
000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F523637000000220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F523637220F0F220F0F220F0F220F0F220F0F220F0F220F0F523637000000 |
220F0F220F0F523637000000000000220F0F220F0F220F0F0000000000000000 |
00000000000000000000523637523637220F0F220F0F523637000000220F0F22 |
0F0F220F0F000000000000000000000000000000000000220F0F000000000000 |
220F0F000000000000000000000000000000220F0F0000000000000000000000 |
00000000000000000000000000220F0F000000000000000000220F0F00000022 |
0F0F000000000000000000000000000000000000000000220F0F000000000000 |
220F0F523637523637000000523637220F0F0000005236370000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000523637000000000000 |
5236370000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000022 |
0F0F523637000000000000000000000000523637000000000000000000000000 |
000000000000000000000000000000220F0F000000000000000000220F0F0000 |
00523637000000000000220F0F000000220F0F000000000000220F0F52363722 |
0F0F000000000000220F0F220F0F523637220F0F220F0F000000220F0F000000 |
220F0F220F0F220F0F220F0F220F0F000000000000523637523637220F0F0000 |
00220F0F220F0F220F0F220F0F220F0F220F0F806B6A220F0F220F0F220F0F22 |
0F0F220F0F000000523637220F0F523637220F0F220F0F220F0F220F0F220F0F |
000000220F0F220F0F806B6A220F0F220F0F220F0F523637220F0F220F0F220F |
0F220F0F220F0F523637220F0F523637220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F523637220F0F220F0F220F0F000000000000220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F000000220F |
0F220F0F000000000000220F0F220F0F00000000000000000052363752363752 |
3637D5BDBB806B6A220F0F806B6A000000220F0F220F0F220F0F220F0F000000 |
220F0F000000220F0F0000000000000000000000000000000000000000000000 |
00000000000000000000000000000000523637000000000000000000220F0F22 |
0F0F000000220F0F000000000000000000220F0F000000000000000000220F0F |
220F0F000000000000523637523637523637523637000000000000220F0F5236 |
3700000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000052363700 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000523637000000000000000000523637000000220F0F0000005236 |
37000000220F0F000000220F0F220F0F523637000000000000220F0F220F0F00 |
0000000000220F0F220F0F000000000000220F0F220F0F220F0F220F0F000000 |
220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F5236 |
37220F0F523637523637000000220F0F000000220F0F220F0F220F0F52363700 |
0000523637000000220F0F220F0F523637220F0F220F0F220F0F523637220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F0000 |
00523637523637220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F523637220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
523637220F0F220F0F220F0F220F0F220F0F523637220F0F523637220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F000000000000000000220F0F220F0F22 |
0F0F220F0F220F0F523637523637EBEBEBD5BDBB806B6A806B6A220F0F000000 |
000000000000000000000000220F0F000000220F0F000000000000220F0F0000 |
00000000000000220F0F000000220F0F220F0F220F0F00000000000000000022 |
0F0F000000000000000000523637220F0F000000000000523637220F0F000000 |
220F0F0000000000000000005236375236370000000000005236370000005236 |
37000000000000000000000000000000000000000000523637220F0F00000000 |
0000000000000000000000000000523637000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000523637000000000000000000000000000000 |
0000000000000000005236370000000000000000005236370000000000000000 |
00523637000000000000220F0F523637523637000000000000220F0F220F0F22 |
0F0F220F0F000000000000220F0F220F0F220F0F220F0F000000220F0F523637 |
220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F523637523637220F0F220F0F220F0F00 |
0000523637220F0F220F0F000000523637220F0F523637220F0F220F0F220F0F |
523637220F0F220F0F523637220F0F523637220F0F220F0F220F0F220F0F220F |
0F523637220F0F220F0F220F0F523637220F0F220F0F220F0F523637220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F523637523637220F0F220F0F220F0F000000000000220F0F220F |
0F220F0F220F0F000000220F0F220F0F000000220F0F220F0F00000000000000 |
0000000000000000000000806B6A806B6A523637D5BDBBEBEBEB806B6A806B6A |
523637523637523637523637523637000000000000220F0F0000000000000000 |
00000000000000000000000000220F0F00000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000220F0F523637 |
220F0F000000523637000000000000000000220F0F0000000000000000005236 |
37000000000000000000000000220F0F220F0F00000000000000000000000022 |
0F0F000000523637000000000000220F0F000000000000000000000000523637 |
0000005236370000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000005236370000000000000000000000000000000000000000000000000000 |
00220F0F000000220F0F000000000000000000000000220F0F220F0F00000052 |
3637523637000000000000523637000000220F0F000000220F0F220F0F220F0F |
220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F000000220F0F220F0F220F0F220F0F000000000000220F0F523637220F0F52 |
3637220F0F220F0F000000000000523637000000523637220F0F523637220F0F |
220F0F523637220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F523637523637523637220F0F220F0F220F0F523637220F0F52 |
3637220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F220F |
0F000000220F0F220F0F220F0F000000220F0F220F0F000000220F0F00000000 |
0000000000000000000000000000220F0F220F0F220F0F220F0F220F0F220F0F |
806B6A806B6AEBEBEB806B6A523637220F0F0000000000000000000000000000 |
00220F0F806B6A00000000000000000000000000000000000000000000000000 |
0000523637000000220F0F000000000000000000000000000000000000000000 |
523637523637000000220F0F000000220F0F000000000000523637220F0F0000 |
00000000220F0F220F0F220F0F000000000000000000220F0F00000000000000 |
0000000000000000220F0F220F0F000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000523637000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000523637523637000000000000220F0F00 |
0000000000000000220F0F000000000000000000523637000000220F0F000000 |
000000000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F523637523637220F0F220F0F220F0F220F0F220F0F52363722 |
0F0F220F0F523637523637220F0F220F0F220F0F220F0F220F0F220F0F523637 |
523637220F0F523637220F0F220F0F220F0F523637220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F523637220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F220F0F00 |
0000220F0F000000220F0F000000000000220F0F000000000000220F0F000000 |
220F0F220F0F220F0F523637806B6A220F0FD5BDBB806B6AD5BDBB5236375236 |
3700000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00220F0F220F0F00000000000000000000000000000000000052363700000000 |
0000523637000000000000000000000000000000000000000000220F0F000000 |
000000000000000000220F0F220F0F000000220F0F0000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000005236370000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000005236370000000000000000000000000000000000000000005236 |
3700000000000052363700000000000000000052363700000000000052363700 |
0000000000523637523637000000523637000000220F0F000000000000000000 |
523637220F0F523637220F0F220F0F220F0F000000220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F806B6A220F0F |
523637220F0F000000220F0F220F0F523637523637000000220F0F523637220F |
0F220F0F220F0F523637220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F52363722 |
0F0F220F0F220F0F220F0F220F0F220F0F000000000000000000000000000000 |
000000000000000000000000000000000000806B6A220F0F220F0F220F0F5236 |
37000000220F0F806B6A523637523637000000000000000000000000220F0F00 |
0000000000000000000000000000000000000000000000220F0F000000000000 |
000000000000000000000000000000000000000000220F0F220F0F000000220F |
0F000000220F0F000000000000000000000000220F0F220F0F00000000000000 |
0000220F0F000000220F0F220F0F523637000000000000000000000000220F0F |
0000000000005236370000000000000000000000000000000000005236370000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
5236370000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00220F0F52363700000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000005236370000000000000000005236370000000000000000 |
00000000000000220F0F00000000000000000000000000000000000000000052 |
3637220F0F000000220F0F000000000000000000000000523637000000000000 |
000000000000523637220F0F523637220F0F220F0F220F0F523637220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F523637523637220F0F220F0F220F0F22 |
0F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
000000220F0F523637220F0F220F0F220F0F220F0F220F0F523637523637220F |
0F220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F52 |
3637220F0F523637220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F523637523637220F |
0F523637220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F000000000000220F0F220F0F000000 |
220F0F000000220F0F000000000000000000220F0F000000000000000000220F |
0F220F0F220F0F220F0F523637000000000000806B6A220F0F00000000000022 |
0F0F000000220F0F000000000000000000000000000000000000000000000000 |
0000000000000000000000000000005236370000000000000000000000000000 |
00000000220F0F000000000000000000220F0F52363700000000000052363722 |
0F0F220F0F000000000000523637000000220F0F220F0F220F0F220F0F220F0F |
220F0F523637000000000000000000000000220F0F0000000000000000000000 |
00220F0F52363752363700000052363700000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000220F0F5236370000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000523637000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000052363752363700000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000220F0F523637000000220F0F220F0F5236 |
37220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
000000220F0F220F0F220F0F000000523637000000220F0F523637220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F523637220F0F |
220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F5236 |
37220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F523637220F0F220F0F220F0F000000000000000000220F0F220F0F |
000000220F0F000000000000220F0F220F0F000000000000000000220F0F220F |
0F000000000000000000220F0F000000220F0F220F0F52363700000000000022 |
0F0F000000000000220F0F000000220F0F000000000000000000000000000000 |
000000000000000000000000000000220F0F0000000000000000000000000000 |
00000000000000000000000000000000220F0F00000000000000000000000000 |
0000000000000000220F0F000000523637000000000000000000220F0F000000 |
000000000000000000220F0F220F0F220F0F000000220F0F0000000000005236 |
3700000000000052363700000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000005236375236370000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000052363700000000000000000000000000 |
0000000000000000000000523637000000000000523637000000000000000000 |
0000000000005236370000000000000000000000000000000000000000000000 |
00523637000000523637220F0F523637523637220F0F220F0F220F0F220F0F00 |
0000000000220F0F523637220F0F220F0F220F0F220F0F806B6A220F0F000000 |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F523637220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F523637220F0F523637220F0F220F0F220F0F806B6A5236 |
37220F0F220F0F220F0F523637220F0F000000220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F000000220F0F220F0F220F0F220F0F000000220F0F220F0F |
000000220F0F000000220F0F000000000000000000000000000000220F0F0000 |
00000000000000000000000000220F0F220F0F220F0F220F0F000000220F0F22 |
0F0F806B6A000000000000220F0F000000000000D5BDBB000000000000000000 |
000000000000000000000000000000000000000000220F0F0000000000000000 |
00000000220F0F00000000000000000000000000000000000000000000000000 |
0000000000000000220F0F000000000000000000220F0F000000000000220F0F |
000000220F0F000000220F0F220F0F220F0F0000005236370000000000000000 |
00000000000000000000523637000000000000220F0F00000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000523637220F0F000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000523637220F0F00 |
0000523637000000000000000000000000000000000000000000000000000000 |
220F0F220F0F0000005236370000000000005236370000000000000000000000 |
00000000000000000000000000220F0F000000000000220F0F220F0F52363722 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F523637220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F523637220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F000000 |
220F0F220F0F000000220F0F220F0F000000000000000000220F0F220F0F220F |
0F000000220F0F000000000000000000000000000000220F0F220F0F00000000 |
0000000000000000220F0F220F0F523637000000000000220F0F000000000000 |
5236370000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000220F0F000000000000220F0F000000000000000000 |
000000000000000000220F0F000000523637000000220F0F0000000000000000 |
0052363700000052363700000000000052363700000000000052363700000000 |
0000523637000000000000000000000000220F0F000000523637000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000523637220F0F00 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000005236375236370000000000000000000000000000000000000000 |
0000000000000000000000000052363700000000000000000000000000000000 |
0000000000000000000000523637000000000000000000000000000000000000 |
0000000000000000000000000000005236370000000000000000000000000000 |
0000000000000000000000000000000000000052363700000000000000000000 |
0000000000000000523637000000000000000000000000000000000000000000 |
000000000000523637000000220F0F000000220F0F0000000000000000005236 |
37000000523637000000000000000000220F0F000000000000220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F523637523637220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F523637523637220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F000000220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F |
0F000000220F0F000000220F0F000000220F0F220F0F000000220F0F220F0F00 |
0000000000000000000000000000000000000000220F0F220F0F000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000220F0F000000000000000000000000000000000000220F0F |
000000523637000000000000000000000000000000220F0F0000000000000000 |
00220F0F220F0F000000000000000000000000000000000000220F0F52363700 |
0000000000000000000000523637000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000523637523637000000000000000000000000 |
0000000000000000000000000000000000000000005236370000000000000000 |
0000000000000000000000000000000000000052363700000000000000000000 |
0000000000000000000000000000000000000000000000523637000000000000 |
0000000000000000000000000000000000000000000000000000005236370000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000005236370000000000000000000000000000 |
0000000000000000000000000000000000000000000000000052363752363700 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000523637000000000000000000000000220F0F00 |
0000000000000000000000000000000000000000000000000000000000000000 |
523637000000000000000000000000523637000000000000000000220F0F0000 |
00000000000000220F0F220F0F00000000000000000000000000000000000000 |
0000000000000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F220F0F5236375236 |
37220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F523637 |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F523637220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F523637523637220F0F220F0F22 |
0F0F523637220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F0000 |
00220F0F000000000000000000000000220F0F220F0F220F0F00000000000000 |
0000220F0F220F0F220F0F000000220F0F000000000000000000000000000000 |
220F0F0000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000523637000000000000000000000000 |
220F0F0000005236370000000000000000000000000000000000000000000000 |
00220F0F000000000000220F0F220F0F00000000000000000052363700000000 |
0000000000220F0F220F0F000000523637000000220F0F000000000000000000 |
0000000000000000005236370000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000523637000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0052363752363700000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000005236370000000000000000 |
00000000220F0F00000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000523637000000000000000000000000523637000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000052363700000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000005236375236370000000000 |
00523637000000000000000000000000523637220F0F00000000000000000000 |
0000000000220F0F000000000000220F0F000000220F0F220F0F220F0F220F0F |
220F0F000000220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
523637220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F523637220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F22 |
0F0F220F0F523637220F0F220F0F523637220F0F220F0F220F0F220F0F220F0F |
000000220F0F220F0F523637220F0F220F0F220F0F000000220F0F220F0F220F |
0F000000000000220F0F000000220F0F220F0F000000220F0F000000220F0F00 |
0000220F0F000000000000000000000000000000000000000000220F0F000000 |
220F0F220F0F000000000000220F0F0000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000523637 |
000000000000000000000000000000000000000000000000220F0F0000000000 |
0000000000000000000000000052363700000000000000000000000000000000 |
0000220F0F000000000000523637220F0F000000000000000000000000000000 |
5236370000000000000000005236370000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000052363700000000000000000000000052 |
3637000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000005236 |
3700000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000052363700 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000005236370000000000005236 |
37523637000000000000000000220F0F000000523637000000220F0F00000000 |
0000220F0F000000000000220F0F220F0F000000000000220F0F000000220F0F |
000000220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F5236 |
37220F0F220F0F523637000000220F0F220F0F523637523637220F0F52363722 |
0F0F220F0F220F0F523637220F0F523637220F0F220F0F220F0F000000220F0F |
220F0F220F0F000000220F0F220F0F523637523637220F0F220F0F220F0F5236 |
37523637220F0F220F0F000000220F0F220F0F220F0F523637220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F0000 |
00220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F00000000000000 |
0000000000220F0F000000220F0F000000220F0F000000000000000000220F0F |
000000000000000000806B6A0000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000220F0F00000000000000000052363700 |
0000000000000000000000220F0F000000000000523637000000220F0F000000 |
000000000000000000220F0F0000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000052363700000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000523637000000 |
5236370000000000000000000000000000000000005236375236370000000000 |
0000000000000000000000000000000000000000000052363700000052363700 |
0000000000000000000000000000000000000000000000000000523637000000 |
0000000000000000000000000000005236370000000000000000000000000000 |
00000000523637000000000000000000220F0F00000000000000000000000022 |
0F0F000000000000000000000000000000000000000000000000220F0F220F0F |
220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F000000523637220F0F523637220F0F523637523637220F0F52363722 |
0F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F523637220F0F |
000000220F0F220F0F220F0F220F0F220F0F220F0F523637523637220F0F220F |
0F220F0F523637220F0F220F0F220F0F000000220F0F220F0F523637220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F5236375236 |
37220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F000000000000220F0F000000220F0F220F0F000000000000220F0F000000 |
000000000000000000220F0F000000000000000000220F0F000000220F0F0000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000220F0F000000000000000000220F0F00000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
220F0F0000000000000000000000000000000000000000000000005236370000 |
0000000000000000000052363700000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000523637000000523637000000000000000000000000000000000000523637 |
5236370000000000000000000000000000000000000000000000000000005236 |
3700000052363700000000000000000000000000000000000000000000000000 |
0000523637000000000000000000000000000000000000523637000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000005236370000000000000000000000000000000000 |
00000000000000000000000000000000000000000000220F0F00000000000000 |
0000000000000000000000000000220F0F000000000000220F0F000000000000 |
000000000000000000220F0F220F0F000000000000000000220F0F220F0F0000 |
00220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F52 |
3637220F0F220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F |
000000523637220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F523637220F0F220F0F220F0F220F0F220F0F220F0F220F0F52363700000022 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F523637220F0F000000220F0F |
220F0F220F0F220F0F220F0F523637000000220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F000000000000220F0F220F0F220F0F220F0F000000 |
000000220F0F000000000000000000220F0F000000000000000000220F0F0000 |
00000000000000000000220F0F000000000000220F0F00000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000220F0F00000000000000000000000000000000 |
0000000000000000220F0F000000000000000000220F0F000000000000000000 |
220F0F000000220F0F220F0F000000000000000000000000000000000000220F |
0F000000000000000000523637000000000000000000000000220F0F00000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000523637000000000000000000 |
000000000000000000000000000000000000000000000000000000220F0F0000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000523637220F0F000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000052363752363700000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000005236370000000000000000000000000000000000 |
00000000523637000000000000000000000000523637220F0F00000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000220F0F000000000000000000220F0F0000000000 |
00220F0F000000806B6A523637000000220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F220F0F523637 |
523637220F0F523637523637523637523637220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F523637220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F523637220F |
0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F000000220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F000000000000220F0F000000 |
000000000000000000000000220F0F000000220F0F0000000000000000000000 |
00000000000000220F0F000000000000220F0F000000220F0F00000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000220F0F0000000000000000000000000000005236370000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000220F0F0000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000052 |
3637220F0F000000000000000000000000000000000000000000000000000000 |
0000000000000000000000005236375236370000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000523637000000000000000000 |
0000000000000000000000005236370000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000052363700000000000000000000 |
0000000000000000000000523637000000000000000000000000000000000000 |
0000000000000000005236370000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000052 |
3637000000220F0F000000000000000000000000000000000000000000000000 |
000000000000523637000000000000220F0F220F0F000000000000220F0F220F |
0F000000220F0F220F0F220F0F000000220F0F220F0F220F0F000000220F0F00 |
0000220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
000000523637220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F000000220F0F |
220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F523637220F0F220F |
0F220F0F000000220F0F000000220F0F000000220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000 |
000000220F0F000000220F0F000000220F0F000000000000000000000000220F |
0F220F0F000000000000000000000000000000000000220F0F00000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000220F0F0000000000000000000000000000000000000000 |
00000000220F0F00000000000000000000000052363700000052363700000000 |
0000523637000000000000000000523637000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000005236370000 |
0000000000000000000000000000000000000052363700000000000000000000 |
0000000000000000000000000000000000523637000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000220F0F000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000052363700000000000000000000000000000000000000000000 |
0000000000000000000000523637000000000000000000000000000000000000 |
5236370000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000220F0F000000220F0F220F0F220F |
0F220F0F000000000000220F0F220F0F000000220F0F220F0F000000220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
523637220F0F220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F220F |
0F523637220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F |
0F000000220F0F220F0F000000220F0F220F0F220F0F523637220F0F220F0F52 |
3637220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F000000000000220F0F000000220F0F0000000000000000 |
00000000000000220F0F00000000000000000000000000000000000000000000 |
0000000000000000000000000000220F0F000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000220F0F00000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000523637000000523637000000523637000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000220F0F00000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000005236370000000000000000000000000000 |
0000000000000000000000000000000000000052363700000000000000000000 |
0000000000000000523637000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000220F0F000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000052363700000000000000000000000000000000 |
0000000000000000523637000000000000000000000000000000000000000000 |
0000000000000000000000005236375236370000000000000000000000000000 |
00000000000000000000000000000000000000806B6A00000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000220F0F000000000000000000000000220F0F0000 |
00000000000000000000220F0F00000000000000000000000000000000000022 |
0F0F000000000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F523637523637220F0F523637220F0F220F |
0F220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F000000 |
220F0F220F0F523637220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F000000220F0F220F |
0F000000000000000000220F0F000000220F0F00000000000000000000000000 |
0000000000000000000000000000000000523637000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000220F0F000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000220F0F220F0F523637523637000000220F0F00000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000022 |
0F0F000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000005236370000000000000000 |
0000000000000000000000000000000052363700000000000000000000000000 |
0000000000000000000000000000000000000000523637523637000000000000 |
000000000000000000000000000000000000000000000000000000806B6A0000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000052363700000000000000000000000052 |
3637000000000000000000000000523637000000000000000000000000000000 |
5236370000005236370000005236370000000000000000000000000000000000 |
0000000000000000000052363700000000000000000000000000000000000052 |
3637000000000000000000000000000000000000000000000000523637000000 |
220F0F000000000000000000000000000000000000000000000000220F0F0000 |
00220F0F220F0F000000220F0F000000000000000000000000000000220F0F00 |
0000000000000000220F0F000000220F0F220F0F000000220F0F220F0F000000 |
220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F523637523637220F0F220F0F220F0F523637220F0F220F0F00000052363722 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F523637220F |
0F220F0F220F0F000000220F0F220F0F220F0F220F0F000000220F0F220F0F22 |
0F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F523637220F0F |
000000220F0F220F0F000000000000220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F000000220F0F220F0F220F0F00000000000000000000000022 |
0F0F000000000000000000000000000000220F0F000000000000000000523637 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000220F0F000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000523637000000000000000000000000000000220F0F000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000005236370000000000 |
0000000000000052363700000000000000000000000052363700000000000000 |
0000000000000000523637000000523637000000523637000000000000000000 |
0000000000000000000000000000000000005236370000000000000000000000 |
0000000000000052363700000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000052363700000000000000 |
0000000000523637000000000000523637523637000000000000000000000000 |
523637220F0F0000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000005236370000000000000000000000 |
00000000000000000000000000220F0F000000000000000000000000220F0F00 |
0000000000000000000000000000220F0F220F0F220F0F000000220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F00000022 |
0F0F220F0F220F0F220F0F220F0F523637523637220F0F220F0F000000220F0F |
220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F523637220F |
0F220F0F000000220F0F523637220F0F000000220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F |
220F0F523637000000220F0F220F0F000000220F0F220F0F000000220F0F5236 |
37000000220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F00000000 |
0000220F0F000000000000000000000000000000000000220F0F220F0F000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000005236 |
3700000000000000000000000052363700000000000052363752363700000000 |
0000000000000000523637220F0F000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000523637000000000000523637220F0F5236370000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000523637000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000220F0F000000220F0F000000220F0F220F0F |
000000220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F000000220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F0000 |
00220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F000000220F0F220F0F220F0F523637000000220F0F220F0F |
220F0F000000220F0F220F0F523637220F0F000000220F0F220F0F0000000000 |
00220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F22 |
0F0F000000220F0F000000220F0F220F0F220F0F000000000000000000220F0F |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000220F0F000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000523637000000000000523637220F0F523637000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000052363700000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000523637000000 |
000000000000000000000000523637000000000000220F0F0000005236370000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000220F0F000000000000000000000000000000000000000000000000000000 |
220F0F000000000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F000000220F0F000000000000220F0F22 |
0F0F220F0F220F0F220F0F220F0F000000000000220F0F000000220F0F220F0F |
000000220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F000000220F0F220F0F000000220F0F000000000000220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F000000000000000000220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F000000220F0F523637220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F000000000000220F0F000000000000523637D5BDBB220F0F |
000000220F0F000000220F0F0000000000000000000000000000000000000000 |
00000000220F0F00000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000523637000000000000000000000000000000523637000000000000220F0F |
0000005236370000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000523637000000000000000000000000000000806B6A0000 |
0052363700000000000000000000000000000000000000000000000000000052 |
3637523637000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000220F0F000000000000000000000000220F0F220F0F220F0F000000220F |
0F220F0F000000220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F000000220F0F220F0F000000220F0F220F0F220F |
0F523637220F0F000000220F0F220F0F000000220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F000000 |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F000000220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F000000000000000000000000 |
000000220F0F220F0F220F0F220F0F0000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000220F0F00000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000523637000000000000000000000000 |
000000806B6A0000005236370000000000000000000000000000000000000000 |
0000000000000052363752363700000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000005236375236370000000000000000000000 |
0000000052363700000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000523637220F0F0000000000000000000000000000000000000000000000 |
00000000000000220F0F000000220F0F220F0F000000220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000 |
220F0F000000523637220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F000000220F0F000000000000220F0F220F0F220F0F22 |
0F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F0000 |
00220F0F220F0F523637220F0F000000000000220F0F523637220F0F220F0F22 |
0F0F220F0F000000000000220F0F000000000000220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F0000000000000000000000000000000000000000000000 |
00220F0F220F0F000000000000000000000000220F0F00000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000220F0F00000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000220F0F0000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000523637523637000000 |
0000000000000000000000005236370000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000000000000220F |
0F523637000000220F0F000000000000000000000000220F0F52363700000000 |
0000220F0F000000000000000000000000000000000000000000000000000000 |
220F0F0000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000220F0F0000000000 |
00000000000000220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F22 |
0F0F220F0F000000220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F000000220F0F220F0F220F0F000000220F0F220F0F220F0F52 |
3637220F0F220F0F523637000000000000220F0F220F0F220F0F220F0F220F0F |
220F0F000000220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F000000220F0F220F0F000000220F0F000000 |
220F0F220F0F220F0F000000000000220F0F000000220F0F220F0F220F0F220F |
0F000000000000000000000000000000000000000000220F0F00000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000523637220F0F0000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000220F0F523637000000220F0F000000000000000000000000220F |
0F523637000000000000220F0F00000000000000000000000000000000000000 |
0000000000000000220F0F000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000005236370000005236370000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000220F0F000000806B6A000000000000220F0F000000 |
0000000000000000000000005236370000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00220F0F000000000000000000000000000000000000220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F0000 |
00220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F000000000000220F0F220F0F220F0F220F |
0F220F0F220F0F000000220F0F220F0F000000220F0F220F0F220F0F806B6A22 |
0F0F220F0F220F0F523637220F0F220F0F220F0F220F0F523637220F0F220F0F |
000000220F0F220F0F220F0F220F0F000000000000220F0F000000220F0F0000 |
00220F0F000000000000000000000000220F0F00000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000523637000000523637 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000220F0F000000806B6A00000000 |
0000220F0F000000000000000000000000000000523637000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000220F0F000000523637 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000220F0F000000000000220F0F00 |
0000000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000 |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F000000220F0F000000220F0F220F0F000000220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000 |
000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F52363722 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F |
220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F000000220F |
0F000000220F0F220F0F000000000000000000000000220F0F00000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000220F0F |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000022 |
0F0F000000523637000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000052363700000000000000000000000000000000000000000000 |
0000000000000000000000000000000000220F0F000000000000000000000000 |
000000220F0F000000220F0F000000000000000000220F0F0000000000000000 |
0000000052363700000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000220F0F000000000000000000000000220F0F22 |
0F0F000000220F0F000000220F0F000000000000000000000000220F0F220F0F |
220F0F000000000000220F0F000000220F0F000000220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F000000000000000000220F0F220F0F00 |
0000220F0F220F0F000000000000220F0F220F0F220F0F220F0F220F0F000000 |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F523637220F0F220F0F220F0F523637220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F0000 |
00220F0F000000000000000000000000220F0F220F0F000000220F0F00000022 |
0F0F000000220F0F000000000000000000000000220F0F000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000005236370000000000000000000000000000 |
00000000000000000000000000000000000000000000000000220F0F00000000 |
0000000000000000000000220F0F000000220F0F000000000000000000220F0F |
0000000000000000000000005236370000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000523637523637000000 |
000000220F0F523637000000000000220F0F220F0F0000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000220F0F00000022 |
0F0F220F0F000000000000220F0F220F0F000000000000000000000000220F0F |
000000220F0F000000000000000000220F0F220F0F000000220F0F220F0F220F |
0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F00 |
0000220F0F220F0F000000000000000000220F0F220F0F000000220F0F000000 |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F00000022 |
0F0F000000220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F |
000000220F0F000000220F0F220F0F220F0F523637000000523637220F0F220F |
0F000000220F0F220F0F220F0F000000220F0F000000220F0F220F0F220F0F22 |
0F0F220F0F000000220F0F000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000220F0F000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000052363700000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000052 |
3637523637000000000000220F0F523637000000000000220F0F220F0F000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000523637000000 |
000000000000523637220F0F000000000000000000000000000000000000220F |
0F00000000000000000000000000000000000000000000000052363700000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000220F0F000000220F0F523637806B6A220F0F |
220F0F000000000000000000000000000000000000220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F22 |
0F0F000000220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F |
000000000000000000220F0F000000220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F000000000000220F0F000000220F0F220F0F220F0F5236 |
37523637523637220F0F220F0F220F0F220F0F000000000000000000220F0F00 |
0000000000000000220F0F000000220F0F000000000000000000000000220F0F |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000806B6A000000000000220F0FD5BDBB |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000220F0F00000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000052363700000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000523637000000000000000000523637220F0F000000000000000000000000 |
000000000000220F0F0000000000000000000000000000000000000000000000 |
0052363700000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000052363752363700000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000220F0F0000000000000000000000 |
00806B6A220F0F000000220F0F00000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000220F0F00000000000000000000 |
0000000000000000000000000000000000000000000000220F0F000000220F0F |
523637D5BDBBD5BDBB523637220F0F000000220F0F000000000000220F0F220F |
0F000000220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000 |
000000000000220F0F000000220F0F220F0F220F0F220F0F220F0F000000220F |
0F220F0F220F0F000000220F0F220F0F000000220F0F000000220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F5236 |
37220F0F000000220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F22 |
0F0F220F0F000000220F0F000000220F0F000000220F0F000000000000220F0F |
220F0F0000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000220F0F806B6A220F0F0000000000000000000000000000000000 |
00000000000000220F0F806B6A220F0F00000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000005236375236370000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000220F0F000000 |
000000000000000000806B6A220F0F000000220F0F0000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000220F0F0000000000 |
00000000000000000000220F0F220F0F523637220F0F000000806B6A00000000 |
0000000000000000000000000000000000220F0F000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000220F0F806B6AD5BDBB523637220F0F000000220F |
0F000000000000000000220F0F220F0F000000000000220F0F220F0F220F0F22 |
0F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F000000000000220F |
0F220F0F000000220F0F220F0F220F0F000000220F0F000000220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F523637220F0F220F0F220F0F220F0F220F0F523637523637220F0F220F0F22 |
0F0F000000220F0F220F0F220F0F000000220F0F000000000000220F0F220F0F |
220F0F220F0F220F0F000000000000000000000000000000000000000000220F |
0F00000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000523637D5BDBB806B6A00000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000220F0F0000000000000000 |
00220F0F220F0F00000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
220F0F000000000000000000000000000000220F0F220F0F523637220F0F0000 |
00806B6A000000000000000000000000000000000000000000220F0F00000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000220F0F220F0F000000000000000000220F0F22 |
0F0F000000523637000000000000000000000000000000000000220F0F000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000052363700000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000220F0F220F0F523637220F |
0F220F0F220F0F220F0F000000000000000000000000220F0F000000220F0F22 |
0F0F220F0F220F0F220F0F220F0F806B6A220F0F000000220F0F000000220F0F |
220F0F220F0F220F0F000000220F0F000000000000000000000000000000220F |
0F000000220F0F220F0F220F0F000000000000000000000000220F0F220F0F00 |
0000220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F523637523637000000523637220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F |
000000000000000000220F0F000000220F0F000000220F0F0000000000000000 |
00000000000000000000000000000000220F0F00000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000523637220F0F000000000000000000000000000000523637000000000000 |
0000005236375236370000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000220F0F220F0F0000000000 |
00000000220F0F220F0F00000052363700000000000000000000000000000000 |
0000220F0F000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0052363700000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000220F0F00000000000000000000000000000000000000 |
0000220F0F220F0F220F0F220F0F000000806B6A000000000000000000220F0F |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000220F0F000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000220F0F0000000000 |
00000000220F0F000000220F0F220F0F220F0F00000000000000000000000000 |
0000220F0F000000000000000000220F0F220F0F220F0F220F0F220F0F806B6A |
220F0F220F0F220F0F220F0F000000220F0F000000000000220F0F220F0F220F |
0F220F0F000000220F0F000000220F0F220F0F523637220F0F00000000000000 |
0000000000220F0F220F0F220F0F000000220F0F000000220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F523637220F0F220F0F220F0F523637523637000000220F0F220F0F220F0F |
000000220F0F220F0F220F0F220F0F220F0F000000000000220F0F000000220F |
0F000000000000000000000000000000000000000000220F0F00000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000005236375236370000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000220F0F0000000000000000000000 |
00000000000000000000220F0F220F0F220F0F220F0F000000806B6A00000000 |
0000000000220F0F000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000220F0F00000000000000000000000000000000 |
0000523637000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000220F0F806B6A |
000000523637220F0F000000000000806B6A000000806B6A0000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000000000220F0F00 |
0000000000000000000000000000220F0F000000220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F000000000000000000220F0F220F |
0F220F0F220F0F000000220F0F000000000000220F0F220F0F000000220F0F22 |
0F0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F000000000000220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F |
220F0F220F0F000000220F0F220F0F000000220F0F220F0F220F0F220F0F0000 |
00000000000000000000000000220F0F000000000000220F0F00000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000000000220F0F22 |
0F0F000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000052363700000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000220F0F806B6A000000523637220F0F000000000000806B6A000000806B6A |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000523637000000000000000000000000220F0F220F0F523637523637523637 |
000000000000220F0F5236375236375236370000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000220F0F00000000000000000000000000000000000000 |
0000000000000000220F0F000000000000000000220F0F000000000000000000 |
000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F0000 |
00000000000000000000000000000000220F0F220F0F220F0F00000000000000 |
0000220F0F000000523637000000220F0F220F0F220F0F000000220F0F000000 |
220F0F000000000000220F0F220F0F000000000000000000000000000000220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
523637220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F00000000000000000000000000000000000000000022 |
0F0F220F0F000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000523637000000000000000000000000220F0F220F0F52 |
3637523637523637000000000000220F0F523637523637523637000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000220F0F000000000000000000000000000000000000000000000000 |
220F0F220F0F220F0F523637000000000000220F0F806B6A523637523637806B |
6A00000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000000000220F0F00 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000220F0F220F0F000000000000220F0F220F |
0F220F0F000000220F0F220F0F220F0F220F0F220F0F00000000000000000022 |
0F0F000000000000220F0F220F0F220F0F220F0F220F0F000000000000220F0F |
220F0F220F0F220F0F000000000000220F0F000000000000000000220F0F220F |
0F000000220F0F220F0F000000000000220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F000000220F0F523637220F0F220F0F220F0F220F0F220F0F |
220F0F523637220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F0000 |
00000000220F0F220F0F220F0F000000000000220F0F00000000000000000022 |
0F0F220F0F220F0F220F0FD5BDBB220F0F220F0F523637000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000220F0F000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000220F0F00000000000000000000000000000000 |
0000000000000000220F0F220F0F220F0F523637000000000000220F0F806B6A |
523637523637806B6A0000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000523637523637523637220F |
0F523637523637523637220F0F220F0F00000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000000000000220F |
0F220F0F000000000000000000000000000000000000000000220F0F806B6A22 |
0F0F000000000000220F0F000000000000000000000000220F0F000000220F0F |
220F0F000000000000000000220F0F000000000000000000000000220F0F0000 |
00000000000000000000000000220F0F220F0F220F0F000000000000220F0F00 |
0000220F0F220F0F000000220F0F000000220F0F220F0F000000220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F000000220F |
0F000000000000220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F523637523637220F0F220F |
0F000000000000220F0F000000220F0F000000220F0F000000000000220F0F22 |
0F0F220F0F000000000000000000000000000000220F0F220F0FD5BDBB220F0F |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000523637000000000000000000000000000000000000 |
000000806B6A000000000000000000000000000000000000220F0F0000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000523637 |
523637523637220F0F523637523637523637220F0F220F0F0000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000220F0F220F0F0000000000 |
00000000220F0F000000523637D5BDBB806B6A220F0F806B6A000000220F0F22 |
0F0F220F0F220F0F000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000220F0F00000000000000000000000000000000000000000022 |
0F0F000000000000220F0F000000000000000000000000000000000000000000 |
000000000000000000220F0F000000220F0F0000000000000000000000000000 |
00220F0F000000000000000000000000000000000000220F0F000000220F0F22 |
0F0F000000220F0F220F0F220F0F220F0F000000220F0F220F0F000000000000 |
220F0F000000220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F |
0F220F0F220F0F000000000000000000220F0F220F0F220F0F00000000000000 |
0000220F0F000000220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F523637220F0F220F0F220F0F220F0F220F0F00000000000000000022 |
0F0F000000000000220F0F220F0F000000000000220F0F000000000000000000 |
220F0F220F0F5236370000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000220F0F0000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000220F0F |
220F0F000000000000000000220F0F000000523637D5BDBB806B6A220F0F806B |
6A000000220F0F220F0F220F0F220F0F00000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000220F0F0000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000220F0F220F0F220F0F220F0F220F0F220F0F000000806B6A806B6A52 |
3637220F0F220F0F000000000000000000000000000000000000806B6A523637 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000D5BDBB00000000000000000000 |
0000220F0F000000000000220F0F000000000000000000000000000000220F0F |
000000000000000000000000000000000000000000220F0F0000000000000000 |
00220F0F220F0F000000220F0F000000000000000000000000220F0F00000000 |
0000000000220F0F000000220F0F000000220F0F220F0F220F0F220F0F220F0F |
000000000000220F0F000000220F0F000000220F0F220F0F220F0F000000220F |
0F000000000000220F0F220F0F220F0F000000000000220F0F000000220F0F22 |
0F0F220F0F220F0F220F0F000000220F0F000000000000220F0F000000220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F |
0F523637220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F00 |
0000000000220F0F000000000000000000000000000000000000220F0F220F0F |
000000000000220F0F000000000000000000220F0F0000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000220F0F220F0F220F0F220F0F220F0F220F0F0000 |
00806B6A806B6A523637220F0F220F0F00000000000000000000000000000000 |
0000806B6A523637000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000000D5BDBB0000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000523637000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00220F0F000000000000000000000000806B6A523637806B6A806B6A52363780 |
6B6AEBEBEB806B6A806B6AD5BDBB806B6A806B6A523637806B6A000000806B6A |
000000220F0F220F0F220F0F0000000000000000000000000000000000000000 |
00000000000000000000000000220F0F52363700000000000000000000000052 |
3637000000000000000000000000000000000000220F0F220F0F000000000000 |
220F0F000000000000000000220F0F0000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000220F0F220F0F000000 |
220F0F000000220F0F000000220F0F220F0F220F0F220F0F220F0F000000220F |
0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F22 |
0F0F220F0F220F0F000000000000220F0F220F0F220F0F220F0F000000000000 |
000000220F0F000000000000000000000000220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F523637220F0F220F0F220F0F00000000000022 |
0F0F220F0F220F0F220F0F000000220F0F000000000000000000220F0F220F0F |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000052 |
3637000000000000000000000000000000000000000000000000000000000000 |
000000000000000000220F0F000000000000000000000000806B6A523637806B |
6A806B6A523637806B6AEBEBEB806B6A806B6AD5BDBB806B6A806B6A52363780 |
6B6A000000806B6A000000220F0F220F0F220F0F000000000000000000000000 |
000000000000000000000000000000000000000000220F0F5236370000000000 |
0000000000000052363700000000000000000000000000000000000000000000 |
0000000000000000000000220F0F000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000220F0F220F0F22 |
0F0F220F0F220F0F220F0F806B6A806B6AEBEBEB806B6A523637220F0F000000 |
000000000000000000000000000000220F0F0000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000022 |
0F0F000000000000000000000000000000220F0F000000000000000000000000 |
220F0F0000000000000000000000000000000000000000000000000000000000 |
00000000000000000000220F0F00000000000000000000000000000000000000 |
0000000000000000000000000000000000000000220F0F000000000000220F0F |
220F0F220F0F000000000000220F0F000000220F0F000000220F0F220F0F220F |
0F220F0F000000000000220F0F220F0F000000000000000000000000220F0F22 |
0F0F000000000000220F0F000000000000220F0F220F0F220F0F220F0F000000 |
220F0F000000000000220F0F000000220F0F220F0F000000000000220F0F220F |
0F220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F52363752363722 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000000000 |
000000000000000000220F0F220F0F000000000000000000220F0F220F0F0000 |
00000000220F0F00000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000220F0F00000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00220F0F220F0F220F0F220F0F220F0F220F0F806B6A806B6AEBEBEB806B6A52 |
3637220F0F000000000000000000000000000000000000220F0F000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000220F0F000000000000000000000000220F0F00000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000220F0F000000220F0F220F0F220F0F523637806B6A220F0F806B6A |
000000D5BDBB220F0F0000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000220F0F000000000000000000000000000000000000000000000000000000 |
000000000000220F0F0000000000000000000000000000000000000000000000 |
00000000220F0F220F0F220F0F220F0F000000000000000000220F0F00000000 |
0000220F0F000000000000220F0F220F0F000000220F0F000000000000000000 |
000000000000000000000000220F0F220F0F220F0F220F0F000000220F0F220F |
0F000000000000000000220F0F000000220F0F000000000000220F0F00000022 |
0F0F000000220F0F000000220F0F220F0F000000220F0F000000000000220F0F |
220F0F000000220F0F000000000000000000220F0F220F0F220F0F220F0F220F |
0F220F0F000000220F0F000000000000000000220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F523637220F0F220F0F000000220F0F000000220F0F |
000000220F0F220F0F000000220F0F0000000000000000000000000000000000 |
00000000000000000000000000000000220F0F220F0F000000220F0F00000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000000000000220F |
0F00000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000220F0F000000220F0F220F0F220F0F52363780 |
6B6A220F0F806B6A000000D5BDBB220F0F000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000220F0F00000000000000000000000000000000000000 |
0000806B6A000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000806B6A |
220F0F220F0F220F0F806B6A5236375236375236370000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000220F0F0000000000 |
00220F0F000000220F0F000000000000220F0F00000000000000000000000000 |
0000220F0F220F0F000000000000000000000000220F0F000000000000220F0F |
000000220F0F220F0F000000220F0F000000000000220F0F000000220F0F220F |
0F000000220F0F000000000000000000220F0F00000000000000000000000022 |
0F0F000000220F0F220F0F220F0F000000220F0F000000220F0F220F0F000000 |
220F0F000000220F0F220F0F220F0F220F0F000000220F0F0000000000000000 |
00220F0F000000220F0F000000000000220F0F000000220F0F220F0F52363722 |
0F0F220F0F220F0F220F0F220F0F220F0F523637523637220F0F220F0F000000 |
220F0F000000220F0F000000000000000000000000220F0F000000000000220F |
0F220F0F000000000000000000220F0F000000000000220F0F00000000000022 |
0F0F000000000000000000220F0F000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000806B6A00000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000806B6A220F0F220F0F220F0F806B6A523637523637523637000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000220F0F220F0F220F0F220F0F806B6A806B6A0000005236 |
3752363700000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000220F0F000000000000000000000000000000000000000000220F0F00 |
0000000000000000000000000000000000000000000000220F0F000000000000 |
220F0F220F0F220F0F220F0F220F0F220F0F000000220F0F220F0F220F0F220F |
0F000000000000000000220F0F000000220F0F00000000000000000000000022 |
0F0F220F0F000000220F0F000000000000000000220F0F000000220F0F000000 |
000000220F0F000000220F0F220F0F000000220F0F000000220F0F0000000000 |
00000000220F0F000000000000220F0F000000000000000000220F0F00000000 |
0000220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F523637 |
523637000000000000220F0F000000000000220F0F000000220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F000000000000220F0F220F0F00000000000000 |
0000220F0F000000000000000000220F0F000000000000000000000000220F0F |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000220F0F000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000220F0F220F0F220F0F220F0F806B6A |
806B6A0000005236375236370000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000000220F0F220F |
0F523637000000000000220F0F52363700000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000220F0F0000000000000000 |
00000000220F0F000000000000000000220F0F220F0F00000000000000000022 |
0F0F000000000000220F0F220F0F000000000000000000000000220F0F220F0F |
000000000000000000000000220F0F000000220F0F220F0F220F0F220F0F220F |
0F220F0F000000000000000000000000220F0F220F0F000000000000220F0F00 |
0000220F0F000000000000000000000000220F0F000000000000000000220F0F |
000000000000000000000000000000000000220F0F000000220F0F0000000000 |
00000000000000220F0F000000220F0F220F0F00000000000000000000000000 |
0000000000000000000000000000000000000000220F0F000000220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F000000000000000000220F |
0F000000523637220F0F220F0F000000000000000000220F0F00000000000022 |
0F0F220F0F000000000000000000000000000000220F0F220F0F000000000000 |
220F0F000000000000000000000000000000220F0F0000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000220F0F |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000220F0F220F0F523637000000000000220F0F5236370000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000220F0F |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000000000220F0F52 |
3637000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000220F0F220F0F806B6A220F0F000000220F0F00000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000220F0F220F0F00000022 |
0F0F220F0F000000000000220F0F220F0F000000000000220F0F220F0F000000 |
000000000000000000000000000000000000000000000000000000220F0F0000 |
00000000220F0F220F0F000000000000000000220F0F000000220F0F00000022 |
0F0F220F0F000000220F0F000000000000000000000000000000000000220F0F |
220F0F000000220F0F220F0F220F0F220F0F000000000000220F0F0000000000 |
00220F0F220F0F00000000000000000000000000000000000000000000000000 |
0000000000220F0F220F0F220F0F000000000000000000000000220F0F000000 |
000000220F0F000000220F0F220F0F220F0F220F0F220F0F220F0F0000000000 |
00000000000000000000220F0F220F0F806B6A220F0F00000000000000000022 |
0F0F220F0F000000000000000000220F0F000000000000220F0F000000220F0F |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000220F0F00000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000220F0F52363700000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000220F0F220F0F806B6A220F0F000000220F |
0F00000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000220F0F000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000220F0F000000000000000000000000220F0F220F0F52363700000000 |
0000220F0F000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000220F0F000000220F0F00000000000000000000 |
0000000000000000000000000000000000000000000000220F0F000000000000 |
000000000000000000000000000000000000220F0F0000000000000000000000 |
00000000000000220F0F000000000000220F0F220F0F000000220F0F00000000 |
0000000000000000000000220F0F220F0F000000220F0F220F0F220F0F000000 |
220F0F220F0F220F0F000000220F0F000000000000000000000000000000220F |
0F000000000000220F0F000000000000000000000000220F0F00000000000000 |
0000220F0F000000000000000000000000220F0F000000000000000000000000 |
000000220F0F220F0F000000220F0F000000000000220F0F220F0F220F0F220F |
0F220F0F000000000000000000220F0F000000000000220F0F220F0F220F0F22 |
0F0F000000000000000000000000220F0F000000000000000000220F0F000000 |
220F0F220F0F220F0F000000000000000000000000220F0F220F0F220F0F0000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000D5BDBB52363700000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000220F0F00000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000220F0F000000000000000000000000220F0F220F |
0F523637000000000000220F0F00000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000220F0F000000220F0F0000 |
00000000000000000000000000000000000000220F0F00000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000052363722 |
0F0F220F0F806B6A000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000220F0F00000000000000000000000000 |
0000220F0F220F0F000000000000000000000000000000220F0F000000220F0F |
000000000000220F0F220F0F000000000000000000000000000000000000220F |
0F220F0F220F0F000000000000000000000000806B6A220F0F000000220F0F00 |
0000000000220F0F000000000000000000220F0F000000000000220F0F000000 |
220F0F220F0F000000000000220F0F220F0F000000220F0F220F0F0000000000 |
00000000000000220F0F220F0F220F0F220F0F00000000000000000000000022 |
0F0F000000000000000000000000220F0F000000000000000000000000000000 |
000000220F0F000000000000000000000000220F0F220F0F0000000000000000 |
00000000220F0F220F0F220F0F220F0F220F0F000000000000000000220F0F00 |
0000220F0F220F0F000000000000220F0F220F0F000000000000000000000000 |
000000000000000000000000220F0F000000220F0F220F0F220F0F0000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000523637220F0F00000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000000220F0F0000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000523637220F0F220F0F806B6A00000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000220F0F0000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000220F0F00000000000000 |
0000000000000000220F0F220F0F000000806B6A000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000220F0F000000 |
000000000000220F0F000000000000000000220F0F000000220F0F220F0F220F |
0F000000000000220F0F220F0F000000000000000000220F0F220F0F00000000 |
0000000000000000000000000000220F0F000000220F0F220F0F000000220F0F |
000000220F0F220F0F000000000000000000000000000000220F0F000000220F |
0F000000220F0F000000000000000000000000000000000000220F0F00000000 |
0000000000220F0F000000000000000000000000000000000000000000000000 |
000000000000220F0F220F0F000000220F0F0000000000000000000000000000 |
00220F0F000000000000000000220F0F220F0F220F0F220F0F52363700000022 |
0F0F220F0F000000220F0F000000000000000000220F0F000000000000220F0F |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000220F0F00000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000220F0F0000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000000000000220F |
0F000000000000000000000000000000220F0F220F0F000000806B6A00000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000220F0F000000523637 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000220F0F000000000000000000000000000000000000000000 |
000000000000220F0F000000220F0F000000000000220F0F220F0F220F0F220F |
0F220F0F000000220F0F000000000000000000220F0F220F0F00000000000000 |
0000000000000000000000000000220F0F220F0F000000220F0F220F0F000000 |
220F0F000000220F0F000000000000220F0F000000000000000000220F0F0000 |
00000000220F0F220F0F000000220F0F00000000000000000000000000000000 |
0000220F0F000000000000000000000000000000000000000000000000000000 |
000000220F0F000000220F0F000000000000000000220F0F0000000000000000 |
00000000000000000000000000000000220F0F000000000000220F0F220F0F22 |
0F0F220F0F000000220F0F000000000000000000000000220F0F220F0F220F0F |
000000220F0F220F0F220F0F220F0F0000000000000000000000000000000000 |
00220F0F220F0F000000000000000000000000220F0F000000000000220F0F00 |
0000000000000000000000000000523637000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000806B6A5236370000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000022 |
0F0F000000523637000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000220F0F00000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000806B6A000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000220F0F220F0F000000000000220F0F0000000000000000 |
00000000220F0F000000000000000000000000000000220F0F220F0F00000000 |
0000000000220F0F000000000000000000000000220F0F220F0F000000220F0F |
000000000000000000000000000000220F0F0000000000000000000000000000 |
00000000000000000000000000000000000000220F0F000000000000220F0F00 |
0000000000220F0F523637000000000000000000220F0F000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000523637220F0F00000000000000000000000022 |
0F0F220F0F220F0FD5BDBB523637000000000000220F0F000000000000000000 |
220F0F000000000000000000220F0F000000000000220F0F000000220F0F0000 |
00000000000000000000220F0F000000220F0F000000000000220F0F00000000 |
0000000000000000000000000000220F0F000000000000000000220F0F000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000806B6A00000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000523637000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000523637806B6A00000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000220F0F |
000000000000000000000000000000220F0F000000000000000000220F0F0000 |
00000000000000220F0F000000000000000000220F0F000000000000220F0F00 |
0000000000000000000000000000000000220F0F000000220F0F220F0F220F0F |
000000000000220F0F0000000000000000000000000000000000000000000000 |
00220F0F000000220F0F000000000000000000000000000000220F0F00000000 |
0000000000000000000000000000000000220F0F000000000000000000000000 |
000000000000000000000000000000000000000000220F0F0000000000000000 |
00000000000000000000000000000000000000000000000000523637220F0F00 |
0000000000000000000000000000000000220F0F806B6A523637000000000000 |
220F0F220F0F0000000000000000000000000000000000000000000000000000 |
00000000220F0F000000000000000000000000220F0F52363700000000000000 |
0000220F0F220F0F000000000000000000000000000000000000220F0F000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000523637000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000523637806B6A0000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000220F0F000000000000000000000000000000220F0F000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000220F0F00000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000220F0F0000000000000000 |
00220F0F220F0F000000000000000000000000000000220F0F220F0F00000000 |
0000000000000000000000220F0F220F0F000000000000000000220F0F000000 |
000000000000000000220F0F220F0F000000000000000000000000220F0F0000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000220F0F000000220F0F000000000000000000000000 |
000000220F0F000000000000000000220F0F000000000000000000220F0F0000 |
00000000000000220F0F00000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000220F0F000000220F0F |
220F0F000000000000000000220F0F220F0F000000000000000000220F0F0000 |
00000000220F0F000000000000000000000000000000220F0F000000220F0F22 |
0F0F220F0F000000000000220F0F000000000000000000000000000000220F0F |
000000220F0F0000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000000000000220F |
0F00000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000220F0F |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000052363700000000 |
0000220F0F000000220F0F000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000220F0F000000000000000000000000220F0F00 |
0000000000000000000000220F0F000000000000000000000000000000000000 |
220F0F220F0F0000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000220F0F00000000000000000000 |
0000000000000000000000000000000000000000220F0F000000000000000000 |
000000000000000000000000000000000000220F0F000000000000220F0F220F |
0F000000000000220F0F000000220F0F220F0F000000220F0F000000220F0F00 |
0000000000000000000000000000220F0F000000000000000000000000220F0F |
220F0F000000220F0F0000000000000000000000000000000000000000000000 |
00000000000000220F0F00000000000000000000000000000000000052363700 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000220F0F00000022 |
0F0F000000000000000000000000000000220F0F220F0F000000220F0F000000 |
220F0F000000000000000000000000000000000000220F0F0000000000000000 |
00000000000000220F0F000000000000000000000000000000000000220F0F00 |
0000220F0F000000000000000000000000000000000000000000000000000000 |
000000000000220F0F000000000000806B6A5236370000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000220F0F000000000000000000523637000000 |
000000000000000000000000000000000000000000000000000000000000220F |
0F220F0F220F0F220F0F220F0F000000220F0F00000000000000000000000000 |
0000000000220F0F000000000000000000000000000000220F0F000000220F0F |
000000000000000000000000000000000000000000220F0F000000220F0F0000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000000000220F0F00 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000220F0F0000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000220F0F000000000000000000 |
000000000000000000000000000000220F0F0000000000000000000000000000 |
00000000220F0F000000000000000000000000220F0F000000000000220F0F00 |
0000220F0F000000000000000000000000000000000000220F0F000000000000 |
000000000000000000000000000000000000000000000000000000806B6A220F |
0F00000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000000000000220F |
0F000000000000000000220F0F220F0F220F0F220F0F220F0F220F0F00000000 |
0000220F0F000000000000000000000000220F0F000000220F0F000000806B6A |
220F0F000000220F0F000000220F0F220F0F000000000000220F0F0000000000 |
00000000000000000000000000000000000000000000220F0F00000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000220F0F000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000220F0F220F0F000000000000000000220F0F0000 |
00000000000000000000000000000000000000000000000000220F0F00000000 |
0000000000000000000000000000000000000000000000220F0F220F0F000000 |
220F0F0000000000000000000000000000000000000000000000000000000000 |
00000000000000000000220F0F000000220F0F00000000000000000000000022 |
0F0F000000000000000000000000000000000000000000220F0F000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000220F0F220F0F220F0F22 |
0F0F220F0F220F0F220F0F000000000000000000000000000000000000000000 |
000000000000000000523637220F0F000000000000000000000000000000220F |
0F00000000000000000000000000000000000000000000000000000000000000 |
0000220F0F000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000220F0F220F0F000000000000 |
000000220F0F0000000000000000000000000000000000000000000000000000 |
00220F0F00000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000220F0F |
000000000000000000000000000000000000220F0F0000000000000000000000 |
00000000220F0F00000000000000000000000000000000000000000000000022 |
0F0F000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000220F0F0000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000220F0F00000000 |
0000220F0F220F0F220F0F220F0F220F0F220F0F000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000220F0F00000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000220F0F000000000000000000000000000000220F0F0000 |
00000000000000220F0F220F0F000000000000000000000000000000220F0F00 |
0000000000000000000000000000000000000000000000220F0F000000000000 |
000000000000000000000000000000000000220F0F0000000000000000000000 |
00220F0F00000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000220F0F00000000 |
0000000000000000000000000000000000220F0F220F0F220F0F220F0F220F0F |
220F0F000000000000000000000000000000000000000000000000000000220F |
0F000000000000000000000000000000220F0F000000220F0F00000000000000 |
0000000000000000000000000000000000000000000000000000220F0F000000 |
000000000000000000000000000000220F0F5236370000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000052363722 |
0F0F000000000000000000000000000000000000000000000000523637220F0F |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000052363700000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000220F0F220F0F |
220F0F220F0F523637806B6A000000000000000000220F0F0000000000000000 |
00000000000000220F0F00000000000000000000000000000000000000000000 |
0000220F0F000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000000806B6AD5BD |
BB52363700000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000220F0F00000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000220F0F000000000000000000000000220F0F0000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000806B6A220F0F000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000220F0F220F0F220F0F220F0F220F0F220F0F220F0F0000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000220F0F000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000523637806B6A220F0F00000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000000000000220F |
0F00000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000220F0F000000000000000000000000220F0F000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
5236370000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000220F0F00000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000220F0F0000000000000000000000000000000000000000000000000000 |
00220F0F00000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000220F0F220F0F000000220F0F0000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000220F0F000000000000000000000000000000000000000000000000000000 |
000000220F0F0000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000523637000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000000000220F0F00 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000523637220F0F00000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000220F0F00000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000052363700000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000220F0F00000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000000000000220F |
0F00000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000052363700000000000000000000 |
0000000000000000000000000000D5BDBB220F0F000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000220F0F00000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000000220F0F0000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000220F0F0000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000220F0F000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000220F0F00000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000523637220F0F |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000220F0F0000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000005236370000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000005236370000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000220F0F000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00220F0F00000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000523637220F0F00000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000220F0F |
220F0F0000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000000523637220F |
0F00000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000052 |
3637000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000220F0F000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000220F0F00000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000220F0F220F0F000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000052363700000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000052363752363700000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000220F0F0000000000000000005236370000005236370000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000220F0F220F0F000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000052363752363700000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000220F0F523637000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000005236375236370000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000005236370000000000000000 |
00220F0F00000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000220F0F000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000220F0F000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000220F0F220F0F00000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000} |
end |
object Label1: TLabel |
Left = 92 |
Top = 0 |
Width = 172 |
Height = 29 |
AutoSize = False |
Caption = '(De)Coder V2.0' |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clRed |
Font.Height = -24 |
Font.Name = 'LcdD' |
Font.Style = [fsBold] |
ParentFont = False |
Transparent = True |
end |
object Label2: TLabel |
Left = 8 |
Top = 112 |
Width = 239 |
Height = 19 |
Caption = '(C)Copyright 2001 Daniel Marschall.' |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clYellow |
Font.Height = -16 |
Font.Name = 'LcdD' |
Font.Style = [] |
ParentFont = False |
Transparent = True |
end |
object Label3: TLabel |
Left = 8 |
Top = 132 |
Width = 160 |
Height = 19 |
Caption = 'Alle Rechte vorbehalten.' |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clYellow |
Font.Height = -16 |
Font.Name = 'LcdD' |
Font.Style = [] |
ParentFont = False |
Transparent = True |
end |
object StatusBar1: TStatusBar |
Left = 0 |
Top = 155 |
Width = 356 |
Height = 19 |
Panels = < |
item |
Text = 'http://www.d-m-home.de' |
Width = 270 |
end> |
SimplePanel = False |
OnClick = StatusBar1Click |
end |
object load_button: TButton |
Left = 10 |
Top = 36 |
Width = 89 |
Height = 25 |
Caption = '&Datei '#246'ffnen' |
TabOrder = 0 |
OnClick = load_buttonClick |
end |
object crypt_button: TButton |
Left = 88 |
Top = 76 |
Width = 181 |
Height = 25 |
Caption = '&Verschl'#252'sseln / Entschl'#252'sseln' |
Default = True |
Enabled = False |
TabOrder = 2 |
OnClick = crypt_buttonClick |
end |
object beenden_button: TButton |
Left = 258 |
Top = 36 |
Width = 89 |
Height = 25 |
Caption = '&Beenden' |
TabOrder = 1 |
OnClick = beenden_buttonClick |
end |
object FileName_Edit: TEdit |
Left = 107 |
Top = 40 |
Width = 142 |
Height = 21 |
TabStop = False |
ReadOnly = True |
TabOrder = 3 |
end |
object OpenDialog1: TOpenDialog |
Options = [ofHideReadOnly, ofPathMustExist, ofFileMustExist, ofEnableSizing] |
Left = 320 |
Top = 120 |
end |
end |
/trunk/History/Decoder20/Unit1.pas |
---|
0,0 → 1,86 |
unit Unit1; |
interface |
uses |
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, |
ComCtrls, ExtCtrls, StdCtrls, ShellAPI; |
type |
TForm1 = class(TForm) |
StatusBar1: TStatusBar; |
load_button: TButton; |
crypt_button: TButton; |
beenden_button: TButton; |
FileName_Edit: TEdit; |
Image1: TImage; |
Label1: TLabel; |
Label2: TLabel; |
OpenDialog1: TOpenDialog; |
Label3: TLabel; |
procedure beenden_buttonClick(Sender: TObject); |
procedure load_buttonClick(Sender: TObject); |
procedure crypt_buttonClick(Sender: TObject); |
procedure StatusBar1Click(Sender: TObject); |
end; |
var |
Form1: TForm1; |
implementation |
{$R *.DFM} |
var |
st: Array[0..255] of char; |
procedure TForm1.beenden_buttonClick(Sender: TObject); |
begin |
Form1.close; |
end; |
procedure TForm1.load_buttonClick(Sender: TObject); |
begin |
if Opendialog1.Execute then |
begin |
FileName_Edit.text := ExtractFileName(OpenDialog1.FileName); |
crypt_button.Enabled := true; |
end; |
end; |
procedure TForm1.crypt_buttonClick(Sender: TObject); |
var |
mem: TMemoryStream; |
i: integer; |
a: byte; |
key: integer; |
begin |
if not fileexists(ExtractFilePath(OpenDialog1.FileName) + ExtractFileName(OpenDialog1.FileName)) then |
begin |
showmessage('Datei nicht vorhanden!'); |
exit; |
end; |
mem := TMemoryStream.Create; |
mem.LoadFromfile(OpenDialog1.FileName); |
key := a; |
for i := 0 to mem.Size - 1 do |
begin |
mem.Position := i; |
mem.Read(a, 1); |
a := a xor key; |
inc(key); |
mem.Position := i; |
mem.write(a, 1); |
end; |
mem.SaveToFile(ExtractFilePath(OpenDialog1.FileName) + ExtractFileName(OpenDialog1.FileName)); |
mem.Free; |
ShowMessage('Datei wurde geändert!'); |
end; |
procedure TForm1.StatusBar1Click(Sender: TObject); |
begin |
ShellExecute(Handle, 'open', StrPCopy(st, 'http://www.d-m-home.de'), nil, nil, SW_SHOW); |
end; |
end. |
/trunk/History/Decoder20/Windows V2.0.md5 |
---|
0,0 → 1,8 |
fe484adeedd9d5fb5c78a973b0e86bfa *Coder.cfg |
9d7838345f49c842d728423ddeabb944 *Coder.dof |
8d5f4109d68b4915545b4290db99e6fa *Coder.dpr |
eb9d64c7ae9d14c279f99d75d3afef76 *Coder.exe |
8dd79842c401271c6603222d13066dd7 *Coder.res |
40cb9b2a8b3eaebd099a281622ad7fa0 *Unit1.dcu |
dd3d6e669f9d1903f6c835430ad822a7 *Unit1.dfm |
0eb04bd55259baa4e0462ddd7808a61e *Unit1.pas |
/trunk/History/Decoder20/Windows V2.0.sfv |
---|
0,0 → 1,9 |
; Generated by ViaThinkSoft |
Coder.cfg D0B8C950 |
Coder.dof 5EE59F78 |
Coder.dpr 01C7663A |
Coder.exe EAC2115E |
Coder.res 34253CC9 |
Unit1.dcu 32E04728 |
Unit1.dfm C84E47C4 |
Unit1.pas 10A15BCE |
/trunk/History/Decoder20/test_in.txt |
---|
0,0 → 1,0 |
Hello World! This is a Test! |
/trunk/History/Decoder20/test_out.txt |
---|
0,0 → 1,0 |
Hdnok%Qhzen*,Yffc1{`4t6C}jn: |
/trunk/History/Decoder22/256zero_in.txt |
---|
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 |
/trunk/History/Decoder22/256zero_out_61.txt |
---|
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 |
/trunk/History/Decoder22/Coder.cfg |
---|
0,0 → 1,35 |
-$A+ |
-$B- |
-$C- |
-$D- |
-$E- |
-$F- |
-$G+ |
-$H+ |
-$I+ |
-$J+ |
-$K- |
-$L- |
-$M- |
-$N+ |
-$O+ |
-$P+ |
-$Q- |
-$R- |
-$S- |
-$T- |
-$U- |
-$V+ |
-$W- |
-$X+ |
-$Y- |
-$Z1 |
-cg |
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; |
-H+ |
-W+ |
-M |
-$M16384,1048576 |
-K$00400000 |
-LE"c:\programme\borland\delphi5\enterprise\Projects\Bpl" |
-LN"c:\programme\borland\delphi5\enterprise\Projects\Bpl" |
/trunk/History/Decoder22/Coder.dof |
---|
0,0 → 1,92 |
[Compiler] |
A=1 |
B=0 |
C=0 |
D=0 |
E=0 |
F=0 |
G=1 |
H=1 |
I=1 |
J=1 |
K=0 |
L=0 |
M=0 |
N=1 |
O=1 |
P=1 |
Q=0 |
R=0 |
S=0 |
T=0 |
U=0 |
V=1 |
W=0 |
X=1 |
Y=0 |
Z=1 |
ShowHints=1 |
ShowWarnings=1 |
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; |
[Linker] |
MapFile=0 |
OutputObjs=0 |
ConsoleApp=1 |
DebugInfo=0 |
RemoteSymbols=0 |
MinStackSize=16384 |
MaxStackSize=1048576 |
ImageBase=4194304 |
ExeDescription=(De)Coder V2.2 VLL |
[Directories] |
OutputDir= |
UnitOutputDir= |
PackageDLLOutputDir= |
PackageDCPOutputDir= |
SearchPath= |
Packages=VCL50;VCLX50;VCLSMP50;VCLDB50;VCLADO50;ibevnt50;VCLBDE50;VCLDBX50;QRPT50;TEEUI50;TEEDB50;TEE50;DSS50;TEEQR50;VCLIB50;VCLMID50;VCLIE50;INETDB50;INET50;NMFAST50;WEBMID50;dclocx50;dclaxserver50;DelphiX_for5 |
Conditionals= |
DebugSourceDirs= |
UsePackages=0 |
[Parameters] |
RunParams= |
HostApplication= |
[Language] |
ActiveLang= |
ProjectLang=$00000407 |
RootDir= |
[Version Info] |
IncludeVerInfo=1 |
AutoIncBuild=0 |
MajorVer=2 |
MinorVer=2 |
Release=0 |
Build=0 |
Debug=0 |
PreRelease=0 |
Special=0 |
Private=0 |
DLL=0 |
Locale=1031 |
CodePage=1252 |
[Version Info Keys] |
CompanyName=Daniel Marschall Computersoftware |
FileDescription=Ein Verschlüsselungsprogramm... |
FileVersion=2.2.0.0 |
InternalName=(De)Coder V2.2 VLL |
LegalCopyright=(C)Copyright 2001 Daniel Marschall. |
LegalTrademarks=Keine |
OriginalFilename=CODER.EXE |
ProductName=(De)Coder V2.2 |
ProductVersion=2.2.0.0 |
Homepage=http://www.d-m-home.de |
[HistoryLists\hlUnitAliases] |
Count=1 |
Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; |
/trunk/History/Decoder22/Coder.dpr |
---|
0,0 → 1,17 |
program Coder; |
{$Description '(De)Coder V2.2 VLL'} |
uses |
Forms, |
Unit1 in 'Unit1.pas' {Form1}; |
{$R *.RES} |
begin |
Application.Initialize; |
Application.Title := '(De)Coder V2.2'; |
Application.CreateForm(TForm1, Form1); |
Application.Run; |
end. |
/trunk/History/Decoder22/Coder.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 |
/trunk/History/Decoder22/Coder.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 |
/trunk/History/Decoder22/Unit1.dfm |
---|
0,0 → 1,4014 |
object Form1: TForm1 |
Left = 305 |
Top = 137 |
BorderIcons = [biSystemMenu, biMinimize] |
BorderStyle = bsSingle |
ClientHeight = 313 |
ClientWidth = 353 |
Color = clBtnFace |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clWindowText |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
OldCreateOrder = False |
Position = poDesktopCenter |
OnCreate = FormCreate |
PixelsPerInch = 96 |
TextHeight = 13 |
object Image1: TImage |
Left = 0 |
Top = 0 |
Width = 353 |
Height = 294 |
Align = alClient |
Picture.Data = { |
0A544A504547496D616765C9DB0100FFD8FFE000104A46494600010200000100 |
010000FFE0324A4A465858001340430000000F0F220000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000000000000F0F22 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000000000F0F2200 |
00000000000000000000000000000F0F22000000000000000000000000000000 |
0000000000000000000F0F220000000000000000000000000000000F0F220000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000F0F2200000000 |
00000000000000000000000000000000000000000000000000000F0F22000000 |
0000000000000F0F220F0F220000000000000F0F220000000F0F220000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000006A6B800000000000000000000000000000000000000F0F220F |
0F220000000000000F0F220000000000000F0F220000000F0F220F0F22000000 |
0000000F0F220000000000000F0F220000000000000F0F220000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000000000000F0F22 |
0000000000000000000000000F0F220F0F220000000000000000000000000000 |
000000000F0F226A6B8000000000000000000000000000000000000000000000 |
00000000000F0F220F0F220000000F0F22000000000000000000000000000000 |
0F0F220000000F0F223736520000000F0F220000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000000F0F226A6B80 |
0F0F220000000000000000000000000000000000000000000000000000000000 |
0000000000000037365200000000000000000000000000000000000000000000 |
00000F0F220000000000000000000000000000000F0F220F0F220000000F0F22 |
0F0F220F0F220F0F220F0F220F0F220000000F0F220000000000000000000000 |
000000000000000000000000000F0F2200000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000373652 |
0F0F220000000000000000000000000000000000000000000000000000000000 |
000000000000006A6B8000000000000000000000000000000000000000000000 |
00006A6B800F0F220000000F0F220F0F220F0F220000000000000F0F220F0F22 |
0F0F220F0F220F0F220F0F223736520F0F220F0F220000000000000000000000 |
000000000000000000000000000000000000000000000000000000000F0F2200 |
00000000000000000000000000000000000000000000000000000000000F0F22 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000006A6B8000000000000000000000000000000000000000000000 |
00000000000F0F220F0F220F0F220F0F220F0F220F0F220F0F223736520F0F22 |
0F0F220F0F220F0F220F0F220F0F220000000000000F0F220000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000000000000F0F22 |
0F0F223736520000000000000000000000000000000000000000000000000000 |
0000000037365200000000000000000000000000000000000000000000000000 |
00000000000F0F220F0F220F0F220000000F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220F0F220000000000000F0F220F0F220F0F220000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000000000000F0F22 |
0000000000000000000000000000000000000000000000000000000000000F0F |
2200000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000F0F220F0F220F0F223736520F0F220F0F220F0F22 |
0F0F220F0F220F0F223736520F0F220F0F220F0F220000000000000000000F0F |
2200000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000373652 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000F0F220000000F0F220F0F223736520F0F220F0F220F0F220F0F22373652 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220000 |
000000000000000000000000000000000000000000000000000F0F2237365200 |
0000000000000000000000000000000000000000000000000000373652000000 |
0000000000000000003736520F0F220000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000003736523736520F0F220F0F220F0F220F0F220F0F220F0F22000000 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220000000000 |
000F0F223736520000000000000000000000000000000000000F0F2200000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000037365200000000000000000000000000000000000000000000000037 |
36520000000000000F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220000000F0F220F0F220F0F220F0F223736520F0F220F0F220F0F220000 |
000F0F220000000F0F220000000000000000000F0F2200000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000F0F220F0F220F0F220000000F0F22000000 |
0000000000000F0F220F0F220F0F220F0F220000000F0F220F0F220F0F220F0F |
2200000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000037365200000000000000000000000000000000000000000000 |
00000000000000000000000000000000000F0F220F0F22000000000000000000 |
0000000000000F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220000000000000000000000000000000000000000000F0F2200000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000F0F220000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000F0F220F0F220000000F0F22000000000000000000 |
0000000000000F0F220000000F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220000000000000000000000000F0F220000000000000F0F2200 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000037365200 |
00000000000000000000000000000000000000000F0F220000000F0F220F0F22 |
0F0F220F0F220000000F0F220F0F220F0F220F0F220F0F220F0F223736520F0F |
220F0F220F0F220000000F0F2200000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000F0F22000000000000000000000000000000 |
0000000000000000000F0F220F0F220000000000000F0F220F0F220F0F220000 |
000F0F2200000000000000000037365200000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000F0F220F0F220000000000000F0F220F0F220000000000000F0F22000000 |
0000000000000F0F220F0F220000000F0F223736520F0F220F0F220F0F220F0F |
220F0F220F0F220F0F2200000000000000000000000000000000000037365200 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000F0F220F0F220000000000000000000F0F220F0F220F0F22373652 |
0F0F220F0F226A6B800F0F220000000F0F220F0F220F0F220F0F223736520000 |
000F0F220F0F220F0F220F0F2237365200000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000F0F220F0F220000000000000F0F220F0F220F0F220F0F226A6B80 |
0F0F220000000F0F220000000000000F0F223736520F0F220F0F220F0F223736 |
520F0F220F0F220F0F2237365200000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000F0F |
220000000000000000000000000000000000000000000000000000000000000F |
0F220000000000000F0F220000000000000000000F0F220F0F220F0F22373652 |
0F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F220F0F220F0F2200000000000000000037365200000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000F0F220000003736520000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000F0F220F0F220F0F220000000F0F220F0F220000000F0F220F0F22000000 |
0F0F220F0F220F0F220F0F220000000F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F2237365200000000000000000000000000000000000000 |
00000000000000000000000000000000000000003736520F0F22000000373652 |
0000000000000000000000000000000000003736520000000000000000000000 |
000000003736520000000000000000000000000000000F0F2200000000000000 |
00000000000F0F220000000F0F22373652EBEBEB0000000F0F22000000000000 |
0000000F0F220F0F220F0F220F0F220000000F0F220F0F220F0F220F0F220F0F |
220F0F220F0F220F0F2200000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000F0F220000000000000000003736520000000F0F22000000 |
0000000F0F220000000000000F0F220F0F220F0F220F0F220F0F220F0F220F0F |
220F0F220F0F2200000000000000000000000000000000000000000000000000 |
0000000000000000373652000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000000000000000F |
0F220F0F220000000000000000000000000000000F0F220F0F220F0F22000000 |
0000000000000F0F220000000000000F0F220F0F220000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000373652000000000000000000000000 |
0000000F0F220000000000000F0F220000000000000000000000000000000000 |
000000000000000000000000000000000000000000000F0F220000000F0F220F |
0F220F0F220F0F220F0F220000003736520000000000000F0F220F0F22000000 |
0000000F0F220000000000000000000000000000000F0F220F0F220000000F0F |
220F0F2200000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000F0F2200000000 |
00000F0F220F0F223736520000000F0F22000000000000000000000000000000 |
0000000000000000000000000000000000000000000F0F220F0F220000000000 |
000F0F2200000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000003736520000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000003736520000000000000F0F220000000F0F22000000000000 |
0000000000000000000000000000000000000000000000000000000F0F220000 |
0000000000000000000000000000000000000000000037365200000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000F0F220000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000006A6B8000000000 |
00000000000000003736520F0F22000000000000000000000000000000000000 |
0000000000000000000F0F220000000000000000000000000000000000000000 |
000F0F2200000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000F0F2200000000000000000000000000000000000000000000000000000000 |
0000000000000000373652000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000F0F2200000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000373652000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000373652000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000373652000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000003736520000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000000000F0F2200 |
00000000000000000000000000000000000000000000000F0F22000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000F0F22000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000006A6B8000000000000000000000000037 |
3652000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000F0F2200000000 |
00000000000000000000000F0F22000000000000000000000000000000000000 |
0000000000000000000F0F220000000000000000000000000000000000000000 |
000000000000000F0F220000000F0F2200000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000F0F220000000F |
0F220000000000000000000000000F0F22000000000000000000000000000000 |
0000000000000000000F0F220000000000000000000000000000000F0F220000 |
000000000000000000000000006A6B8037365200000000000000000000000000 |
0000373652000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000000000000000F |
0F220000000000000F0F220000000F0F220F0F220F0F22000000000000000000 |
0F0F220000000000000F0F220F0F220000000000000000000F0F220000000000 |
000000000000000000000000000000000000000000000000000000000F0F2200 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000F0F220F0F220F0F220F0F220000000F0F220F0F220F0F22 |
0F0F220F0F220000000000000000000000000000000000000F0F220000000000 |
000F0F220000003736520F0F2200000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000F0F220F0F220F0F220F0F220F0F220F0F220F0F220000000000000F0F22 |
0F0F220F0F220000000F0F220000000000000000000000000000000000000000 |
000F0F220000000F0F220000000000000000000000000F0F220000000F0F2200 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000F0F223736520F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F220F0F220000000F0F220F0F220000000F0F220000000000000000000000 |
000F0F220000000F0F226A6B800F0F220000000000000000000000000F0F2200 |
00000F0F22000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000F0F220000003736523736520F0F220F0F220F0F220F0F220000000F0F22 |
0F0F220F0F220F0F220F0F220F0F220000000000000000000000000F0F220F0F |
220F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F2200000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000F0F223736520000000000 |
000000000000000F0F220000000000000000000000000000000000000F0F220F |
0F220F0F220000003736520F0F220F0F220F0F220F0F220F0F220F0F220F0F22 |
0F0F223736520F0F220000000000000000000000000F0F220000000F0F220F0F |
220000000F0F220F0F220F0F220000000F0F2200000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000F0F220F0F220F0F220F0F220F0F220F0F220000000F0F220F0F220F0F22 |
0F0F223736523736520F0F220F0F220F0F220000000000000000000F0F223736 |
520000000F0F220F0F220F0F220000000000000000006A6B8000000000000000 |
00000000000000003736520000000F0F220000000F0F22000000000000000000 |
0000000000000000000F0F220000000000003736520000003736520000000000 |
000000000000000000000000000000000000000000000F0F220000000F0F220F |
0F220000000F0F223736520F0F220F0F220F0F220F0F220F0F220F0F22373652 |
0F0F220F0F220F0F220F0F220000000000000000000000000000000F0F220000 |
003736520000000F0F220F0F220000000000000F0F220000000F0F2200000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000F0F220000000000000000000F0F220000000F0F223736 |
520F0F220000000000000000006A6B800000000F0F220000000000000F0F2200 |
00000F0F220F0F220F0F223736523736520F0F220F0F22373652000000373652 |
0F0F220F0F220F0F220F0F220000000F0F220000000000003736520000000F0F |
223736520F0F220F0F2200000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000F0F22000000000000000000 |
0000000000000000000F0F220000000000000000000000000000003736523736 |
520000000000000F0F220F0F220000000F0F223736520000000F0F223736520F |
0F220F0F220F0F220F0F220F0F223736520F0F220F0F220000000F0F22000000 |
0F0F220F0F220F0F220000000F0F220F0F220000000000000000000F0F220000 |
000000000F0F220000000F0F2200000000000000000000000000000000000000 |
00000000000000000000000F0F220F0F220000003736520000000F0F22000000 |
0000000000000000003736520F0F220000000000000000000000000000000000 |
000000000F0F220F0F220F0F220000000000000000000F0F220000000F0F220F |
0F220F0F220F0F220F0F223736520F0F220F0F220000000F0F220000000F0F22 |
0F0F220000000000003736520000000F0F220000000000000000000000000000 |
000F0F220F0F2200000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000F0F220000000000000000000000000000000000000000 |
000000000000000F0F220000000000000F0F220000000F0F220000000000000F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220000000000000000000F0F22 |
0F0F220F0F220000000F0F220000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000F0F220000000000000000000000000000000F0F |
220000000000000F0F220000000000000F0F220F0F220F0F220000000F0F220F |
0F223736520000000F0F220000000000000000000000000000000F0F220F0F22 |
0F0F220000000F0F220000000F0F220000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000F0F223736520F0F220F0F220000000000000000000000000000000000 |
000000000000000000000000000000000000000F0F220F0F220F0F220F0F220F |
0F223736520000000000000F0F223736520000000F0F22373652000000000000 |
0000000F0F220F0F220F0F220F0F220000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000F0F220F0F220000000000000000000000000000000000 |
000000000000000000000F0F220F0F22BBBDD50F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F223736520F0F220000000000000000000F0F22 |
0000000000000F0F220000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000000F0F22000000 |
0000000F0F220F0F220000000F0F220000000000000000000000000000000000 |
000000000000000000000F0F220F0F220F0F220F0F220F0F220F0F220F0F2200 |
00000F0F223736520000000000000000003736520F0F226A6B80000000000000 |
0F0F220F0F220000000F0F220000000F0F220000003736520000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000000000000F0F22 |
0000000F0F220000000000000F0F220000000000000000000000000000000000 |
000000000000000F0F220000000000000F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220000000F0F220F0F220F0F220F0F220F0F223736520F0F220F0F22 |
0F0F220F0F220F0F220F0F220F0F220000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000F0F220000000000000000000000000000000000000000 |
000000000000000000000000000F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220F0F220000000F0F220F0F220F0F22 |
3736520000000000000000000F0F220F0F220F0F220F0F220000000000000000 |
0000000000000000000000000037365200000000000000000000000000000000 |
00000000000000000000000000000000000000003736520000000000000F0F22 |
0000000F0F220000000F0F220F0F220000000000000000000000000000000000 |
000000000000000000003736520F0F220000000F0F220F0F220F0F220F0F220F |
0F223736520F0F220F0F220F0F220F0F220F0F220F0F220F0F220F0F22373652 |
0F0F220F0F220F0F22000000000000BBBDD50000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000000000000F0F22 |
3736520F0F220F0F220F0F220F0F220000000000000000000000000000000000 |
000000000000000000000F0F220000000F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220000000000000000000000000000000000000000000F0F220F0F22 |
0000000F0F220F0F223736520F0F220F0F220F0F220000000000000000000F0F |
2200000000000000000000000000000000000037365200000000000000000000 |
0000000000000000000000000000373652000000000000000000000000000000 |
0F0F220F0F220F0F220F0F223736520000000000000000000000006A6B800000 |
000000000000000000000F0F220000000F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220F0F220F0F220000000000000000000000000F0F22 |
0000006A6B800F0F220F0F223736520000000F0F220000000000000F0F220000 |
000F0F2200000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000F0F220F0F220F0F220F0F220000000000000000000000003736520000 |
000000000000000000000000000F0F220F0F220F0F220F0F220F0F220F0F220F |
0F220F0F220F0F220F0F220000000F0F220F0F220000000F0F22000000000000 |
0000000000000000000000000000000F0F220000000000000F0F220000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000F0F220F0F220F0F220F0F220000000000000000000000000000000000 |
000000000000000000000000000000000000000F0F220000000000000000000F |
0F220000000F0F220000000000000F0F220000000000000000000F0F220F0F22 |
3736520000000000000000000000000000000F0F220F0F220000000F0F220000 |
000000000000000000000000000000000000000F0F2200000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000000000F0F220F |
0F220000000000000000000F0F220000000000000F0F22000000000000000000 |
0000000000000F0F220000000000000F0F220000000F0F220000000000000000 |
000000000000000000000000000000000F0F2200000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000F0F220000000000000000000000000000000000000000 |
000000000000000000000000000000000000000F0F220F0F220000000F0F2200 |
00000000000F0F220000000000000000000000000000000000000000000F0F22 |
0F0F22000000000000BBBDD53736520000000F0F220000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000000F0F2200000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0F0F220F0F226A6B800F0F220000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000F0F220000000000000000000000000000000000000000000000 |
000000000000000000000000000000000000000000000000000000000000000F |
0F22000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000F0F220F0F220000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000000000BBBDD500 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
000000000000000000000000000000FFDB004300010101010101010101010101 |
0101010101010101010101010101010101010101010101010101010101010101 |
0101010101010101010101010101010101010101FFDB00430101010101010101 |
0101010101010101010101010101010101010101010101010101010101010101 |
01010101010101010101010101010101010101010101010101FFC00011080176 |
016403012200021101031101FFC4001F00000105010101010101000000000000 |
00000102030405060708090A0BFFC400B5100002010303020403050504040000 |
017D01020300041105122131410613516107227114328191A1082342B1C11552 |
D1F02433627282090A161718191A25262728292A3435363738393A4344454647 |
48494A535455565758595A636465666768696A737475767778797A8384858687 |
88898A92939495969798999AA2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3 |
C4C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE1E2E3E4E5E6E7E8E9EAF1F2F3F4F5F6 |
F7F8F9FAFFC4001F010003010101010101010101000000000000010203040506 |
0708090A0BFFC400B51100020102040403040705040400010277000102031104 |
052131061241510761711322328108144291A1B1C109233352F0156272D10A16 |
2434E125F11718191A262728292A35363738393A434445464748494A53545556 |
5758595A636465666768696A737475767778797A82838485868788898A929394 |
95969798999AA2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9 |
CAD2D3D4D5D6D7D8D9DAE2E3E4E5E6E7E8E9EAF2F3F4F5F6F7F8F9FAFFDA000C |
03010002110311003F00FE005543120BAA0DAEDB9C3904AA332A0D8AEDBA4602 |
3424040ECA64648F73AB68A2801CE103B88D99A30CC119D423B264ED67457915 |
18AE0B2891C29C80EC06E3734BB8B2B5D4F4EBAD4AC3FB574EB6BEB4B8BFD2FE |
D52D8FF695943711C97561F6EB7569ECFED902C96FF6A855A5B7F33CE8D4BA28 |
AA61DC234619846CCAEC818EC6740EA8CCB9DA59164902B11950EE01019B2DA6 |
9D9A92B5D3BD9A528DD3BA56973292DAEA49A7B34D6E0E7285DCC6ACB196628A |
EC1DD53276ABBAA46AEC17019846818E484507686D145202F5BEA3716D657F61 |
1C762D06A5F65FB44971A5E99757B1FD8E569A1FB06A5756936A3A56F762B75F |
D977567F6E8B16F7DF6881563105BDADCDE48D15A5BCF752A417574F15BC324F |
22DB58DB4D7B7B70C912B32C167676F3DDDD4C408EDEDA09A7959228DDD52DD2 |
09278D2E666B7819B6C93AC3E79881CE1CC41E3675071BC2B6F09B9916460236 |
8C84D8A433799B9C32950102009B195F79666663207531A840A843B97658EB56 |
A2E4EF1578A5CEAE926A4D28B6DC53736D3E5B39393576A76014261F733060A0 |
C61543067DEA0AB92EA517CB2EC1956425D55360573224F6F1AC9E7EE8A49447 |
6F2C9B9268E0585976859667962915E3DC446210629279A48A18A512BA23C41B |
3198DE4902A6E9218C0DD1F9D2344B2120C8A22DD1202D22AC8CED1451B2ED3E |
64766DF6DCCB37DA0EF79F666E25B88D248A496F2DFCCB9C5C4D025D4851A446 |
8E499142CAF732488903C88E293925E4EDE7A4B47A4ECEFA2BC6D6B4A5CABDE0 |
2953911E4758E356791D9511114B3BBB10AAAAAA0B333310154024920019ADA9 |
34B960DA9F629DA58A08754945F452E9CC74FB9B77BFB449609665F3D2FF0049 |
5B6D5ECA4B19D5E5B2B99E485EEE258E782D6B3AF6ADA95878774CD4AF56F2C3 |
C31A7EABA3E83A69B95B98346D3EF75DD5F5C9EDECA4B7C3A5A3EB5AD6A7A8C1 |
15C5EDEC8F7535C5D485ACEEE1492FD8B8A729B6B44E368B7193E68A945CFE15 |
CA9CB99C7DA494E2A0E1AB7157FF0083E5FD7CB4D4E6DD42BBAABAC8AACCA244 |
0E11C024075122A481587CCA1D11F046E556C81B51EBBAC5B5D1BA9648AE6E5E |
CB47B33FDADA7586AA8DA7E907499F48B716FAB5A5DC1F66860D234C811045B2 |
E74B8DB4E9BCED32F2EADAE085E08BC8D3525B492DF50BBB2B8BDB8BBB2B1792 |
DE38A6992D635BC01AF6C53ECD70F73A9C361ABC10DC34B05B5E0FB469714A99 |
D0DB0946FF003976A2896E1515CC90401E459243E6882D9997644123FB52F9F2 |
DD5ADBC2CD3BC8913E59C2CA1269C9BBA8CD24A4A2EEB49372B42A5AEECD3756 |
166936CDFF00AFEBAAFC99528AD60D25BA5CC115A5B34DAA896CFCBF212F8C70 |
26A16371049A44D2C33B432B5DD94B64B7F657D35C5C5A9BCB176582E26FB65C |
F09F8727F16F897C3FE1A8352D1B4693C41AEE91A12EB1E21BFF00ECDD0B473A |
B5E25A7F6BEB97AB15C4D63A16968CF7DACEA496B709A7D84135C491B1088F1E |
CE4E51845394A564924FE27B455ED776716F456BD9ED71BD357D0C4B5863B8B9 |
B7825BA82C629E786196F6E96E5EDACE3924547BAB84B2B7BCBC682DD58CB32D |
A5A5D5CB468C20B79E5291341566F6D5EC6F2EECA496DA792CEE67B579ACAE60 |
BDB399EDE5789A5B4BCB6792DAEEDA4285E0B9B792482788A4B13B46EAC60447 |
91D638D59E4765444452CEEEC42AAAAA82CCCCC40550092480066A1A69F2DBDE |
4DA7BDEFB5BB68D69657D5EFA583A1F18691A2E81E2BF11E87E1CF15E9DE3BD0 |
347D6F52D3746F1AE91A6EBBA3E93E2CD36CAEE5B7B3F11697A578A34DD1BC4B |
A769DAC411A5FD959F88347D275A82DA78A3D4F4CB0BD59AD62C086592DE68A7 |
89B64B0C892C4F856DB246C1D1B6B02AD865070C0A9C608238A6852519F2BB55 |
95482E81F2E1C82B196F3194046DEEAA51094576569230D66EAD65B09EE2D6E1 |
207911E6804D05CC5796CCD6F72D0C93D8DF58DC4B637F03496F3431DDDB4D77 |
653C65E4B7924FDDCCB4DB72738C7D9AE6728F273F2C2EDB8A8CA4E53B26B962 |
E5294B4D64DA6C3F1F5EA59D3F4CBDD6AE658ED5200FB2E279249A4B6B0B3464 |
827B9583CE94C1690CF76616B5D36D0346D797B24163671BCF3451365D7A1783 |
1EDE09F52FF4958E266D3ED630F2A08EEAE1FED203C4658209CB48D1CAD6D005 |
47114AC9324D2C6B22A78F352BDF11EBF7DAB186C5985959E9F347A4E83A7E93 |
671C5A25BC36334915868D676FA659496E2CED9B54BC8AD74EBBD46EAF1F54BE |
5BFB8D52FB55BFEE9E0A3F51A58A8D472AB3A95233824A49C54A71528BE64D24 |
E1AB69B93A8AD6B2538527CEE36D12BA7F769F8F4EC70011CA348158C6ACA8CE |
14EC5770EC8ACD8DA19D6390AA939608E40215B13856B89E2B78E59244320B7B |
632A485963926629FB887ED2E9B9E5691A1B7F39BCC77F2C4AED96E86C746B09 |
6D3588B57D72C346BCB2D29353D12DA7D3F529EE35ED564D4B46D3DFC3D1DEC1 |
6EB65A6B2DADF6A7A8DCDEEB33C5A7D93F86352B013C37F796D06A145ACD6382 |
E6D36C32DD44A6791ADA1BC924B64B3FB4BBCB7923C0C6159E39E380DB471442 |
3956DDB537B09ECE78AE399509AD5A4959F32735CDCD1BBF64E316DC652B68A4 |
AF65CFA454AD57FEBF5FEBF331598108022A9552ACCA5F321DEEDBDF7332860A |
C23023089B114953217771D4A3BA3152C8CCA4A3A4884A92095923668DD723E5 |
746646186562A41A9EE62B88E476B93999E47F377CC924E262A92C9E7A876952 |
4CCA049E70561309A26FDF433A47ADA4EB17BE17F11E95E27D0CDB0BAD035FB5 |
D6345B8BAD3A1BED39AF745BF8350B23369BAB477B6B7B6C92476AF71A76A31D |
DC3340E20BE8E78E570F9F26AF9EF15194632BA4A718BBA6FD9E8DB56D755AB4 |
9BBC931FF5FD33029CEC19DD951635666611A172880924229919E42AA3E552EE |
EF8037333649EEFE2778DBC57F13BC77E28F8A1E34B7B083C45F1235CD63C67A |
8C9A3F8774CF0AE857777ABEAB7A6FA7D0B43D12C74ED1AC74C4D4A1BDB38A0D |
2ED63B5866B5B8B739B8867AE0AA66946528C5B94399F2CA51E494A3AF2C9C6F |
2E5E68B4DC54A495F7959300A28A2A40DA6D5641E1E874449D1A26D6AE3559ED |
9B46D2D648E45B1B5B4B49E1F100DFAD4E93ABDEC771A33FD9F4BB56B7B5BD8B |
ED977792FD87168A2AA5294ADCCDBE58A8C6EDBB463B2576ECB7765A26DD925A |
01785F3AE9B26982DECBCB96FA1BE6BB367036A41E0827B74B78EFD94DCC564C |
2E24966B389D20B89D609AE16592D6D8C502DBC8D6D35D86804504F6F6EE8D75 |
6C972D25D47752C4D0D93CCB797102AD9CA2E2EA0824B6B391ED62BB9A096FAC |
92E20A72A972402A08576F9DD1061119D80676552C554844077C8FB638D5A465 |
525DCAD7BBB2E5497CECB6EEFD5ED75B812DBADB348C2EE69E0884174C8F6F6F |
1DD48D7296D33D942D14B7566AB05C5E2C105D5C095E4B3B6926BB8AD6FA5812 |
CAE22550C482EA836BB6E70E412A8CCA8362BB6E91808D090103B2991923DCEA |
DA2976D16FE7AEDA3D76F4B3D5EBB580A73840EE236668C330467508EC993B59 |
D15E45462B82CA2470A7203B01B8B69C1DC234619846CCAEC818EC6740EA8CCB |
9DA59164902B11950EE01019B27F57FBF4DFAF5FC3B30B9A5DC595AEA7A75D6A |
561FDABA75B5F5A5C5FE97F6A96C7FB4ACA1B88E4BAB0FB75BAB4F67F6C8164B |
7FB542AD2DBF99E746A5D145537285DCC6ACB196628AEC1DD53276ABBAA46AEC |
17019846818E484507686D145DDB974B26DFC2AF7692D656E66B4D22DD93BB49 |
36EE055EB7D46E2DACAFEC238EC5A0D4BECBF6892E34BD32EAF63FB1CAD343F6 |
0D4AEAD26D474ADEEC56EBFB2EEACFEDD162DEFBED102AC628D4D6E90493C697 |
3335BC0CDB649D61F3CC40E70E620F1B3A838DE15B784DCC8B23011B38F37325 |
17CAE578DF99415A4B95A726D25169B526DA8F2B7CDA5C05B7B5B9BC91A2B4B7 |
9EEA5482EAE9E2B78649E45B6B1B69AF6F6E1922566582CECEDE7BBBA98811DB |
DB4134F2B2451BBAC4A130FB9983050630AA1833EF5055C97528BE59760CAB21 |
2EAA9B02B99102136290CDE66E70CA540408026C657DE599998C81D4C6A102A1 |
0EE5D963706CC66379240A9BA486303747E748D12C84832288B74480B48AB233 |
B45146CBB4F991AD3E766F756D95BAAB35ABDDDDDA3CBBDC23A29CEEF23BC923 |
33C8ECCEEEEC59DDD89666766259999892CC49249249CD36900E450CEAACEB1A |
B32A991C394404805DC46AF21551F3304477C03B559B00B6B4356BBB5D4355D4 |
EFEC74AB4D0ACAF750BCBBB3D134F9B51B9B0D1ED6E6E649ADF4AB1B8D5EF752 |
D5A7B4D3E174B4B69B54D46FF51961851EF6F6EAE5A59E4A2426C5219BCCDCE1 |
94A8081004D8CAFBCB33331903A98D4205421DCBB2C6DADD269D9BF795F557B6 |
97B3B755A2767AAD340B32585EC3656BA94B6B3C7617D3DDDB59DE3C6CB6F757 |
160B6AF7B1412101647B55BEB4330527CBFB4461B05B1552A768635B68671750 |
3CB24F710BD92ADC8B9B78E08ED5E2BA99DEDD6CDA0BC6B8962B7582EE7B9592 |
C6E8DDDBDAC4F652DE4144AD7D134AD1DE4A5AF2AE677492B3776A36BC53E56D |
B4DB0D9B6D4225D0B53D17FB334A96E6FB55D1F558B59B88651ABD841A358788 |
60B9D2EC2F4DFC3690E9FABB6B16F75A9D9CBA75DDD5F5EE8BA21B3BCB2FB2DC |
5B6A9DDF86BC01A76BDE07F1EF8ABFB56EE4BCF08783A2F11A69FA7E9D7D711A |
6A32FC48F02F83C69DABCC6C7C9B4B44D0BC4BA8EBCFAA25CFD87ED3FD8BA5FD |
A05FDC5C598E57C25A169BAFEB4BA66A9AF59E81646C2F2F64D6EF61D565D3AD |
1AC6C9F50FB35E0D3349D575089AF9A16D16D2E134F92CE1D5EF2CA6BEB8B7D2 |
56EAFE2FDA6FD8DBF67EFD95FE21784BE334DADFC55F08DD5C783FE1F68D078E |
BC3DA17C3FF8A1E23F02EA7F0AFF00E12EF8470F8B3E2DDD7C44F12FC362DF05 |
AFED34ED17C69A0EA7E32FEC7F887E31D37E2678B7C21AE7C26F83FAE787746D |
734FF0FF00B396E03EB71A8E7ECF97D9D4A34AF3F7D56725C928C6377684A69C |
A6E3287249BB5E2E4B2A93E4B5AFBA6F4D2CB75AF7E96D6FEBAFE2549AB6A56B |
A3DE785248B4C4B26D6E0D5AE98E8BA1C9AC2EA5A75ADEE9B1C49E25FB03F882 |
3D3162BDBA32E8B6FAB2E877575E4DFCF6135EDADA5CC3895EFF00F187C1925A |
78CBC597DADF8FBC177DA8586A373A75F699A07857E2968BFD92DA1DEF86BC37 |
0786A1D3FC4BF0D3C2D0585EE8F657B7969F61D4AE2D24B71E03F12596AB791E |
B73F86ADFC53E33E21D0EE7C37AD6A1A15E5E68D7F75A6CFF679EEFC3DAE693E |
24D16793CB490B69FAEE85777FA46A70AEFD9F69D3EF2E6DCC8AEA92B6D35E7E |
2A854A35269F34A9C26E9D394E5172E4BCDD3BC632972F34632765EEA9292BDD |
32E32524BBB577BF9199014064590A847865196033BD50CB0847F22E1A3669E3 |
8D49458CBA33C2F3C10CB2CABA305CDC5AC72CED3DA33984411C524AF34F2C72 |
C568361FB2B32CB0DB40902FD8F5590D80C4D6EB6B2CD1DCC295AC60B4B97923 |
BABD8B4F0914B3ADC4E97532482DE0964FB14305A5A5CC925F5F482282C9E796 |
CEC639D80BEBBB5B677BBB6DAB8D02FED7C2BA478CE5D57497B4D735BF137856 |
CB4FB5D7B4BBAF13DB5CF8534AF07DDDFCFAD78722BEFEDDD13C39A869DE33B2 |
B3F0E6BB7F631E93E23BDD2BC4DA3E8F35DCFE19D7934E8A6E518F345FC37775 |
2578ABA8B728F32778CA5174D691726FE2F7915E5FD7A12C31085DE35B2BF481 |
EED2D22D3A7DF6BF6BBB6309B37BE9E6B39AD5A6113DBDDC5A75D34D67E7A5F5 |
C8FB35ACB1595E457A2C2DE036A83539AC22D4D6196478248A38427CF2F92E4D |
94526AE6232A4C351D3E478E264B6864586CD27BA864F3562D39E278E58AD7FB |
492DE0F36F246B39B4FBB6D4A63E7D832473C935BC9027F685A88E030BEE6FB3 |
1B65BB4A575710B58D8DABAC8F35B5BB794D15EABDB45F68BA96E9BCDB6FB211 |
F6978A44593C9BC3B42C2936D9A196DD3B27523184E2D423FBB4E3CD1BEB354E |
7EC57246C93551BB35C9FBB8BE4A351CDA9B6CF7D6DA79697D7D3D775768E8EC |
44177E218F475D6B49B3B6D6752B1D264D56F6D352974D82DEF2EA1D3EE2FF00 |
5ED4346B39FC48D6D6F1A47AA6A63C3F61AC49A830B836963792CDF669AA3DA5 |
9C821B9923996D6E669A7B1B7B69D678AECC6E9A75C47059793A6CDF6BB8BF5B |
3BB78ADFEC692698F2C300B596D2345824B9992FDEF7ECBF2F966546BCB883F7 |
F6D3E9704574BE6DFB5DBDCDCCD6D716B736D6325D5F8B1F34C2D6B76B249BAD |
DE788B5194CB6F731C2A914329916E16DAF04C244416A5612D6D6576AD27D8EF |
1278E0B870FE7DEDA8FECD91AC06BCF46D57DB395E35A7ECE3EC27284AF3E68B |
94AA4EF082FDEBF64A4A2FDDA92578CE33567756D9AD75DACBA596AF6D6DE9E5 |
0A6909790C12A3F9317DB638C9B94B7B28FECCFA343A8BABDD25B79C24B586D9 |
D1EEE6B37B5BA6992FE14066BADF245650CBA671711B4F1D96AB25D4105DAC91 |
2B5A8558FCDB4B265458CA69D6934574CC61BDBB912E6F2EA43059596A5AF6D6 |
667B2B7852D2637AEBA93491C9225AAC20587917B0E9F013716B6F0DC4F7FF00 |
66B8092DB3DB6ACCB2CD60D6F63269F6B5E6D3E0B582FB75DAC9389B52616D71 |
6FB9B538ED8DFCD30B9D4FCB99EED8430C13CE96925BC5697704714AB67AB4B1 |
5EC3B2C3462B9FD8A6A707ED1CA4E2AF2546718AE7B3738FC0A34DD4938C9AB4 |
A6E516B9BA7375D2CAFA6AB5B7DF7765E8B5338DB4F2DB5B34B69068D7765079 |
3670E357B57D46EA259649756992677B782ED2DC5B09750B39AC34F83FB2ED1F |
54B2DF793EA12E2ED9ECD2DE52F32C25A0992171F65BB512882737763E6ACC23 |
59A4B530C3A8DA6F72B6CA2E52249A2825EE9B45892F6CED2E2DEDDA383EC289 |
7262BBB8BABE4B7168DE73C2B15CC62DD6417B617025BB8ADED6DAEECBED3108 |
ED74BF3C1028BEF26EE0B77BE5B7952CED57CE7BE4B9379AB5C5ADD5ADCC8FA7 |
45756E2CA6927B9BC6BC8AE9EF208A49A48354084A9E024DA4DAA5252F66A579 |
3E69A71BA92E58294DE8A118C6D5947DC568CAA339FE7A5FB597DEF4EFDBAEE9 |
1C65AE9B0DD5CDDDAA1B991EDFC95592C916FE1DAB756F6D797BF27953CF6E03 |
BCB6D05B5BC9332C91979024324926834CFABBC1AA2D969560DA659E8FA4DAD8 |
E9119B07D4AFB4FB18E086EE758A669BFB42F92CE4D4351BC57826D5751F3A1B |
1F2EEEE01B7D49ACACE2BD16F78EBA9DB46B6BA6279170A4E950457F2CFB6FA6 |
78DE45636567773DD4B04917D8D16EECFCAB4B392CE78F6B42D28DBC92DC9D1A |
D3CB9105B2C3ADC2B3493584D6CF6BF6956D3AEED5ECF548629E69A4865B76B4 |
B99A2B1875086F17FB49AED51C0CA55210515652A8AAB8F34B58B93849DA32A4 |
9526FDC5CFFBC7EE5487345D1073B26EFBDADB2DFE77D7F0DEF6D4EBF5DF10D8 |
6BBE08F877B3C2DE1BF095FF00C3AF086ABA5C7ACF86B44BA7D77C7326B7E21D |
575A1ABF8EEFAF35BD416FB50D0B4FD70E93E1DB8B1B6B0B1B7F0EF87F43D2B5 |
2D323BEB9D6BC4D5E69E1FF0E5E6BFE7DAE8563A96B77761A6EA7A9CF69A6492 |
F9EBA7C761A95FEA77725A422EA24163E1FD3A6D4B5ABD17D159695A6DB4926A |
36B76BA6DF4573EEFE169B4A817C4726AF1D94F6ADE1ABCB75B6B8B78A6BFB89 |
6F6FF4DB209A05CCB776DFD93ADC51DCCB736FAD450EA52E956D05E5E26957FE |
598ABCD068F7DA534DAADABEAFA4BCE2E6E6DE58608DAEF53B158750D26E5ECE |
433CD1DE437F6F73ADE9333CA824BA97097C8F7305FB6A3EBE270379D0A9CAAA |
4141AAD18C62A778C21075A2A4DD08D47EC68A51718A6A0F5BBB98C67A35B3BE |
9DACDB76D3DE6AEDEBBEC79CDD4ED6A61BBD144905959C96B17DB52490ADC5F9 |
B679595BCD82D7ED1E56EBB5CCB6A5FCBB8952431D94F69670EA6A1E6DE1D475 |
0BF8F4FB58EEA7BEB8D46DADC44F2AEAFF00DA32CD7A34DB6B2B4FB3684924A2 |
CEC76C51AE9D6F6375A7826EE4F291627BC9EE9EE3CA48566F3A0BBB07B2B0FB |
5DC5F6A5665A749A192D2DECA27616B72B36A6BA8A4D240F2C8F15840F27D92D |
AB42D2A5EC73C904D71777137DAE75D35A35B89E55B7BE0BFD9D7B69797124D6 |
97D2F9CDAC3DA431C768F1986211B471443C4BC6ED294A74EACADCAA0A1429C9 |
CA54EEA9439AA2F7793F73194673A4F9E539C5BB6FAFA35E777D1F5D37BEAF44 |
F6322E1E65B482291A39565F2A65737905E4D1345134215122919EC637B67B58 |
A5B79D7CC76B2870CAB0086286F4DBC973737363693D969D3DDDD1B1B7B89FED |
925BDB893CC8AD24BE16F6A9793DAC12C0934EB6D6FE6B159BECF00956316753 |
5BCB3BBBBD36FAD1ECEF6C67B9B1BDB6B98D45C5A5CC3703ED96621D91C36220 |
D422B96586DA082487CF9EDE596642739AEEF23BC92333C8ECCEEEEC59DDD896 |
66766259999892CC49249249CD79951EB28FBCEDCABDF8A52528DD4936E2A4B5 |
6EF1B2BBB735DC1376368A28AC80DFF0A7876E7C5FE29F0DF84ECB50D0348BCF |
146BFA3F876D356F15EBFA4F853C2FA65CEB5A8DB69B06A1E24F14EBD7563A17 |
86B40B296E52E758D7F5ABEB3D2747D3A2B9D4751BAB7B3B69A64C9BDB57B1BC |
BBB2925B69E4B3B99ED5E6B2B982F6CE67B795E2696D2F2D9E4B6BBB690A1782 |
E6DE49209E2292C4ED1BAB181D1D085756462A8E03A952524459236008076BC6 |
CAE8DD19195949520D36AB4B5B97DEE6F8AEF6B5B9797D75BEFD0028A28A900A |
2A496592660F2B6E658E1881C2AE23B785208970A00F9228D1338DCD8DCC4B12 |
4C74DDAEED76AEECDAB36BA5D5DD9F75776EEC0D7B597415D1F568AF6C3579FC |
412DCE96742BFB5D5ACED747B0B48CDE9D6D356D265D16F2F756B9BC0DA6AE97 |
2D9EB5A2C5A6986F64BB8755FB4C11DA6522867556758D59954C8E1CA202402E |
E235790AA8F998223BE01DAACD805B5A1AB5DDAEA1AAEA77F63A55A685657BA8 |
5E5DD9E89A7CDA8DCD868F6B737324D6FA558DC6AF7BA96AD3DA69F0BA5A5B4D |
AA6A37FA8CB0C28F7B7B7572D2CF23BDD2BF2FBB656B59C9372936DA5ADAF66D |
B52B38A574B40CFAB72585EC3656BA94B6B3C7617D3DDDB59DE3C6CB6F757160 |
B6AF7B1412101647B55BEB4330527CBFB4461B05B155884D8A433799B9C32950 |
102009B195F79666663207531A840A843B97658E568635B686717503CB24F710 |
BD92ADC8B9B78E08ED5E2BA99DEDD6CDA0BC6B8962B7582EE7B9592C6E8DDDBD |
AC4F652DE0AD695D5DF2AE5B492B3BC756ACF9BDDBAE54E2D36A4DDA2E2C20AD |
9B6D4225D0B53D17FB334A96E6FB55D1F558B59B88651ABD841A35878860B9D2 |
EC2F4DFC3690E9FABB6B16F75A9D9CBA75DDD5F5EE8BA21B3BCB2FB2DC5B6A98 |
D5D5784B42D375FD6974CD535EB3D02C8D85E5EC9ADDEC3AACBA75A358D93EA1 |
F66BC1A6693AAEA1135F342DA2DA5C269F259C3ABDE594D7D716FA4ADD5FC574 |
612A95230859CA6F9127251BB9A71B5DE8AF7F89E91766F407B5DF4D7EEF43AA |
F0D78034ED7BC0FE3DF157F6ADDC979E10F0745E234D3F4FD3AFAE234D465F89 |
1E05F078D3B5798D8F9369689A1789751D79F544B9FB0FDA7FB174BFB40BFB8B |
8B31C349AB6A56BA3DE785248B4C4B26D6E0D5AE98E8BA1C9AC2EA5A75ADEE9B |
1C49E25FB03F8823D3162BDBA32E8B6FAB2E877575E4DFCF6135EDADA5CC3FB6 |
BFB1B7ECFDFB2BFC42F097C669B5BF8ABE11BAB8F07FC3ED1A0F1D787B42F87F |
F143C47E05D4FE15FF00C25DF08E1F167C5BBAF889E25F86C5BE0B5FDA69DA2F |
8D341D4FC65FD8FF0010FC63A6FC4CF16F8435CF84DF07F5CF0EE8DAE69FE1FF |
00CAEF8C3E0C92D3C65E2CBED6FC7DE0BBED42C351B9D3AFB4CD03C2BF14B45F |
EC96D0EF7C35E1B83C350E9FE25F869E1682C2F747B2BDBCB4FB0EA5716925B8 |
F01F892CB55BC8F5B9FC356FE29F671B96FB0C3D2AB45AE7F674E955F673B539 |
3509CABD4739C95D352A29F2B941BF6B7E450B18C6A5E4D3BF7575ADAEACAC97 |
4D77D763C02A680A0322C85423C328CB019DEA8658423F9170D1B34F1C6A4A2C |
65D19E179E08659655D3F10E8773E1BD6B50D0AF2F346BFBAD367FB3CF77E1ED |
7349F1268B3C9E5A485B4FD7742BBBFD23538577ECFB4E9F79736E64575495B6 |
9AA96305A5CBC91DD5EC5A7848A59D6E274BA992416F04B27D8A182D2D2E6492 |
FAFA4114164F3CB67631CEC05F5DDADB3BDDDB788A328D4E476528C9C5A94928 |
DD5D38CA4DA8D9BBA6DBE5EEEDA9B79972DBEDE50EC7D2A41FBBF9AFA5D0A598 |
28B784448AFA8B3CC238E1F2A3112911C2CAF0ED49639516C7FC4CBFEA5DFF00 |
CB4EBE86F827FB25F8FBE3F785750F18F86FE247ECE3E13B1D335FB8F0BCBA77 |
C63FDA57E0C7C1EF13CD73A7E95A3EA1F6BB0F0CFC47F19787F5CBED00DAEAD6 |
B6967AE5AD9CBA4CF7B69A969B6F72D75A55EC307B0FFC3B6BE2FF00FD170FD8 |
63FF0013B3F659FF00E79D5EA51C1E3AA5284E950C64E9C9370943130845ABBD |
545C5DBCF5DEE66E504DDDC6FE6AEFF33F3F55AD85B4C8F0CED78D3DBB413ADC |
46B6D1DB2C7742EE19AD0DABCB3CF3CAF64F6F7097B6F1DAC76F7514B6B78D79 |
14B633FF0065EA7FD99FDB5FD9D7DFD8FF006EFECBFED6FB25C7F667F69FD9FE |
D7FD9DF6FF002FECBF6EFB2FFA4FD93CDFB47D9FF7DE5F97F3551A2BC9BAEAAF |
A34AD65ADEF77A3BFE7B2BA48D029CAC54380170EA15B72231003ABE51994B46 |
DB9002F1957285E32DE5BBAB5CD2E4B28B53D3A5D4A3F3B4E8EFAD24BF87C996 |
E7CDB24B88DAEA3FB3DBEA5A34F71BE0122F930EB1A54B2E7647A958BB2DD440 |
B58AE6F6D6CF4FB8F33ED5F608566D49ACB478A3BDB98ADD6EA39AE2E2FE4B1B |
6B1B6BE926863D4AF2F6DA292CA28F50BD8F4DF326B5B6693B269EADB8D93F7B |
55FCBBD9DEDA79A7D2E1A76B756D6FAACDAC2E95A34BA7ADC4D756FA4DF26AB3 |
E95E5C9732B41A5325BEA375A942648219A0812FF576BA16C8D70DA8B4E21BE3 |
F5F7857E24F887E1F49E34F13789EDADE097FE152783EE7C0FE07BBBDB2D3F4C |
D3F48BBF1CFC28B1B2B6D074ED735CD7B55D3E4F15F8062D4BC51A5DD787669F |
5AD46C2D61F14CD67AAF8225D68B7CE32DA78EA7D56E7E1CD9CF078A358F12EB |
DA7EB8D67656CBA86ABE27F125C69A97FA59B4D56F6C6DF52F174FA92EAB7369 |
A069B6F77ACE9BE27D4F5192E7C316BAC5C6B9A46A1A965DE0D22DACFC4B6BAF |
4D38D66F2CB4FD7B401A26849A6E9975ABEB771E19D4E017B6F796BA04BA5E83 |
67E16BEF149B5FECBD326B39354B8D11346B3BAD02F1F5AB1F630F899E0E35BD |
9CA54E70E7719BE48469E2A31AA9C62A329C6BBE4E5518CBDCA6DABA7354DBCE |
494ADD569756DD5D5AFDBAF9BF4B906ABACE87AF2788757D4F4ED4A5F15EA97D |
A8EA42FACB53F0F787F40B79752D43C3D716D15B78374BF07C5671D8E956F178 |
B74F6D3B44D5B44B39175BF0B5D691A5683A5F83B55D23C4BC4D755A641756D6 |
BA86AD25A6A70F85AF6DB53F0ECDA8A586AA749BED5934A7D4F48D32F25B4D4E |
CADDEF8EAB67A4EB7F629752BAB7B1B8B7B7D526D2B54B1B21A6DCF2B5E555E6 |
6D4E56E69395DE9793E6BF3F79464A4AD37ACDA96ADC5B2D5968BFAF4FF25B05 |
684C8D0C9F62B0BE37D15E41A6BCAB689791472DCCF6D05CBD8C96F3C50C93CF |
A6DE4D2D833889E096E6DE49AC659EDA4867973E8A852B5F4D5FDA4DA972D9A9 |
4559DAD24FDEBA6F449593926CD2D2B59D5F42B992F344D5752D1EF26B1D474C |
9AEF4ABEBAD3EE65D3757B1B8D3356D3E49ED258657B1D534DBBBAD3F51B4663 |
05ED8DCDC5A5CC72DBCD246DDCFC33F879E30F8C5E3FF057C39F0169D79A978B |
BC61ADD97863C25A5D8D95ECCF3EBDAAEACB0E9BA6D9BD9A5E5D3A9BDD4AD5E4 |
BB9B335AA4E49133476EB71E695D668D7FA8E9D2E9DABDA4B6F6A6DF5381AC21 |
D3EE6083549356D2AD2D96190C56371FDBF69E745725ACF506B76D36E7559278 |
94395D405BF4615C1D5846B39BA3CF1E78C5C97B9CD173774D38AF7637B5DDF9 |
5A8CA518A13D9DB7E8771F193E1378EBE087C44F11FC2CF1F69D269DE3DF87DA |
AEA5E05F17E88752B5D526D27C43657BAAE9B73A6477BA16A9AAE91791C0D05C |
5A40DA2EABA869B70D68EC4C905CA0B9A1A368FA715BAD3EE6DE3B9161A8CB75 |
034B23CAFB649A6B68CB94B682DDA378EC5167812E2EE37B88E58EEE3825845B |
47969A84DE31D4F52F1078A755D4B50D62F6E66BDD5F55BE379AD5F5FEA17B77 |
F6FBAD5353D4352B7D42DEDD2E6E44F7574F3C9BEE6E6E35296E278EC5D6D875 |
925B5BD95C243A76A3349A7D84E3ED3279B76B651DA25ADC3C5709FDB10417D0 |
A4D1C76C8DA7DDA42F6767749732E9B637861BA8BDEC1D1A33AB2C4D3A74DE1A |
A3518529CE1567C9AC6CE3249DD7242752736DF3529492719F3C719B76E56DF3 |
2DDA4D2BFAAEFADAD6D1F7562F789F41B08B596B3F0CEB6DABE8F66D0C4BABCF |
A0C5A7D9DF23E9DA45B6AABA158EAEB2EAFA768CD32EA51E8ADAAE95A56A7AAD |
9471DEEBFA07866EEF1F44B2E3AE2DE6B5B4B499C5DC0F24C4DC5CDDDE58CAF7 |
305D33DBDE5B5C4BABDCD9C72B5C69D6D6535B5B4FA42FD9CDAA4732899A7307 |
6616387734E59840AB706F2E9E2281D607825913E655B665810B4FE5436D6F8B |
8764CB4970173FFB2A7BAF36E22B93696F1DAC1A7CB6E920B792CA4926DD17F6 |
2A886C6F24836E9B7C2E6EA312DB233690D7D0B5B5CE9B6D377D6C3297338A9F |
B4A97F7633F864B9796A4233D29F2F27D87FDF6E767251197DCBADBEF4DDF5BE |
9BAF2B2BD8AB7D7BE669515E5BDBDCDC5F27DAF4ED5AD5925B5D3974F9AE6F66 |
B7BF49EFA79AC27BE81AE574DBFDFA55BC765A6E9368FA8DAC57D75ABF915DAC |
E09EF236B8FB5C7748B6F7720B9BDFDD59DF5CDDC6D6C2093ECD24770D646E26 |
834E8A66FECE964592DED609E797579ADAFA58D945797172EBF6ABA1F678E31B |
ED833C96B14D3DBD9A9927FB4DC5EADB2C1753BEA333ACB225A5EC6F12DB462D |
37E48E08ADA20DA935A6A61A4BDBAD3B57D2350B593FB2EEF4FB5D4BC3DF659D |
E3B48649BC48F732E9BA496468AD65B6B797549961BC37513549CAEEB4A3BF2A |
83E49272A6E779AE6E593AB28A5525153A9CAA3292493562FDB6EFAAD1DADB5F |
4E9B2BDFC999969A62D948EABAC1D62DA19E7FECDB8B6F32DAC1EC9D9844F0C2 |
B15A35CC124643DB1BCB588410F92B6F656051A3AB8E1E52170D1A4732162490 |
674445954C4F0CEAC8BE7945904CA44A914F0BC0D0CCB29699A4304B2456F234 |
F1C64ADACA561679BC959560F38EF80E4BAC4D3C524D0249BD7CC631B8152394 |
2C2D7CCCC66B8596482DCDDBCF6EEC2DA3223B216C9299E19A3B2FB5C0C96B2D |
DEC96E255B78DE69ADC74C553A718C229F2DB99DDCDAE55EEBBCE7CF2934ED15 |
072724B963F02B11AB6DF5E9B6FD36B25D5DED6DDEE75F6705D5E1D5B5EF334D |
B61A4AFF006A38B9B2816C6F35092E37D9E8963A7C5612E9525E6A322CED67A5 |
4F05BE966CACEFA4B836FA6595D3C567C49631DDC77ABA86A6DA8B785353B4F0 |
CE8915C964D4656D2F51BBBA371A869DA9EBEFAE786E1B3D2EE2DC69F6567E1F |
FECD1227F65DEC96D757377732E6D85BE83A95F5858EA564D6C0596A452EBCC9 |
6FE2BBF112417EDE1FBF98DEEADE1EB0F0F409A8DCE8DA6DDC8BAABD9D95859D |
E788A7D375E2DA96817B6F42D6069FA1BD8685ABEABA5D85C4EDA3F899A05B12 |
CD01B3D5F4586DB4FD2AFA54B8D760D3F4DB9D5669AEEE2E0696DABDD69F14D1 |
58DFE97A66AD79B5D49B84945C5A969CCDCA4D6F6A728C62ECA5193BCA51F753 |
F865CCD2D35D7D6DA6BE69FCB4B3DFD0F3463A769F6B677525AB4D6F0431DEE9 |
F3D8ADC8B872B05BACECD25C5D2CE165B59329A74B2CE89A669B334F2C9140B0 |
5B66F87753D7BC07AD693E2ED38683A8EBDE1FD5AC3C4B6B67AEF86FC2FE37D2 |
E5BED2B5182EA54F10E81E25D2FC43A4788F41692DDACB59D17C41A6DC787756 |
51AAE9BAC41736522DB6B3A13C31EAB1285B7B95BC9ADEEA0B5D405BB180BDCD |
9CB2CC67B9952E9E2B20F34F6B0476F757960F0DF46DA74F7134224D3B23505D |
9141A74DFD990CD0CD343E4491413BDD3BC90C964BF66D1A25BA854C17DAA436 |
F30B38CB16FB5982C2FEF2D5ADBC1C4C37A915ECD5287EE2A527ECE2AAC9538B |
E697BAF9A29274D49B8C69C172CA6DA46F17D1BBB6FDE4F5D15FA6BA3EB6DDBD |
96A66F8C7C5FE21F889E22D73C67E31D72F75CF13EBBAAEA5ABEB3AFEB771FDA |
5AFF0088354D6AFF0055D7352D5BC47AE4BBB5AF126BFA86A575335E6BFAC9D4 |
350BD96E23FED1D4A28A2B54AE3EB5EF6DA44BB915E068FCBB47223BF796DB30 |
40AF690496EF792DADC5DB08A38A689161B7DD3ABC11E9CB6D0F91599247B324 |
491C89E6491ABC6DF7FCBDBFBC113849D2370EA6369628F7FCCA06F8E554F9DA |
FED1CE72A8DCA6E72739BBDE6DCBE269DACB54AD6BC5E92B3691B2D95B6B6847 |
53B5D5CBDB4364F713B59DBCF717505A34D235B4173791DAC577710C058C51CF |
75158D945713222C93C7676A92B32DBC4120AD0B3D5753D3ADB56B3B0BFBCB3B |
5D7B4F8F4AD6ADEDAE25861D574C8755D335C8AC3508E3655BBB48F59D1B49D5 |
12DE60F12DFE9B6374144D6D13AE2BADDB49A7B6B7EA93575A39257EDBA4DA49 |
B3435887C53A45B58786BC41178834BB3B6C789B4BF0FEB09A8D95B5BFFC25BA |
5689723C4161A55E88A28BFE126D0F4FF0E5C0D56DE05FEDAD2ACB4497ED1736 |
96D62C9D5693F0B7C5BAF7C2EF197C5DB59FC3ABE0DF87DE22F08F847598F50F |
17F872C3C46FAB78DD35FBBD160F0FF842FB5487C49AF5A2A685AADCEA775A2E |
97776BA62037178F1C62E64878FD7FC49E22F15EA11EADE29D7F5AF126A90E93 |
A068316A5AFEA97DAC6A11687E13D074DF0AF85B458EF3519EE6E1349F0D7863 |
46D1FC39A069CB20B3D1B41D2B4DD1F4E86DB4FB1B5B78B25557CB95D8671B11 |
312C68CB23B6E0C6260D24D1F971CA8DE58458E4789A49465629B452A7CF3BC6 |
738384E304E7CB24F95AA729B8C65CCA1652705CA9B497328A6C5AD95AC9DD5F |
4BF5D6DAADFBFCECCD1D36CB4EB9B9D25351D660D32CEF7554B2D4E75B3BFBEB |
9D174E125889B599AD228238AFA0115D5CBDBD9D8DECB7F349A6DD453C168B35 |
8CB7706A96F656BA9EA36BA6DFFF006AE9D6D7D776F61AA7D965B1FED2B286E2 |
48ED6FFEC370CD3D9FDB2058EE3ECB3334B6FE6793231746354DDDDC86766760 |
A880BB162123458E35049276A46AA88BD1515554050054F1C113DADCDC35EDB4 |
53412DB47158489786EAF127139967B678AD24B158ACCC31ADC8BBBCB59D8DD4 |
1F6386EC2DD1B69BA6B954209DDCB9DB9295A31D63EF4F935B7359479DCDF2C5 |
D9A88C93CB0D0F931AC6B2247F6AB9925BBB22B2285DD0ADB1648E48E458E62B |
359A5CCF34D301BA0492DFCB8E9539D4A1009524AA37CAE8E30E8AEA0B233286 |
0AC03A13BE37DD1C8AB22B28151DC95456760AEE42A962123469246200276A46 |
ACEEDD15159988504D293BB4ACEEBDDB69D344ACA2B5FE67BCA5793D5B01B53A |
B5B0B6991E19DAF1A7B768275B88D6DA3B658EE85DC335A1B579679E795EC9ED |
EE12F6DE3B58EDEEA296D6F1AF2296C678F52BD8B4CBBD1E39B6E9D7D7DA76A5 |
756FE5C47CDBDD2ADF54B5B09BCE68CCE9F678359D493CB8E548A5FB4EE9A391 |
E1B768A8D2D15ACDB767CD78AB26DB565ABBFBB67CCD45A93692F754985EFECB |
D4FF00B33FB6BFB3AFBFB1FEDDFD97FDADF64B8FECCFED3FB3FDAFFB3BEDFE5F |
D97EDDF65FF49FB279BF68FB3FEFBCBF2FE6AA3455ED2E4B28B53D3A5D4A3F3B |
4E8EFAD24BF87C996E7CDB24B88DAEA3FB3DBEA5A34F71BE0122F930EB1A54B2 |
E7647A958BB2DD44EC9B49697B26E4F4BF577B2B2FBEDDD814D58A87002E1D42 |
B6E446200757CA332968DB72005E32AE50BC65BCB7756DFB5BAB6B7D566D6174 |
AD1A5D3D6E26BAB7D26F93559F4AF2E4B995A0D2992DF51BAD4A132410CD0409 |
7FABB5D0B646B86D45A710DF1CC16B15CDEDAD9E9F71E67DABEC10ACDA935968 |
F1477B7315BADD4735C5C5FC9636D636D7D24D0C7A95E5EDB45259451EA17B1E |
9BE64D6B6DE872DA78EA7D56E7E1CD9CF078A358F12EBDA7EB8D67656CBA86AB |
E27F125C69A97FA59B4D56F6C6DF52F174FA92EAB7369A069B6F77ACE9BE27D4 |
F5192E7C316BAC5C6B9A46A1A96F422D3736A5EE4E31838C2353F7D69BA7049C |
D7329496AA1CDD24F64A49F6FEADD4FA3BC2BF127C43F0FA4F1A789BC4F6D6F0 |
4BFF000A93C1F73E07F03DDDED969FA669FA45DF8E7E1458D95B683A76B9AE6B |
DAAE9F278AFC0316A5E28D2EEBC3B34FAD6A3616B0F8A66B3D57C112EB45BE56 |
D5759D0F5E4F10EAFA9E9DA94BE2BD52FB51D485F596A7E1EF0FE816F2EA5A87 |
87AE2DA2B6F06E97E0F8ACE3B1D2ADE2F16E9EDA7689AB6896722EB7E16BAD23 |
4AD074BF076ABA478967BC1A45B59F896D75E9A71ACDE5969FAF680344D0934D |
D32EB57D6EE3C33A9C02F6DEF2D740974BD06CFC2D7DE2936BFD97A64D6726A9 |
71A2268D6775A05E3EB56399A641756D6BA86AD25A6A70F85AF6DB53F0ECDA8A |
586AA749BED5934A7D4F48D32F25B4D4ECADDEF8EAB67A4EB7F629752BAB7B1B |
8B7B7D526D2B54B1B21A6DCF7637155312E9D1E74E9454A5ECDCD54F655AA4AA |
2A939CDE8AD2517295F92945A54AD4F798C52BB7BDF7B59B565D174F2EBD7539 |
5A28A2BC82CB3770C104A896F7915F46D6D65334D0C7711224F736705C5CD995 |
BA8A190CBA7DCCB2D84F22A1B79A7B6926B496E2D1E19E4AD4514DBBB6D24936 |
DD95ECBC95DB765B2BB6FBB6C07223C8EB1C6ACF23B2A2222967776215555541 |
66666202A80492400334E856379A24965F2627911659B6349E546CC03CBE5AE1 |
A4F2D497D8A4336368E4D474509A4D3B5ECEED3BD9AD3476B3EF7B34F5D2CF50 |
0AD8B68843A6C9777DA2DCDC69F75733DB5A6B113DD5A18B52B3D36E48B0B7BB |
78EE74A9E24B8D4F49D4F58B192CA5D4A5B5B5B4B7B2D43464BF9AEA6AFA6D94 |
7793B1B9B85B5B1B558AE7519D64D3FED91D8FDAADADAE1F4CB0D4351D2C6B1A |
8462E04B06956D7697170892CACF05A4175756EDD4AD2DEC6F66B5B5D52C7598 |
22F2F66A5A6C7A9C56573BE28E46F263D634ED2B515F25DDADE4FB4585BE658A |
4687CD80C53494938C79DA56BDA3770D5EBAF2493728AB34DA8D93B2724EC987 |
652F89ECECD5B5AD36282EFC4FA9CE86FF0057D4E5D727D46DA44D27475D6A77 |
D36F2FF50D175583C5BA85E7896CF5F7D7EFFC4B6DE21B096E10F857C1B692A5 |
9EA1ABAB5C4F75E1CF055B5E69D2E91E08D42E7C4B068FA86A36F6F0DDFF006A |
5ADFDE5B9D4AEB5DB5D3F56D535FB2D12CB55F0D5A6BDA8691E1BD093C416BA1 |
C3E1AB7D30DE78574DD42CB95F0CDCE8F0C5AFAEB779F6685743D46E34C821D0 |
74AD5AF753F10496575A3695611DEEA56B3FF6358C5FDB773AC6A5751BC6C62D |
26396C557C456DE1EBCB1A3A4DEC56FB6D62FB0DA4FA9FDAF4BD4B54D6ACACB5 |
8D32D74AD43EC11C7716D632685AA6A3A55F69CF1DE5C4DAD690D71AC7D9E68A |
1D260B49E098EA5D4AB4945F349255A2D72439145355A9C9B9C6EDCBDA72353F |
692A526945B94A9C29C64ADF9FE9FF0007D37EA5EB6B1F0D5F5ED9CD73797DE1 |
9D026FEDE49AE64B8B0F16EB0971A74575A8E9F6F1E91669E1C9D3EDB05CE89A |
143797C2C74CBDD57FB4B538EFAD6D20BDD3747C9D399618E7BD86181EFF004B |
9F4FD4E192FAE34992C0DB4173E44F6B2685AADACCBE209EE2F2EB4D945A44F3 |
C7169D6BAA3DF6957D60F7175A66556EDCEA3F6AF2B51BC8F43BA9A4FEDAB43A |
5DB697FD8FF65FB579D770EA92C7A15A68F6327977DAC5C49A2C697775F65FEC |
7874BBED3A3F0EDAE99A75D73A945EB651926DF32566F99463AD9F2A5069CE3E |
CE97B4F7A5793B4651625DD9E9B6FA068B71B35C8B5EBFBED6AE2E16EECA0874 |
0B8F0DC4BA5D9E857BA2DEF9E6F6FAFA4D6EDBC6363AD2BDA476168BA7696967 |
77757726A90583F4CD16EB509F4BD2A2D27509B57F12DE5841E1B7375069F677 |
C97575A868C16317B69E55D2CFAE25BDB26A0BA8DAD9DA3E9DAA595C09269BED |
3A64F1DE59C5A94D67A26A573A2E8FA9CB121D4753B68A4D4B4C82F34DBCD3EF |
6CAF352D22DA5D4EE3488E1D5F50D3B576D2ADADD3C49A6C71EA175E185B95B4 |
D16CE0D234DBED7A3B9D3ED5B4F8A3D234FD77C4723CD15BC5792C165A7C5717 |
B0C52C16D26AFAA3793A7C46DAC13ED56BA5236A3AC4C9A5E94BE20D5A1A8C53 |
9C6D1736DF2724391F338F22935752D27172929CA9D94B55CDCB2B1FD6BFD228 |
5D794751B879ECD34F85E79A63A7583CAF1D9AC85A68F4F824BEB9BDBA8D20DC |
969BAFAE6F6F6D9549BBFB55D4522497E3B7B6BF85AF04B6D6D2FDA6CEC6EBFB |
4B5353E65CDED9DFBFF68C7028FED29A27B8B4792EEE024963A55D49671DF4D2 |
45AA41141D6D85E686F723C2FA8F86FF00B4EEAF2C6C7C376F378544735FE8BE |
21B6D5AF6D7FB53455B3D5B56D2FE23C9ABC3772DCCDFDA6F6D35DDCEA09A3F8 |
4357F0CE8FA669174F5EE2CF4EB0B7B5736B1FF64A4373A9C57F63ACCFA7EABA |
D2C0F67E188F5ED1A4D6AD6C4EA1A7C1E27D3B51D4EC3475F0E41AB5B697A9EB |
36335F349617FAA786FA21496B252A72826E752128BE6A76972FBCD423EEC39A |
2E5C8959548A718D4BC692FBFB69E97EFF0075FF00E1EBD83DC5BDCCB1C377A7 |
346DBED21BEDC96D31823BABFBE96FB4D8628E08E3D3ACE42F3DF4570D269F78 |
D672595BDD4D1B470C7E8305BEB1FF0008FC3E227B1BA8346BCD6F54D12D3551 |
A7EA9A969536AF65A7FF006B4FA55BEA6A2286EAF92C6E2CF5C5B288C532E8D7 |
FA7C715A471DDD9DD49E71ACDA3F83F58D7BC3CD71A45CDD5ADF6B3A66A12DA2 |
6A7B617D2F55BFD326D2657BDB6121B7BE8EC7ED503584ACFE56A1A73DD6AF0D |
D5B5E59DA7A4F877C3FADEA563BECF4ABB8A5B2D32EF5777FECBF22C2D34BFEC |
7B3D75CBDCBD9E9F6D2C5FD997FA36B17A9673C2F7175A8E9CB032C5A969B6D2 |
FB997546E6E826FDA439A32A7CCE4A32E7D29C66E51949C62A6D2E6D63A494E5 |
4A551635175E9DFE5BDACD2BB6AEEDBF6BD9DDD2F4AB2D5B55B147478656BB94 |
473C1A7DCDD5FBDC344D6661B3B285639AFEF6FD638EC74F824921B4BBB86B13 |
35E5ADA2ADF5BEFEA1A2F87B5B5B69F46D3356B98B45D1F55FB7B4B199B51BCB |
EB6965FB56A935BDA59EB50697A049A4EADA5497A3508ECB4768ACB51D0ED75F |
B9F105AC7AA4E9E17F10C7A4CB70B169E977AD5A4F6BE20D1E31630EA37B14DA |
4EABA5DCDD4977E54925EC1E1B934ED265BCBA9AD0C53E9ED6ECEB73A5D96A5E |
295BFD0BA966B1D0E0BCBED3C2DFDCEBBE21D06D35DB2D3DB4BD2F5336FA619B |
5CD3AC75EF0C6B5A6E87AADCD837882D6FAEB49B2D16E215D22FF4BB7BABE97C |
2B736BA0CBEE28D3706AD4DF34B9AA5E2ADCE9C546FADD54F7538BE594972A4D |
BB230D53BFBDA6DE9D6DD1A5F24EE43ADE8F2F8721FB0DE7872446BC69AE2CB5 |
FD5F44D4744D51DE496D64B85B44916CCEE8F4D8B45D2B57B0BF9FC4B636BA85 |
9DD5EE897B0C1A8C72B70D340C7EC84892E7C992359433C2BE62FCA45C49098D |
6DA4921B98E0BA0D18B69A1F2E46B57E5ACEEBB9168977A35B68B6377A4DE326 |
9A3C59AC5CDB5BEB3697369AAE9E9A97DB6CED92E25967B9B8BBD357468B59FE |
CAB33A7496BA469B26A13BE93E1FD4F5C973741D4D745FB5C923497CB7762DA5 |
5E697716B60F65AB59CDB6E8C97D76D0B5CD9C96DA9D86973A2E910D95DCB13D |
E1B2D5745BC82CAE95CA0A5656E58B4B671959DD3F7BA4DAD2F27CEEDCD1BB69 |
7317EB7BFF00C33DADB7E1D3E55B4CB0B687489EF9F4D8D23B5D534FD32FEF2D |
52CE4D42EB4ED4AE2E355164356D505ECBA75D4C7C3D3CB1DDD8E89713BB6A3A |
C2EA5A9CB1FD92DEF7165B7B7D52F2E2EE5B6B3B6B58D5B57B35B964B2874B4B |
7496FE6B6B5BBD4EF05F22C3159C263B6BE924BEB99596CFED1A84F3ADA43D6D |
EDD584BA55F2C1FD9616F64D3ED534F8E1D734ED4EC20B6BD8BC472796D6B772 |
E99AB69716B291D9433789352D67599ADF4ED36516962B0C7F67A46FE28ECAD8 |
DB19E2D58C1F62BEBC558AD375A43652E9D8B5FECC3616DB358B0B936FAEDBDD |
69B3DC5C5C597DB86A92AEB3A858C32E9C7DD85A3C8A29B5656949392B3824A3 |
649A924AEA4D293E471572FD7AFE29793D5F97979DDDB19EDB51BB7D1E0F2A49 |
A5BCB66D3E2B7D2E2B7967BB32EA9756B6C1ADF4AB99F53B6D4EE6FE7965B392 |
E8CBA82E926DA3BA296B1E8D25BC9A9B593E9969676D2DB235A5CDEE9106A3A7 |
A5EE92469971F639E09AE2C6FF004CD345E9B9967307873511345AD691335E69 |
9ABE97756BFD996FA3F4963A0BCAFF0063D2744F178D635FBC8FC37E17D0ADAC |
8CF16A367AB5AD8FD9ACADA5B4513EB979A969BAEC7A43E8B61A069C7548754B |
0BC13C9632DAE97799F7B6D736177A96A56567358E99A46BD63631A788E1B09B |
50B5B9BABBD424B1D2B5BD29F36725F3DBE973DBDCC682EEC0DEA4D04F034460 |
86F25D3F7649FDA5EF7C5295A3AB4A4F91462F9399DF96F76E328B7CC3BF6EFE |
4B7F2D6ED5EDA6C92D3A1810B4ED63058B5C2DDDAD95DC5169EEB71751BE95A5 |
D88BDFF8935B62E6E2296DE4D5276BCD4164114D25E2C856582092FEC750E3F5 |
2D4CC377717B62AFA7EA9A6EA16C2CEE966874FB98751B3B8B09B4FD59AE5D5F |
F7E9260E93BFC8234C8357B85BC45731C1DEEB57ED777EDABCD713C61A0B486E |
6198C73C6ED0DB456D1C5616F696F670D946970041A4E9D636BE5DAE9C6DB464 |
8EECDB59DC45C56A515D4D757532DCADB5C4369711DADC40B3DA49E44D3ADAC1 |
6F38105DDC4ACF706E8C69E5FF00A74B0D84DA098656D41E3E3C645AA4E14DB4 |
D37B72CA4A1C92519C39A5CD0E5F79C149D9493A6A518B8CCB83D6EFFA77D6FA |
59F9BDED676DD185E2BF14789FC69ACF887C75E28D7758F156BFE2BD7352D7BC |
5BAE789F50BABDD5BC45AAEB7AA0BFBAD5B52BDBFBBB9D4F56D535ABFB39AEF5 |
7D5CEA979AB5EDE457726A1399227BEBDC0B44B278357BA920D4E095AC4C7A2A |
D8491340353FB4D83EA497FE7917726911E8075A6616BE75C5BDCCBA4C77D3BD |
B4B3CB36E5D247770C4F15CDBC3A8DDDEADC26E768DE2902DCB25EDBC56E91DF |
2DCDF5BD8D84AA534BB75BEB8D4525114D2BD845A5A58CB64B0EA71DB6970789 |
0DC697A64500686E6CEE7409D2FF004E9EEB54D2EC52FA582E7589D348B5D2B5 |
09AF74FD7B46974AD6B59DF630EA5FD91AAE9BF39568CA75149CFDA73C5CB99B |
539CA4E339B9C63EFD74F964AA4E1155146A4FDA4A56D23BA6974B5BA6CBB6FA |
2D2D64F4DADEBC6CD134334B0B72D148F131DB2265A36287E4952395391F7658 |
E3917A3A2B02A23AEC25F09F88AE3C3D1789A3B4BDB8D2575BB4D0752BB9A4FD |
DD9789F5D7D765D36CA71314315CEAD65E18D4E68D9CBB3B6917A6E248C470AB |
676B1E16F11F87B4EF0A6ADAE68BA8E95A678EB40B9F14F83AFAF6DA482DBC49 |
E1CB4F14F893C1375AD6912B80B79A741E2EF0778A7C3B2DCC44C6BAB681AA59 |
93E6DAC807055A3529BBBA738C5C63522DC5DB926A0D3BEAACB9E316EFA49A4E |
CDD8ABA7B3EB6F9FF49981535C2C0AEA2DDD9E3F26D9999C6089DADE26B94195 |
4F963B932C6870728AA4338F9DA354760ECAACCB1A8790AA92110BAC619C8185 |
5323A2066C0DEEAB9DCC01D1B38B4EFB3EA2752FB74571269BE6E82F02C62D64 |
D45353B2593FB40C88D2B58BE9916B1042D663CC1AC0D3C4CF1D9ADEBA669369 |
AB257F7B99E965152564F6B49BB6BF69455D6B7666559B508646695FCB896393 |
CC6115BDC481645F27F756F71340B2C9BA55C797209A15DD751E0C0597634EB6 |
B5D47C9171A92DB5D10B688D79688F63058A41782FEFAF2E6D46A3A9EDD22DDA |
C6E6DE38F44BAB8BCB34D42DB4E9EDEF749D3ADAFEC68101BB964B77B1173772 |
E92FA7E88B73A9C9A5D88BDD5F5687484BDBBB99AE2DA1FB35A8D4EF5A34FB7E |
9BA5A6A10DBDCEAED77A7C3AAE9DA96D4E8C9CA0D6BCDCD28AD5B7C8A3269AA7 |
2724ECEFCB7536B96D6738B136B5D6DFF07FAF4217D374E9B529B4BD0D35FD6E |
6BD5B68340171616BA2EA13DE5C1D3A688CBA45BDE7888DF35DC6FA8585869B6 |
3A94771773CDA5DF43752BBC9A34B52CB493790433BDE699616C6E5E2B9BBBED |
52D54DB40B71A45ABDC368F6FF0068D7E68ADDB568AE18E9FA76A1717B6B16A3 |
2E9D6970343D5CDBF63A0690DE65D2CD6B73AB6970691657D224F7B068363358 |
6B3AA691A0ECBDD4754D4ADF4CD224D2AF7C4F0EA5A6EB30A6BD63A56B46DA7D |
6F49BDD264D4E4D31FA4E856310B5D662BEB7B8B1B85D2EFFCA11C179A578775 |
2BFD4BC41A569565E228AF22D524D4F50B0D4F4DB4D41BC2D6FE18F105FF0089 |
FC113EBDA95B5BDA4568F39E87856DABC5424F99CA9DECA104EEA5172BFB5A70 |
6A4A75235B9B95ABF24129C95FE6BBFF009F67E56FF2390D4B43FECE8A6906B1 |
A1EA2F6B7D1E9D796FA6EA1F68960B892CA3BA1242CF0C306AB6293ADFE9B26A |
9A1CDAA69897BA6C9235DFF676ABE1BBFD6F1111E4758E356791D9511114B3BB |
B10AAAAAA0B333310154024920019AEB6569AFAE754D2EE6F73ACDEDD46753D4 |
6F354F0F6A96FAE789078827B769DFC59737564BA6E872D9EA4F797D7716AFAE |
586A7A9E9D6FACDF4AD60D6B7BE1EE42B92A4629A71525177BA7A59A934E29B7 |
27751E5E6BED36EC9C395BA24856379A24965F2627911659B6349E546CC03CBE |
5AE1A4F2D497D8A4336368E4D47456869B651DE4EC6E6E16D6C6D562B9D46759 |
34FF00B64763F6AB6B6B87D32C350D474B1AC6A118B812C1A55B5DA5C5C224B2 |
B3C16905D5D5BC24E568A57777AEB77B68EEEC92B377B2DDF33692B058B68843 |
A6C9777DA2DCDC69F75733DB5A6B113DD5A18B52B3D36E48B0B7BB78EE74A9E2 |
4B8D4F49D4F58B192CA5D4A5B5B5B4B7B2D43464BF9AEA6EA25F13D9D9AB6B5A |
6C505DF89F539D0DFEAFA9CBAE4FA8DB489A4E8EBAD4EFA6DE5FEA1A2EAB078B |
750BCF12D9EBEFAFDFF896DBC43612DC21F0AF836D254B3D438DD4AD2DEC6F66 |
B5B5D52C759822F2F66A5A6C7A9C56573BE28E46F263D634ED2B515F25DDADE4 |
FB4585BE658A4687CD80C5349BBE19B9D1E18B5F5D6EF3ECD0AE87A8DC699043 |
A0E95AB5EEA7E2092CAEB46D2AC23BDD4AD67FEC6B18BFB6EE758D4AEA378D8C |
5A4C72D8AAF88ADBC3D7963B5394A32F67170834DFEF1BA72E59454AF3854BC6 |
37DF924A5292D1D293972DCFEBFAFD7F13AAD5AE27BAF0E782ADAF34E9748F04 |
6A173E258347D4351B7B786EFF00B52D6FEF2DCEA575AEDAE9FAB6A9AFD96896 |
5AAF86AD35ED4348F0DE849E20B5D0E1F0D5BE986F3C2BA6EA165CADB58F86AF |
AF6CE6B9BCBEF0CE8137F6F24D7325C5878B7584B8D3A2BAD474FB78F48B34F0 |
E4E9F6D82E744D0A1BCBE163A65EEABFDA5A9C77D6B6905EE9BA3D1D26F62B7D |
B6B17D86D27D4FED7A5EA5AA6B56565AC6996BA56A1F608E3B8B6B19342D5351 |
D2AFB4E78EF2E26D6B486B8D63ECF3450E9305A4F04C752C2A752B29B84A4954 |
B4692719D9DFD9C2945C79A3C951537CAED187B371E6718D49F2B9B3FE0FE3F7 |
9ABA732C31CF7B0C303DFE973E9FA9C325F5C6932581B682E7C89ED64D0B55B5 |
997C413DC5E5D69B28B489E78E2D3AD7547BED2AFAC1EE2EB4C9EEECF4DB7D03 |
45B8D9AE45AF5FDF6B57170B7765043A05C786E25D2ECF42BDD16F7CF37B7D7D |
26B76DE31B1D695ED23B0B45D3B4B4B3BBBABB935482C16E751FB5795A8DE47A |
1DD4D27F6D5A1D2EDB4BFEC7FB2FDABCEBB8754963D0AD347B193CBBED62E24D |
1634BBBAFB2FF63C3A5DF69D1F876D74CD3AEACC7796716A5359E89A95CE8BA3 |
EA72C48751D4EDA29352D320BCD36F34FBDB2BCD4B48B69753B8D2238757D434 |
ED5DB4AB6B74F1269B1C7A85D78616E56D345B384A2FDDE656768ABF2A69C9A9 |
73D9B504B4E493752F15F134AD1418135ADCDBC76B2CF6F3C115F40D75652CD0 |
C91C7796C9737164F716AEEAAB7102DE59DDDA34D1178D6E6D6E202C25825458 |
2BA4D1FC55A9E876CF69656BE1B9E29276B867D63C1DE10F10DC891E38A22A97 |
BAFE87A9DE45005850ADAC53A5B248659521596799E4D5FF008587AFFF00D03F |
C0DFF86C3E1AFF00F32542587697354AD19595D2A309A4FADA4EBC1B5D55E2AD |
B6B6BB5AF65F7FFC0386A28AD3D266B0B6D4F4AB9D413CFB38353B59B50B692C |
DAF2192C22B8824990DB47AA6932DEF9D109E392CD752D25A450B1A6A96AD319 |
EDB28ABB4AE95DA4DBD95DA57F95EFE9AEC3197DA81BE834B84D9E9F6A74BD3C |
E9FE758DA25ACFA88FED0BFBF5BCD51D0E2F35055BE1602ECAA3B69F65610C81 |
E481A6973E9CE103B88D99A30CC119D423B264ED6745791518AE0B2891C29C80 |
EC06E2DA24DB776EEF457F4565AADF45BF5DC02AF69BAA6A7A35EC3A968FA8DF |
695A8DB799F67BFD36EEE2C6F6DFCE8A4B79BC9BAB59229E2F360965864D922E |
F8A49236CA3B298ACAF2EB4EBCB4D42C6E25B4BEB0B982F2CEEA0731CF6D756B |
2A4F6F710BAF292C3322491B8E55D411C8A6CD7573711DAC53DC4F3C563035AD |
94534D2491D9DB3DCDC5EBDBDAA3B32DBC0D79797776D0C41236B9BAB89CA996 |
795D9A7CB69294A334EEACAD669C5C5A9295D3F89E8B46A366F99F28414569E8 |
F359DBEA76925FE95FDB76664315C6962E6E6CE5BA8E746808B5BBB4CCB6F7D1 |
1904F612B43796C97B15B9BDD3F52B3F3EC2E74A7B9B1B0D0751F0CEA1E138ED |
FC5707896DEE5FC497577AD5AEB1A5D8D859EA5A7EA7E139F4292E934711DCEA |
535A5FCF7773A6AEB56575A5FD8E3BA5B5B9B9829A8271E6738C7E2566AA5EE9 |
45A578C1C6F3BBE5BCBEC4B9F9572B91F239AAE92D7505BBB0D56C4E9DA51D4E |
F60D3045AACDFD93A6C763A378774EBB9EFAC6D6DE682DECFF00B57586B2D226 |
6D52DA587C43A95CE9F71A6C726A773E29D4E0BDE6EAF4D2594F14932C7F62BA |
4FECDB786CAD61965B29E28ACA48750BFB8BCBCD4A7BA82FA7BA82D6E9AD61B7 |
96CA79750BF6B76D22D6CACB4F9C8371BD9F74D3B6A9C65195B9938DF95B49FC |
49C9382BEC1B420B7B0B06B94D3E0F10DAD878A120B9D55B4ED6ADF439EDE086 |
492CB4F87568AFB48BE783C511C37F7371A75FE9BA56B56367A45ADCE937D673 |
5E6B56F0F43A52E97A4C02DFC53A76957BA4E9900D56486DFCFD17C59AD4DE3B |
F0DE991699696377A86992DEBC1E17B612789AC2EA5D25FC2DF6EB7B953A9EA1 |
0F893C3CFA879B57A4CBABEAF73E05B2D32DB517F2757D43544D706AB63A4C73 |
DCA782747D1EE34DB6D3FC737FA759EA67453A44FA5D98F86D6FAEDEDA1D67C3 |
5E1ED55B4FB8D42FBC2369A6F451A89394D452953829463CB19A94B9946316A5 |
28B947DA3A72E597B5F76328B8BA6E5113FEBFAFF86F535A1D3747B9B71A7DEC |
DE0CD062D016C146AFA04DABEB1ACEBBAEB58DF0D520D1A64D4A76D5B5556B6B |
52F6FE6DBF8146B9A569C7C3DAEF8774BF197DBFC4BD96BFE2DD4EDACADADD9B |
4E9754D47ED7ADEB17F75A5D8A4BA969FABEA1E29D5ECBC4FAAE8FA5EA4345B3 |
D7752D17C4D7B71169DE46A1AB69965A3693AD785F59BED2FC41F6AD3FCA2C6E |
639AF75E6F0DD95BE9DA55CD8DA5ACB6DAADFB481EC6DB53D3DEDACEE9259E43 |
E24D4F579EC2CB51BDB1D374F8E43AA2DCEA3A2693A4E95A4ECB5E8ED6EB50D4 |
56CB4A86CE4BBD574D97C47E1F85B4DFEC8F11CDA835D4171F6736AF690DE4BA |
EDFD8DFCAB2596B76FA818AF2FF53F0D8D09B4E1E1DD2A5B9F6B07554236A578 |
54A89C14A929F2D551AAA1BFEEE9DE30E574EA3845C61CD49295695592CE6AF7 |
BEABB3B69F83DF6B5FCF456475F6DAD5D5BDF5BEA534A2E6F2FF00499F5ED3AE |
B5FD3D3503E2A79EE9AC6E0DA43AA69D71A4EA37C5CDFDE5E4BA89B482DE5B59 |
1E290DEA08E297509AC44B2DA49A75C699AD45AD5D096D24BFB8B3B7B0B548EF |
E06D31745BEB497559AE20BBB79C453DFEAF2235ADBC929867B9B6176FC8DCDE |
EBDAFDDDB6972DFDEC96CA6CF4FF000E1F175C4BA66A9FD9570E93E8096C64BF |
BB8B4DD3ADB40D4B4ED662BDBC9351D3F4F9EE575317971648BA842FB7D4E26B |
B9EDF50B9B77BAD3FCD90450595DC38DF2ADB46EB1DCC3348D72D1CD125B9B3B |
A7FB57F68CB6F1C13AA43713FAB4F16A697349284A51E495451826D2BCE3EFCD |
BE6F76524EEE4E0A2EC9A539E2E16BE9AA4EF677D76E8BCD69A25AEFB1EA5E01 |
D074DF146B325ABCB3E8D25A585BEB89AB41ACDB59DCE9DA858DD0D421F146A9 |
65258DB6A5A768DA3D969F1C05965984BAE43A5D8DEEB9A0C7AC5B2DA5CF0E6B |
71789FC4AFA9587852DE79C35CC5E09F87FE1AB0B8BED2B549F5D5F117882C74 |
6D23C3FE245D5A4B8B1B0D467D33C2FA4F8574BD42DF55D523D7A09F48BDBBF1 |
869F3C7A87944A610D750CB6505CC5219E1BB82D22BF2C61B88E768D6E25B07B |
39A49E35B8BBD67625DC223BC6B3B5B8B0D6ADAFE4B4D56E5AEB1148FA7E896D |
14775059DE6997B60355B7D3A4BFD6B5B6B74B19347D67C47369DA05EE81A1DF |
2AEB2D737506A3247A4476325AEA935AEA125CEBB068F11C9285DC62D49AE682 |
8B9D5939371A7CBCA9A8D2D6A5D5E7292709A4EEAA9CBDAEFD6F65A5AFA75E8B |
D6EAFD3D36EACFC3D69AA6AADA1AE97A8BC1E22F152C02E05CDD412F872CA3F1 |
04D69A33C0165D47578CE9DA55EDDE9FAF68B141068165736FAB6A1E2896EF51 |
82F7C398F3C30683789A46BB7366D6D06ADFD9FAF41A7D9DAC9ACD90FB468C75 |
182D753D434F8E13789736EFA5D89B6BF9EDC5F5A6A696EC74AD5DAE758ABE17 |
F168D127D13CBD22FEF259D6C34AB1D4358F1178766BAF0DF8CB4FF11E8F77A8 |
6A9E4EB1A5DD69FE1BF0E6ABA36ABAEC5A26993CBFD970EBBAE59F8A20BAD5AE |
BC32B6373C4DDCFA5DB5EE9B61A858DB5EC96D733787EF75AD3A0B28EC75458B |
51BCB679F40F11BD86AF75AE45AA69D34573A4EB3E20D3424D6D3358C9F6AB0D |
2A1FB45CB174E31564A32BEBCD1A9084799537CB7E57CF2939ABDDA57BA527AB |
4B91B7D77F2BDB5D77D124BF5B2D11EB52787E78BC41AB4D26B1AEDACDA6685A |
2F8ED756D4F4B9B48D6EEAD7577F0C6A097C91EA7AA5B2AEA12DAF8963D57469 |
D757947894C56B368B75730EA76D78B99A5CB3E9302EA36F6D2EA76D692C5A94 |
EB3E9AFAAF84F519E04D2ADBFB3F56B1BFB6B38E097488FC417B6777A907BE74 |
BDD534FB7D28598BB8359B875C5BC5E2CD5BFE29FF00075AE9371E23996E0C30 |
F88AC858E9D7F79A8CA748B058E39B4E8B47D52EEDB41BEB286CB55D42FED35D |
896F7FB2349D32CC68D6ED931453E89AA79B25CD87DAF4796CEFE14B6D49EEE0 |
BC9E3B8B4963B7B4D57C39732C6B2AC7299E49EDF54B27B74B6B88E2BD875348 |
207EA4F5E64BDDE6769AF6895EEFFE7E24EE95BCDED7766E50D5BFA5FA7F5D7A |
E915EFF696A5AB4B1CFF00F131D5AE2E92CD8D97D9EF24D42F5592D15E3974EF |
362D4EEAF2550EF7D0BDCCBAADCCAF7B25C5DDC5D3CF2BFC4C344875386D0FD9 |
FC690DC68BA60B5967D455FEC52A69B0E9573A9BD85DC367AA7D8747BEB7BDB1 |
D1B4EBA874CB94B44D26EE48B50D2D7EC3AB3EFB75C430DBC7E1BFEC5BAD12C6 |
0B6D6A28609626B76B25B0D113EDB671FF00A2E99E5490DAC77990F2DC7882FF |
00509A5BD78EF74FD3F4F6CBA9DC25D5D4DAA69D34771ADE92F05D477308B8BE |
69755D256E63D61AF755875A9AD2F2F66316AF2EAB633DB4D31B9963D1352D35 |
2F6D248A27EF45C5BB7338B6E51E64FF00BAF9E36BB6F95F345CAFAC55D305A3 |
F4ECFF001D1FE4FE6709E21D16F2C5DB6C9A7DB5C34D79731DEDBEB5637A7CF6 |
7D4349BADBA847737AB042965663519618A383658D9DBCFA53DE5B5E5A6A16DC |
B691A2C37DAC3681AE6A6341D35B56D28EA3AB4E41D07475BCCDA4DACDFB58D8 |
5CDF416310BB8EF7ECBA3E8FA96A9269F0CB696DA4DFDF436E8BEF1E20D734BD |
73FB4AEA1B6B05B2BEF1DAEB575A2D8D8CD6D34B6904B71059CD65A86A7AA789 |
1A0BCD2A0BAD720BBBAD52FF0053F101D47551AA6B1A9F8F3517B992C7C6B55B |
2D226BCD3353B8678B4DB7768F58BBB785356BCFB1A2DBAD9DC470BDE47677D7 |
7247342F6516A17F135D2DCDAB5F07B18AEC5BF8D8FC24149578DA494A329D39 |
5450A5284D3A7525271872FBBCD09D56DC63EC69B4D5AD23784AEB9755BABDB5 |
4D6AB77EB6DFDE3F76FE0AFEC4BFB3EF8CFF0065EF11FED21A678AF4CF881E34 |
F0BFC52F85BA959FC10D1BC556FE00F86DA4F8A75FF107C6CD13E1DC1E24D5BE |
3C780EC3C49F107C11F13AFE6F046B1E15F02F8120F1B78A6FFC29E1FF001F69 |
7F10FC6FE16D6BC55E09BCB8FC2DF11D8E8AFE20D63CAB9B2B1F0ADCE97ADEA3 |
A35B784B4BF116B9A6DAEA10586A171A2E8AB7BE34FF008442F6412DE5B4579A |
9EB9693CD636163A86A9A8E83A3EA8647F095D7A0F883E2F697E1BBCF19689E0 |
F3AF78D3C35A97C61F0F7C49F0378A3E2CE9BE08D57C7BFF00088F826CFE25F8 |
7BC11A4F8E2CAE34CF1A409A86B5E1BF19E93AB78BBC31A4F8B26F025EDF58C7 |
A7EB5A278BA1D3FC35AA685E33141A73DAE937C2CF59B7B8974AD6DF57D46E35 |
CD2E58AFF5B8B50BA1A2EA9A516D1E3BBD0ACE0BAB9D02C755B2BC9F52BBBC96 |
D753D420F1069B65AC0B4D079F1D8BA38951A54A95E706E55AD78CA106A8C396 |
7384147D973549370949C21CABDA394A318C9C22E376DE8EDCB7D5DFDE7A26F7 |
F95DDDDBBAE6E3827B5BA1BDA18AE2DAEFCB114973E593736F3C28F19960950D |
BAAB3EFF00B53CF6D0948A630DD79B1E2B467B19AE5E1D33470753B459757D46 |
CE4161A4C1AA9B38E049EE6EB55FECFBCD4AEAD2DADB48D3A2D46E6D6FF52974 |
FD088D5E581D63FED1BFBA9EC6F96D6D35633E8563AE7F6B6932D859DD5FDBEA |
90CFE1A94DD45A9CBAB6851E9F796FA4ACACF67AA69CA350B6D52CC69B26B134 |
5A769BA9AD96A5A7D79E14FED19DAD6496EED3EDD692412DD69F2C37FA82CB0C |
D7166F3C3226B31DB5F6A51AE6E2CFED77D6325EDC030497FA7DB8B98FC35087 |
2AF89A94D2E552B4E29BE67776E4A9CD186F1528C5F23694BDD9EDAFFC1B68FF |
001FCFFE09D6693A65B4DA6F87F5A82FF4AB6BE8649AC62B2F10699A7BE9D2DD |
DBEAB6B0C3E41BFD6752B0BBB39575D3A8EA1AA78CB4BF0CF856DEF2CBFB262B |
EBC44BD54B30ADD4F268BE15D1F52D3AE469939D46EA5BCB5F0FDAE87732E897 |
9E23BBB0D4E4BBF105C691A56B1A1CB6D7F717768FE3AB5D3B505835D1A34305 |
F69D25B43370F04B2C1E759EF433DD0B4946AA91EA6F796767A7A4F3410C48CF |
02269F7223D3F519AE0595CDEDB5A58D9358CB027F68585E75165606EE0B5B9D |
6ED63D174FF098B7D26EA5D2F4F8B4CD475ED45EE757D634AB3FF848248A7D2E |
0D76F619EF219358D45A082D7C3DA3DA5F5BD9F89753B1B3D2751ECA5352518C |
28CFE054EAB8D469C9C791D45CCA4D53954A74A324A31B28C1D38C6A4A9E89AD |
EEFADD69F77DCDFE4F43B1D4B4BF10786745FF008486D3C322C6D2F755F0EC9E |
18F1A5ED90BB8BC456F25BF897CFB6874CD4F495B8D46DBC597DA543AEE996DA |
DE902EEC344B4D363D72EEF46BB6BA96B1C34326A7A5E8FACA0BFF00EC2D5F46 |
D77C3D79736B777FA9E95E20B3D6BC3A752D274FB6D2B4F176F3CF7D00D46FEF |
EF2F6E2CED7FE11A6D224B386F34E9753B1B0D5EEDC78C6ECE869A5682D75A15 |
AFF6BDEDE2DB69FAFEB49636773AE5BCD646DA086EE38EC2D6C60D001D0CDC5C |
5D4DE20BD924F115CEA5AE6A7A4EAED6369CFF0089B5BBFF00116A66E2FA3D11 |
1E7909B11A543696769636125C5C1B3D3229159674D374E824874FD2AD75B9A6 |
BBD1345B0D334981ECF4EB286D96B135E9C94650A952A3549C62927ECE152B29 |
AA8E0D7272B4DF22BD29B94392329F3F2D4A4946DD2DAFCECB6BFE7BEFD2DA3D |
48EFA3D53428F4967F07E8D6DA4CB169EFAE5E69B64358D4935AD474D91C674C |
F0F4FE21BBB6D2FF00B1E5D5A3D5BEC6750D2B4B7D6743BAD5AF64F1168DE1FB |
BE0AA7B86B66914DA433C11082D55D2E2E23BA91AE52DA14BD99658AD6CD560B |
8BC59E7B5B7313C9676D243692DD5F4B03DEDC415E5D5A8EA34E566E2947995F |
58C748A49DACA31B25A5DEF26DBD2C2B42FB5037D069709B3D3ED4E97A79D3FC |
EB1B44B59F511FDA17F7EB79AA3A1C5E6A0AB7C2C05D95476D3ECAC21903C903 |
4D2BF499AC2DB53D2AE7504F3ECE0D4ED66D42DA4B36BC864B08AE20926436D1 |
EA9A4CB7BE744278E4B35D4B4969142C69AA5AB4C67B6CE7081DC46CCD186608 |
CEA11D93276B3A2BC8A8C57059448E14E407603719D545DA4BDE76946EAF65CB |
24EDEBD7A34D3DDA01B451566CAF2EB4EBCB4D42C6E25B4BEB0B982F2CEEA073 |
1CF6D756B2A4F6F710BAF292C3322491B8E55D411C8A956BABB695D5DA576975 |
69369376D95D5FBADC0974DD5353D1AF61D4B47D46FB4AD46DBCCFB3DFE9B777 |
1637B6FE74525BCDE4DD5AC914F179B04B2C326C9177C52491B651D94D1A9E6B |
AB9B88ED629EE279E2B181AD6CA29A69248ECED9EE6E2F5EDED51D996DE06BCB |
CBBBB6862091B5CDD5C4E54CB3CAED73479ACEDF53B492FF004AFEDBB33218AE |
34B17373672DD473A34045ADDDA665B7BE88C827B095A1BCB64BD8ADCDEE9FA9 |
59F9F61734BDE71873DA3CCBE2E6E58B9F2A94B962A6FA2BB8C5CA4A2BDD6ED1 |
03328AE967B9B1B0D0751F0CEA1E138EDFC5707896DEE5FC497577AD5AEB1A5D |
8D859EA5A7EA7E139F4292E934711DCEA535A5FCF7773A6AEB56575A5FD8E3BA |
5B5B9B982B9AA528F2B4B993764DA4A49C5F584B9A31F7A3D6D78F693027B8B8 |
92EA459655815960B5B702DED6DACE331D9DB436913345690C113CEF1408F757 |
4E8D737D72D35EDECD7179713CF24153DC4D1CF22BC56B059AAC16B098ADDAE5 |
A3792DEDA1825BA63777175289EFA58DEF6E95255B64B9B8992CADECECD60B48 |
20A4F77ADF57AEBAF9EBAEBE7AF700A28AB725F5C4B656BA7BF91F66B39EEEE6 |
0D9696915C79B7CB6A97067BC8E04BCBB4DB656E218AEA79A2B5C486D5213717 |
06515ACEEDA76F76C934DDD68DDD72AE5E6774A4EE946D66E5106C30452C1792 |
BDEDB5B496D1472436D325E34FA83C971142D059B5BDA4F6C92C31C8F7721BFB |
8B180DBDBCAB0CD2DDB416B35AD26EB4EB4BD49756D2FF00B62C1A39E1B8B35B |
D9F4EB80B3C4F12DCD95EC2B2ADBDF5A330B8B37BBB4D46C05C4682FB4DBFB63 |
25B494E1B5B9B88EEA582DE79E2B1816EAF658619248ECED9EE6DEC92E2E9D15 |
96DE06BCBCB4B459A5291B5CDD5BC018CB3C48D0552938B8494629C755CD1535 |
2B49EB28CF9A12FE5B72F2B51B34DF33605683416B0CFA9DA866D54C4B3C5A75 |
FE9B2CF059BBDB5D44EFA935BDFE9897F73A7CDA6C37862B69A1D1EF2179EDAF |
2E9A25B3B8D3AE68929B14056F33739662C0A1421362AA6C0CACAC242EC6460E |
19004428CD236A53B767E7D6D6774AFA5F5DECDA6938BEE13CD7573711DAC53D |
C4F3C563035AD94534D2491D9DB3DCDC5EBDBDAA3B32DBC0D79797776D0C4123 |
6B9BAB89CA996795D8BABAB9BEB9B8BDBDB89EF2F2F279AEAEEEEEA692E2E6EA |
E6E246967B8B89E5679679E795DE59A695DA49246677666624C14E550C482EA8 |
36BB6E70E412A8CCA8362BB6E91808D090103B2991923DCEA5DBD2EF5B6EF4D1 |
596FA68B45D97900DA2BD9FE03683F033C45F10EC34FFDA27C7FE35F86FF000C |
4E9BE219753F117C3EF06DB78E7C531EA70786F59B9F0DDBD86877DAAE8F6534 |
577E268346B1BDFB45F40A6CEEE606EB4E4F3354B1F21B996090411C16F144B6 |
F1490B5C20B859F5026EAE674BCBC8E6BBBB821B9104D159F97622DED45BDA5B |
968A5BC6BBBDBBB74DAA70A8E54ED3734A2AA465517238A6E74E2DCA9A95DF23 |
9A8F328C9ABAE5E657D5AD74B7476D7B3D9F9DB62B574DA34775068FE24D5AD7 |
5DD234F10DB5A68F75A25F4A64D43C476BAE4930922D3F4C7B2BBB4BD8B4992C |
22D567BBBC7B51A35F41A46A3A7DC26B51696E9E8DF163E08DFF00C25F0C7C13 |
F14DE7C40F85DE3583E377C348FE26E9FA5FC3CF172F89B5AF015AC9E22D73C3 |
8DE12F89D60B6568DE12F1CC13E872DF5C787A57BA923D36F2C2F44EF6F776F2 |
4BE2AAA5C900A8215DBE77441844676019D954B15521101DF23ED8E35691954D |
384E854E5A906A6A1A454ACD3AB4AF4E57837AAE78CF96FAFC124AED05EEAEBF |
2ECF5DCEFBC11E2AD37C3F75AC47AC43AEDCE97E20D22F34FD4AD7C37AA693E1 |
3BB9E5B9334315A5D6B737863C55743C2CD1DC35CEB7A169BA7D91D68C3696E2 |
5B59AC34FD42DA3B5B9BD7D5448D347676C712B5D24972212D711AEAD2B5BDAD |
CDF4B21B2B9B892CEE35316EB6F247A7A4725E0D2D25BA15C65ADC7D9A61214F |
35060BC0CD8867D8CB2C51DCA6D6135BF9F1C524D0103CD54DAAF1395953BBD7 |
743D77C07E2FD5FC37E27D21B48F13F87755D5FC2FA9C7A7FF00665D5CD8F897 |
4C786CF50B55B7D3AF6F743BF5B39D9EC15F4F74B6BE8676BB8A77BADAE9DD85 |
AF3E4A6A529FB3A35E9B7652B454E526E12A9AAFDF4AF28C5CE945CA153F7949 |
B5294C96BE6D35FF00052F2EAD26F55A3D8B8BACDA5EEA4978D67A7E9AD7778F |
AADCDA69F1B695E1882D351325E87B3B385A4B4B73A1DF18B45B2172D2B17860 |
85E7376A92584367707539229E60A754B28620D776F16A9224F0472BDD5BB5D5 |
83695F6530DC440EA36CB1CD0DD5CDC476CB68F652BA1B6A76F72B1C324D7169 |
3EADA4BCE0DE47653335C18EDCDA5EBCB2DE0B1FECBFB5CC910792FF0055D167 |
B8B5FB5DB9BC8B58FB26A5A44749B542AD3CAD76D1D9EA535C0F23C948A2B982 |
7B34864B9BC86280CAED25D410C3AA5CDAFD9FCB913501A2B5D3CF3B5A77AC47 |
27B3E7A91942FCD28BA6A3EECACA151B94D25C8E14F96B2739A7524A694E5272 |
9E5DECB5D7AF55BAF9DF6D168AD7495BA5D38D9ABEC9F53D26D606BED2E38AF3 |
538A6BCB0D3CBC97512EA81B4FB754BD0B2096DA23A5C10CB63A4E9F0892259E |
CA4D3D67D7358B996FAD2E3FB56EE71A2E87E11B8B5BFB4F125C5E6B3A635842 |
935B8D32F356487FB262D2EEA7BA92DEC348F3DEDEFAEED61B3D7359B7BB7D62 |
ED1DACEC6E94EA769A943026A77B7906A0F069FAF5A1B5060D4FCB4F0DB42969 |
7B2DAEA10DF5FF00D835CD4A1D2B5DB1921B7D596D974647978FD2EF351D0EEE |
D355B2FED3B4F136952595E786F57D07589ED753D2B55B3D42C5F4BD6CDCD8DC |
4F7B049A704817C3ADA6B692CD79369DA9C3A85C43642CB51789AD3A51549453 |
51E7E77CB3538BF7D5A519466D737B552A4ED08D6829C633E4942102293D6FBD |
ADAE8ED6D9AF4B3DECECF7BB34EF6FEDD6C2C05CFF00616A115FE9F2C32C56D3 |
788C8F0D6A235DD42D1EDF64ED6BA4BEA31E8B6E9A85BDDE916FE33D1ACB49D7 |
74A8967B7D64B699A0DAFF008986AF7B7F2EA515C8BE7BEBB0FA879CF36A8DA9 |
DE6A53DEB6AB2DA4D7D2C525BDAFF6CF993DD8377770B5EA5DDAEA0C58DC5BE1 |
3C5E20F15EB9ACDD31D4FC67ADEA3FDABE27D7B5369A7D5B5FD462B3D3F50F16 |
F8AF5DB8BAB87BEBE97CAB1B1D535BD775ABC8A4BBB6B7B4B8BBD55AD7CCBDB6 |
92ABADC4A90CFAABDBDC436D6E596D239121BB8AD2F6DE59ACA5F32CED27105B |
ACEF125AC13E62B4966B6824B7B6B4BA467E3A7889394A552339AD20DA508537 |
ECEF193AB5634E5AC22A35213A3CD38F2C946D17729AD92D3AEBBEBD1276DF67 |
7DFAEA77362F77A7DF6A36973A95F5B59DDC80BD8E9904B7D096B5D288D2F558 |
B418C5BC491C1286D121BF717E74D8F52B9C8D41AC66B6D63B0BEF13699AE788 |
2E35BD4D56F5F5CB7F0FDD6B325DDD788EEB52D575A8346D3EF754D6E1D5B53D |
47C517975E30F16788D4A5EEBFE25034CFB5EB76F7F3E87E19B27D222B0E0637 |
B4D406A975E7595CC3E75935ADBDBAEA574C25D5AF74E92D74AB24F1047AB490 |
CFA3437FA9D8CF3EBF7274C274E9A1D1F5EBFBABE9AFF55E87C2B797D169DE2E |
78356D22CAEAE7C3F6F34ED77269F0DE5D462E24B0BF8F49D46CF7DDDB24F71A |
DDDBEAA3419B4FB7BAD162BC1A8DCDE5F47A95B27AD87AB79538C3584E55AB46 |
72BD4505FBDBC6FCF184B9A69C6D15EFA973B724A09E4D757BAE58FE5AF75A6B |
AEDE4EE763697761ABD92D85A69373A56B5797DAC5C5B69B15BFDB86A3F63945 |
D58585A5DEA3A8DE6A905F186F3C416D69A4E9979A87F6F5B69BE16B7B2D3B50 |
D51EE2EEDB47C4563A66996570BAC5FDECD73A16B7A7F87FEC9258E8AB77A768 |
5A15CEA50EAD3FD8EC6FAE9AF9F41B387419B486BDD5A1595DAEBC3BA35E5DE9 |
DA15ADCD8E469F756515E58C37D6F77A46B9A55F3F9FA5DD5E59F862EBCEB18E |
CB4F86FB56F10437163AEE8B0E9FAEE8F2EA37C8BAB2E99226BBAB9D22EBC18B |
02BDD54B6D274FBFBEB15B1BD9F4DD4EF6F6C7481A535BCB770DDFDB25FB41D4 |
ADAE6C34779B509A6BC83517BCD223B49753D2AD6FE04D30EB773757BA845EAA |
94A50B251936B920DB8C1ABC6D774F483777754DB83E65AD3F779E59DB5EABAB |
DEDA79EFEB2D77E97B1D64497FE24B88357B5B0BDB5D7CDA5A5D78397C3B7ECF |
FDA9A5F876D2FAC6196DB4A97566D6E67D2EEE6F0F68F6FAAE976D7B18D234BD |
475AB86D6B5BD0B53787995BCF0ADBF86E312C9AE5CF8B6DCDEDCEB2F75689A7 |
E97A46963EC3268C6CA5B4D42FE1F10DC5F411EB8BAF7FC4B34EFB05F59E9274 |
5BD36EFABD85E36E75B4B7779D7FB7DA52975A55BEA53DE5A5BCAF657B6167A1 |
6876F716705C5FC90416CB72D6FAAD845A9DD5B5DE950CFA3DA5C594496FA85E |
EADD91711FD8CDDC97DA669BA4EA7A05D5B2D9E99E25934F5B7D564D52395F55 |
D3F4FB1D260D367F10EA92786E7D7A0BF9A5D50C335FC367A2DA6B769E0D91B9 |
5E568BBCED272E682E56E76B49AE6A76973AD2A5A6F922E09B9BF682B697E9B6 |
8EEF4E8B7E97D34D75DB43C7B56F0EAADC473DB6930B44CB6A64B5B792F1CDCD |
EDC5EAB5CC11CAAE91595A436B13AFDAE5B7B7B78D272AB179A623699BA8EA76 |
69A74515A5869BA3CAB62FA2DD5A69373AEADF5FB0D4755D564D4FC43FDAF3DD |
42756B417FA7F8781D2E1D3B4BB9D1B4E302587F693EA5AADCF7DE28B6BB4D26 |
D9AC753D1FCBD46D1FFB46394DE4373A4F99AB5FE96D677D35E5A5B69EB3CB67 |
6B69ABC4FA6DC6B16F2E95ADDA426EACB5FB5BED26DB97F146A36D7F7F71A8A1 |
86E10DB889EDF4F9745B1D02DE18ED2D608618342D0ECC8B5B79E5B7B78E678A |
DF4C5FED2F26E45DC5732C7771F838DC3D3A52AD3A29517C91BB9518A4D55F69 |
19CA1ECD46A4542316AA271F67EF46528DD4A72DA126ED7D757B3ED6DEEEDADF |
4D6EEDBF438FBB2B7514B741FED12AFDA44F2497134DF37DAED247BAB5B68ACA |
D0585BDCCF7B3344B79BA16F32E23023BC58BCD8E236E5E7533DCA4096D71235 |
E595840F210BA7B5BE9D6D34064B26B58AE6F268EC359B95BEB88F65CBDD241A |
ACF6D0C57F73569967D4E5985B476ED6BE6ACF6EFA84770A2F89BCBC970B7D10 |
49238EE4C8B716B040F6B3CCAD0C1216BE82492A4A2D5A355B49AD2133C3299E |
3126A0AC90DA45F6A8E1BA9EE3CBB7B9BBBC940468EDEDC5B7DAED2D5ADBC959 |
981F1AAAFDE546A70938C9479AD3A72AAE378DE0A5CADB726A3513FDE249BE6E |
57366CB65A35E5A3B7DD7F974FC0DC4D7EE758D527BFD5EE9E68AE5ECAEF5DBA |
9AC60BB6B7B6B692DAC8C163A4C173A5E9F79690DBADADA689A3482C6C3498CC |
161A7CBA45B5BB6A4AD5B68F53BE5974DF0F5C9D4755D4E6B8B6F0ED9C2EDE4D |
ADDDCACBA343E1A5B8B8BDBDD5D257967B1B8B2B9D1B52F2AD6C2DE75BFB97D4 |
664D3F31A6862B0DB2DCDCCD1B7DA92C34DDD3C691C17691C9F6A7BC36F12DDC |
76B7F6EB1CB671C714325FDAB5C46DE5F982558AE6D6382EFED24BDEB065DC9A |
9DE627BE8AE26926BABCF22DAE2DEFACAF74D9EEF48F26DAF6D2E4DD4D6FA80B |
F8EC85F417DAFB4BF22AB5233B2751CA4E32973CAF2769385682726DB8297BD2 |
5CD3A8A16A31A6ADBD97976FD53FBB4ED7D6F9B2849920312C6ACB1BA492192D |
EDFCDFB3DBC5236EB6F30EC9132F1473EE5FED2DB19583EDFF006AF36B3346CA |
7116C7FDD0528EDE5ED48CA4A5924F31DA499F64BB96548E36F35562D8F1AC33 |
DBB5CBB84802968E19199364212482D4BEA120B857511DD2A188CA52E04BBC45 |
1C4159638A3152B864EE94927EF68DB8A4AF18A4D27D5ABDE4DFBCEF194AF2F7 |
9D05145159805598608A582F257BDB6B692DA28E486DA64BC69F50792E2285A0 |
B36B7B49ED92586391EEE437F716301B7B795619A5BB682D667497D712D95AE9 |
EFE47D9ACE7BBB98365A5A4571E6DF2DAA5C19EF23812F2ED36D95B8862BA9E6 |
8AD7121B5484DC5C196386D6E6E23BA960B79E78AC605BABD961864923B3B67B |
9B7B24B8BA74565B781AF2F2D2D16694A46D73756F00632CF1235697F7539AE5 |
FB49AB3E4F79DA327A42577177B3515294526E005CD26EB4EB4BD49756D2FF00 |
B62C1A39E1B8B35BD9F4EB80B3C4F12DCD95EC2B2ADBDF5A330B8B37BBB4D46C |
05C4682FB4DBFB6325B4999453894D8A02B799B9CB316050A109B15536065656 |
12176323070C8022146690BB7151F76D16DAF7529372E54D3925CD25A26949B5 |
1F7B96CE4EE179A0B5867D4ED4336AA6259E2D3AFF004D96782CDDEDAEA277D4 |
9ADEFF004C4BFB9D3E6D361BC315B4D0E8F790BCF6D7974D12D9DC69D735A6BA |
B9B88ED629EE279E2B181AD6CA29A69248ECED9EE6E2F5EDED51D996DE06BCBC |
BBBB6862091B5CDD5C4E54CB3CAED05149BEDA6EACB6B5EE977767D64DBDBB01 |
3DD5D5CDF5CDC5EDEDC4F7979793CD757777753497173757371234B3DC5C4F2B |
3CB3CF3CAEF2CD34AED2492333BB3331260A72A862417541B5DB738720954665 |
41B15DB748C046848081D94C8C91EE75F65F80DA0FC0CF117C43B0D3FF00689F |
1FF8D7E1BFC313A6F8865D4FC45F0FBC1B6DE39F14C7A9C1E1BD66E7C376F61A |
1DF6ABA3D94D15DF89A0D1AC6F7ED17D029B3BB981BAD393CCD52C6E9D3956A9 |
1829422E726B9EAD485382EAE539CE494575BB7793D23795909BB26F5D3B26DF |
C92D4F18A2ACDCCB048208E0B78A25B78A485AE105C2CFA81375733A5E5E4735 |
DDDC10DC88268ACFCBB116F6A2DED2DCB452DE35DDEDDD6A86ACED74FD3FAE9B |
76ECDAD4615242B1BCD124B2F9313C88B2CDB1A4F2A36601E5F2D70D2796A4BE |
C5219B1B4726A3A988885BA90CAD3BCCE194AC81E18A244D8CAFBC42EB72F2C8 |
1D4C6D2466D5087559595DC77BE8D4756A4EC9ABAD346A4EF7B5A2EF6BBBA49B |
412C77D711595D69E9E47D9AF27B4B99F7DA5A4B71E6D8ADD25B982F2481EF2D |
136DEDC09A2B59E18AEB319BA498DBDB98A0114876E576078E4963690AC4B247 |
1F9819A3790AABFCD1491A8525A4994C3186970863AD29752D4AFD34AB6BEBEB |
9D42D342B196C348B3D42FA792D34CD2FF00B4351D767D2F4E496E156C2C6E35 |
5D5356D4DACAC5ADD67D4F54BFBA8D0DFDFCD24A27CD65272765CB0576D24E7C |
CD2DECAF29CAD14FDE77B3BB03368AB7A85B45677F7B696F7906A305ADDDCDB4 |
3A85AACAB6D7D14133C51DE5BACF1C53AC1748AB3C2B3451CA237512468F9515 |
2934E2DC5EE9B4ECD3574ECECD369FAA6D3E8C028A2A799AD9A3B510433C72A4 |
0CB7AF35C473C771726E6E1D26B5892D6DDACE05B36B481ADE596FA46B982E2E |
C5D2457515959AEFAFFC1D765F9EB6DBBD930828A2A49219A1F2FCD8A48BCD8D |
668BCC464F3217CEC963DC06F8DF076BAE55B0704E29D9EAECECB77DAFDC0B9A |
6EA1A9E897FA6EB9A3EA379A4EADA5EA16FA8693AA6997D2D8EABA66A7A6CD05 |
E596A36375692C57B61796772B0DC595F40F0CB15CC424B6944D0314922B6177 |
61A8DEB3DDCB7F0DDD9B01B607825B69E1D4A6BF9A79A4BA5BC6BB8E4B7B5921 |
8E0B4B98E4B63A95CDDDC5A8B4885CB6EAF2FB50BB8AEAEEE4DD5D4F6D6D68B3 |
5EDD8BB7F22DAD534AB759A6BE9E736E20B6B68E381669224B282381AD16DAD6 |
3B5D9E97F14BC3DF0EBC23E2DB0B0F847F106EBE24F856F3C0DF0DF50B9F13EA |
3E19B9F0DDB7FC27BAE7817C2BACFC4EF06B695E218AD667D2FE1EFC41D43C47 |
E0ED375FBDB48A3F13D978734CF18DB595858EBB66B6BD10A69A9CAEE54A9BB3 |
8DD46A49548B8C6AC29C9DA56972B925B73538F33735215F6EEFEED3A5FEFB7C |
F4382D3AC09F22EA099A569664B0282DD160792EE093ED366D3DD5DD80667B17 |
9225F21C4AD75BE157B657B0BDBBDE86CAFA6BB363E1B867D524F3CC36B6D1C5 |
A81B9B5952E2F2F34DB18F4CB7733DDDDFDBC5D436A35286E65B8BD10426CEDE |
196DA5D420B7B5B88E096CA792384DAFD9820D39135378EEA286F65CCD30BC5B |
AD3F514BE7482CA18AEED6DA7D4659E1B6B3B98AE6EDCF51A3786EFEE6DAE357 |
B41A8CDA659691797DAEB6982FA5B3F094305FC3E125D43569B54B749B498DEF |
25D3A1B1D451A78E3975ED27459EE2D2E124B3BBF5B0D8776A708D39C1CB5AAD |
4B96A4527ECEA4A119B97242EE9FB47349C9284E9423C8E6449AD5B69EBA2DD3 |
EA96D76F476B79A6DDCC4BDBA6BC88BC47C9D5AD3C9F360430CB771DEDADDDCC |
8D1C6775D9BAD3AE3522B1C56573796E2D65B7B07B5B6BA92F2C6D6EA3D36D26 |
BE966B8D2E5FB3EE92432C506A7022D9595D5A4773159412269734F06EBBBFBB |
6D91C096D0CD62E843DE4105DA6FC77BA85A5D788B44B5F13C93DA49A749E1FD |
6EFA19E4B0D23C41A75C6B31F882EECEEA032DB5E5CD8ADC685A3EA30585E411 |
2DB4BA0EF30E917F6F677D67ED5A3EA7F08FC26BE2DB3B31A27C638358F0F789 |
3C0FE09B8BE6F1DF82351F03EA704DE03D5344F8AABA6695AD7F645FEA725BDB |
F8CFC2DA6F8375ED5FC59A63DBC5AA6BD7493C69A35DCFDB4E82AD56139D6E5E |
57CB672A71A92A909B849439673578CB9A15650E7A751284528DE972E6E4E29D |
A3BFAB566AFAEDEAAF66B5DECEFE53A0783B45BF163A7F8B2FAE34B9D2D2EEFE |
E8CBE29F0CDAE8B6FA458E93A45E5B4A353BDB991CEA31C11F88E3934684DF5F |
59EA5AD68361E1DD0BC47E248EF7C0DE20E260B5FB35BB6B916E7B15B792D355 |
D422D17CCB0B7D4BFB46FE2B7D1268F4CD565D28FF006CE916D05D24978B650C |
EC274B38E492C9F59BAEB67D2989315AAF94B0C686DEE2E2692E364D717B25ED |
D4A8199A77B986EE0B0BE6378F7105D7942CD56D965B99EBA6F11E9F347A7786 |
134CB5D36CA2D5FCC8F42D2751B9D321B991344D5AF2D6C6E8EAF6DAC432DCDB |
EA37F766F75FBFF10787FC3963A5DE787D34DF0FC9A77832DE716D53C1462B9D |
5392F650D24B9A729556E34E339F2BA378D37CD1A7ECA109DAA274609CEC853B |
E975ABF4D37B75D5E97BB7AEEEC79D4F1EB29A3DE78A759BBF100BDD5FC41158 |
E8B7CDA7C973E1CBED656D5F59F194B77E24BFD4E2B7B1F14E93737FE1B8B57D |
0458DCC9258F8CEF753BEB8D2ECEDF4FB1F11687F68EB1A65F7877C41E239350 |
D4A4D13414D5FC2B6BAB8B6F10F85D6C6F750D47C41A6E9BA6D86B306AFA1DCF |
852DFC4DABC9078ABC2B7367A969FA8DFEB1E26D1F52B3B0BA9354D420F4CF14 |
785BFE105F12EAEFA1EAFA35A695E11F1ECD79E1755BFB3D526F10F86DF579B5 |
5D1FC5BE16F16C9E15F0BE87E3AF09E8D79A0593C1771DB44DA969BAFDD6B9E1 |
CF0E4562DE2A4D0781F0B68161AB6BCBA5F8A85FF872FE0BCD2AC6EF54B78E0B |
4D5344D22DA3D3FC3B369A343793C3161FF093DA5B4A7516BBF13EA9E17D3B51 |
1A2EABFDA1A8DD4DAB8D4ACF9DE1AAC674E9F34EA4A52B455572952535FBCE7B |
C54BDA494E7CB4DDA8732A6E32928AD6B995AFA2EBE766ADA2E9A6FF0016F731 |
A656B78A2D7351963D42712595A9BF8FC4125C5FDBD9DBF8760B1934FD52DAF1 |
24F10C373A34BAB68DA44D73696FA4E9D64FA7DD43A459F88205B49B46D945D3 |
62D222BFD56CF4D97548F4D78E0D2EF6CE1BBB699B52963B4D32CF4E1A548753 |
875DD299EFB508BC3DAC47A1C10D9D9D94F7577ABD9EAF6D3CBD2F88BE1E4DE0 |
DB2D2FC3FA8F8AE35D7AE2CF48F1BE93E1CB7B38352B0B2D2FC49A7DBFD9B5D7 |
9C0B55B4D6E0B5D3AD74CBEB6BCB05B3F125A5CE8BE3CF076ADE26F076A5E1DF |
136A5CB5C47A6DEA59C53CB67637177A85EC773A84F36AB6EC6E2CC416675255 |
86FAFEDB4CB3D13FB365BE7BCB4D22F7536B39A7B6717F2CB6B62DD14E955A70 |
9BB423CD1E670AB2A2E3EDAA5A337274D737B4854F636A53841FBD2F7AA4E7EC |
C96D36B7DEDA5F6576B47A59AE6D75D96CB537261A9E8BA8DBEC31595F69B15C |
436BA9DA78520D2EFE4B1D12FB53D0A4D49CAD9586B2DE29BCB81AAC11F886FA |
D63F135ADFD95DE2DF4AF10E992ADB4F0F8E64D33C3D71E16B64BE1A2DBDF5AE |
BF69A7DDE8DA26A5A3413DE6910E85E29D7BC3BA80B79EF3484D422B8B2D46EA |
C34C81DF508ECB43975CD4A7D4FC15E19BCB7A772DA45AE989A381B1ACADDB55 |
B64797549EDA5B9D7664B9BDD3EDFEC70183C3FA9D8DD43A4D85AC36FA418F56 |
9348D4AEE0F18EAF359785B414350B8BC96D239ACA1D3E2BA9F50D2AE75622DE |
DB4CBA82F350B6926D56DB48D06D2796CEEF408B55BF79750BFB28912DA0B0B0 |
856EF449F537B43D4AF08B709724E11D54633AAE336AD28F2CDC3ED7BE9DD73A |
85DFBB08DA5D9E96BA6FAB4B4D5DD5AED76FBBE772DF48293C9A5DE5B0B54BF1 |
7BABDD6AB7F752DB7936B756FA35F402FEC6E6CF549357B06D1AD6FA3D22C743 |
B3D3F50BCB7D4A35B63AD5EAE936573B779A1EB3A6E8BA6AB49637F617326A3A |
DC1AA58EA11EA6D2AA68BA06A1AF47AAD8D8CB6F6FA45F687A6C5041A83CBA75 |
ACF0C56E2E2F2EB52B0B3B55B6B7FDA4F73E1DB9D02DB5AD2A6D364B6D06E9E4 |
9A3D52D12DAE35C93479AF6EB4F6B4B3992FA7D075182EF44BCD7ACEC2F7C58F |
E1CD5AFEE2D2297C3F0592E819B7F713F873C5DA65F5D6B5A4FF006B482DAE35 |
2D5B51B9B4D7ECF4BBCBEB184F8934AF176877B6BAE41766D757BFBDD1BC4BE1 |
FF0012E897506B76B6F1AEBBA4CE750D3B46B8EA7ECE9A728BD25CBCB7928C63 |
CD27192BC5356E68B929C9C65CD395EA4217893ABDFA6FA7A3D7F2D135A2D1EE |
71F3CBF68B6B86B7921816468A7925B58F50BAB99E3334B6D0CC21D3DB4FBDDB |
3476B6E62BA8A69A29A149A34F36D224B8939ED6F44D3F41F2ADAD7C47E1FF00 |
13C37BE1FD2359D42EF45D2F57B4B0B5D5751D074DF10EAFE10D48EB3A778775 |
AB5D63C1FAD5FC1E0FD74D9416BE1D7F12E90EDE14B8F17F87AFED3C4779E813 |
DFDC4F3BDDBDFE1B4FD1DF4A86DA3D2B4CBF8228ADEDAE2782C8599B6125BC97 |
AD79379B7D079B7B6773AADD789AD6CEFB5F6125D739E25D26D6DF515D234FBF |
B6D6AE96486EDB50BB96D16C6F67BDD024DD2A5A45E745349A6FFA0B25B4DA6D |
BEA56F6CD6ADAA69DA4DEDD6A36B6DC18CA1ED129D94AA47F769BBA8CBDA4DA9 |
2508557CCE518CD7B37049DE7CD36DF2BB84ADE8F5F3564BAB5E6B5BBE96D8E1 |
2EAC2EACAEE26B93A7C66FA08D34FB6865D3F5A36FF68BCBD85965B08E2BAFB3 |
BC3A8E9F7905FDB456D657104D731DE58594961776905DC52DAE977767A33A5C |
795749A416D4C59C76B2A4728D7B50B1B77BD371FD891D9DCB5ABE9A248965D5 |
D5EDDE0D4A7D5524BAB9D374AD99239AE2C2F1F5C92F96FF00471783305C69D2 |
8CEACB6E1D6EC7DB34E92D6D96D2E1EE34F5B69354FB75D5AC9A2C96D6B6B74B |
3D8E46A76F716535B58C179A85BE9B76D769A3DC6A166FA4457BA53EA979A3DC |
DFCD1B5FDF4B6D0DC5D6905AFACFCDB8B6B6BF4D4ADD081681EE7C2AB08C1C9B |
84E74A516D42AFB9514A73827CD052A71A7ECEB42A516E09B6E2A9BD2706B64E |
F6D75EEB55D5AD75BDD34F5EF75B332A3FB2C732BDAA5CCD2C925DFD8A1922B1 |
BBF3639192DEC12E2065B855B90DF6892789ADDDA5DB6A2D96213ADDC598186C |
65D8A58B2B09097DEA143828A0308F6B965672C8CE0C69B1914C81F42E5EE2C6 |
768E0945AACF169F7862B1D4A3BB8019ADE0BFB6067B49E5412DBB4C09B59E47 |
BED2EE03D8DF6CD46D6E40A770D3BCF21B90C2E036D9B7A6C93CC4F91CCCBB54 |
998B29333B8F364977C93334ACEC7CFA8D5ACAF78C9A7150B53BB5CADAE67CC9 |
B508BB3845F9270BCAFE5FE7FD6FD7F32FBEA2F6AE1746B9D56C6D9ACD229A37 |
BF3BDEE2F3475D375E21AD63B58FEC7A899F51B64B768D9FFB1EE974EBC9AF3F |
7F34F9553C3712411DD448B032DE40B6F299AD6DAE2448D6E6DEEC35ACB3C324 |
B633996D6246BAB27B7B97B66B8B2799ACEF2EE09E0ACE5272B5DBEAEDB28DDE |
D1577A592EDDADA260145145481242B1BCD124B2F9313C88B2CDB1A4F2A36601 |
E5F2D70D2796A4BEC5219B1B4726A78EFAE22B2BAD3D3C8FB35E4F69733EFB4B |
496E3CDB15BA4B7305E4903DE5A26DBDB813456B3C315D663374931B7B731444 |
442DD486569DE670CA5640F0C51226C657DE2175B979640EA63692336A843AAC |
ACAF0D5DDC2D67676779464EFCB38D9C1B4ED6E56D34B5F7A519DFE189FD7DDF |
D7F91208A43B72BB03C724B1B4856259238FCC0CD1BC8555FE68A48D4292D24C |
A618C34B8431D694BA96A57E9A55B5F5F5CEA169A158CB61A459EA17D3C969A6 |
697FDA1A8EBB3E97A724B70AB616371AAEA9AB6A6D6562D6EB3EA7AA5FDD4686 |
FEFE69258350B68ACEFEF6D2DEF20D460B5BBB9B68750B55956DAFA282678A3B |
CB759E38A7582E9156785668A39446EA248D1F2A138FBBCCB64D45DDABDDC6FA |
2DDABA96AAF656E6E56D73054A28A2A4028A9E66B668ED4410CF1CA9032DEBCD |
711CF1DC5C9B9B8749AD624B5B76B3816CDAD206B7965BE91AE60B8BB174915D |
456567051F3BEDFF000DADB6D9F9ED75A805152490CD0F97E6C5245E6C6B345E |
62327990BE764B1EE037C6F83B5D72AD83827151D369AD1A69F67A013DD5ADCD |
8DCDC595EDBCF6779673CD6B7769750C96F736B736F23453DBDC412AA4B04F04 |
A8F14D0CA8B24722B23AAB29020AEE63F0CEAB3F87E4B7FEC8BE5D62C7C57369 |
4B6771068FA65EC97B32E9BA7DD689616571B3C59E2FD757509B4E5BAD134F85 |
E2F05C405D4F69349E2F9A6D3E061792DCC3A887D2AC6DA282E3C676D73AD786 |
F43D26DB51BC924B5B6BEB0D374AB7B3BE875FD28F8934F9741D1F4782DEEB43 |
82386FEFAEF49F0EE987C4FF0060D5D192B5E338A92528DE2BE16DA936DB8AB4 |
2DAC97BA9D94DD395D20E368AD5D1E2B692E5E4B858276B381B5082C2F5E3B7D |
3B546B0922BBBBD3B50BC3AC68B736905CE990DF887FB32E65D5AFAFD6CF48D3 |
205BCD462BAB5BD0C37DA24B6A2E2CEF239357D26EA7D3AF349D48C1717F65AE |
6977BA545143796BF6FB2BBD3CDD4B3D86BDA64707DB257B6D67C2F7B73A65FA |
5E2594460DA4EF68B766D294ADAA5AF2A7ABBE916D37E49C5B0E72ADC76524B6 |
5757CB2DA2C7693DA5BC9049796D15ECAD7AB74D1C96B6324AB7577043F6465B |
B9ADA2963B369AD45C18FED30962E6D3ECD1DB31B882492649BED16C82E12E74 |
EB882E66B76B3BE8AE20836CE638E2BB47B66BAB4682EA28BED22FA0BFB3B3D9 |
BBF0F5FD949A9D83695AADDDE59EABAAD8C3A85BDAEA36F60D1F85EDAEAE7C4F |
1B69DA868F6BA999EC6DA4D3B53BA37474CB9D074E599B59D2D5AF637B07183B |
BBC5B4959A4F5529C5FB3D949FC56D2DABF75B8B7741CDD391433AAB3AC6ACCA |
A6470E51012017711ABC85547CCC111DF00ED566C032CD7573711DAC53DC4F3C |
563035AD94534D2491D9DB3DCDC5EBDBDAA3B32DBC0D79797776D0C41236B9BA |
B89CA996795DB6FC3B04B7CDACE970369F14DA8683A8324FAA6ABA0E8B670AE8 |
AD0789EE01BED7E2F29AF2EAD342B8B0D2B4FD36FF004BD6357D5AEEC749B0B8 |
BE6BD7D0B58518A949475D765CB76E56F76364D6929DA37BE89F35BA018D0C1E |
624B263CCF2F2BE446FB6E1B75BDCCBF6854F2E4DD6F6BF67F32EDB0BB519177 |
C7E679B1E8DA45A7486F66B9BAB9D1DDEC8C9A5C6904D3DADDCF2CAB67730CD7 |
88CD756B64B135EC88C967A9BCFF0067FECA9E48DA693518A965A4B6DA65B782 |
112652026491CCD15AE259506DB8960FB495892525E182E2E24842A986CD8D95 |
FB310016B709753411D8CCB34F34ADB961BA99ED1629ADAD3ECB2C2CD1B8695A |
0FB44B3EA369A65C3B2D9058D46D492E68AB41DBDE7CF65777B732B4A1351841 |
BA9ACE1097227356D1A7FD7F5AFA6CDF6209206569E3658D56DF02ED96DE117B |
0D9AC9A7C313C96FE6FD9A3B90EF1A3C56F3ADF0B96BC87509B69663D13D85EC |
D0C16DA7ADBC77063B59A29ADAF2E6DE24B60B7DA959DBD98BFB5B7BB93EDB39 |
92E8917B7C23BBB30D3FD8A3B641065E9DA80CCF646D62D42D2FC5AC72417F2D |
D47716E62BEB58ED4DADCE9B3DBDD6A12C3691A5AC704D69796B1477577341A2 |
FDA2DADAF20DFB5B3D4A7BB7BF8629AE0ADA40B1CE24D32559E5554B0FB5B5CF |
DA6E61D426B77B083545D3E6B88E382F15F75DC52470CBA977616109DFD9C6AC |
FDA350A8A9C5BAB0A57A8E6E33E592B4A3ECF64E73A9ED2F184941A9969AB695 |
B557DAFA5AEAFDEFE9A6BB9EA3E01F06C37DE27D36F64D3357D434CD46C3C59A |
A5E5AFC3CF0B3F8FFC4363E1DF04E89ADF8A7C41A95DF80F4CF16F86755834FF |
000F687E19BED77C7777A96A7E138748F0969FADF892CEFC0D06F92FB99D47ED |
1A65BDD2B5C4682CB47D1EE658355D59F49BED4503E85ACB597D8E68ACEEF579 |
1DEE34BBB2886FEC6F2F74FB1D7B4FB3BDD121B6D727FA53F679D4FE15D9DDF8 |
D748F1FAFC4EBDF125DFC38F1B783BE11E87F0AFC37E069ADF5DF899E29F84BE |
39F0978620F8937573E14D57C55AFF0084BC453C5E0BF851A97C33F0945A3F88 |
35BB8F89FAD7C687F8C5F0F6EFE1E691E14F1B7857C4CF893E3BF8B3E36F19FC |
53F15EAB61AAF883C6DAADFEBBE24F1179DADEFD575EF2E5B8D435E585AE3585 |
B7FB45F452CFA879B24B1EB178970CC5A1D42DA21EEBB4294E314E936E694542 |
13D795FB6ABCAA4D382AFCA93928A5256727FBBF6B8A777DEDCAFAAEF65B6FCB |
E7B5F4DEDE79A56AA8F7577A76AEB65A85A913BBDD6B11CEE6DA58AFEE17FB42 |
08FED11C3A3DCC816DF4D1A76A76F2D9ADACF70F0476D7F3D9C92F689E1C967F |
10476A7FD0B516BE3A1DD7F6DEA2BE1D86C5AF278E178EF359D6754D1749D174 |
ED3EEAE65BBD4750D62E3ECBA52C73EEBAB04D3916DADEA77FE0EB9D2750D06D |
B4BB99B48D2BC5FAEF89BC1BAE6AEBA3C9E206F09DDC30457FA4F8AEF2CBC236 |
33F8925856CBC2B7DA7EA3A6EAD67A4AEA27C5F75068F751F8B278B4BC9975AD |
3F4D316BE8DA85A7D96F3CCD166B96B59B59B19D61591218AF34EB6B3106A114 |
96EF15DCFE4E9DB751867DB1DADB0B78D0A318C2938E22A529A8B8D45526D73D |
351D65ED1F34D38D3938FB29B9C955EAFDF536A4DB778DD74B77BF6D16FAF36D |
6E9D8EA66D22FAD52D6E6F6192D34BBBD62EF43875C30DCDE68926A1A7369BFD |
A915BEA3A5C17F06A034A8358D2EF7511A61BE7B7B1D46C6F0A3417B6AF357B3 |
D66E34AB7D6E6D36E2CC6A3F63B7B08EC6EF4B7D59EE1AFAF2D668EE069D78A3 |
41B8B3B516924C67D6A3D46CD7518AD22834F8AE239FC47E15FAA7C71F13FE2E |
EAF79E38F1678CFC63F0EDBC59E34D12C75F8AD7C1BE08FD9E742F0A6A3A1FC6 |
4F861A06ABE36D4F428FC0FA0F87F41D13C7DABF83758F0AE85F11A2F056956B |
E39D3B5889749F18BDD78AF5BD71B49F902E2CE3BA81ADAE4B4F048D21963758 |
B12A3F9852262B12B22C0591A192231DC2BC10BB4ECC24327A5514F95FB3BC5B |
52E5BB51927AC57BF09CB975B4D35193E4D795B9452CD59357FF00356F2D15ED |
AAD6DADBB33BEF1FC9E1E98787356F879E2FF10DC09BC3BE1FB9F19D86ABE1EF |
0FE8D63E1CF895ABE8C3C3FE36D03C1769E1DD581D73C117169A51179E246F0E |
78375359F54B9D075AB2B8B6D2ADBC51E32F2AB68E4D31A4458EF6E8F99E4CB7 |
B25B2BBB430C91DEC68905B7946E37417DA83CDA83133CDA8C53AB47753CD696 |
4FDCF88751F055CCBA2DCF8324D78DADD7873C30BACD8EB1636267D3FC5A9A5C |
561E26FB15DE89AE78861D4BC3B7FAF586A1AB693AB5DAE8725B5ADF8D1AEF4A |
865D24DF6A1C3497B14D0A5DD9C7227DB2E540717567025EDCD8A9686D16537B |
B3CCBBB98869D24F0C1766E6DEDE48CEEB3FB1DDAF2D474DB8D58CDBA8D39692 |
9C9B4ECA738D36E518F3B74D49F2C6714FE2BDA25ABECD69A2D6DEA95EC9BB59 |
F74FD35264D42FAD74A96DADACB4CD46DAE24D1E11F68F0EE8B7B7ED73A38730 |
4BA45FDC69A757F05799737B7D6FAD2D86ADA7D94C34EB04D634DD51EC74A5B0 |
8A55B97B1B6B6B1B6B95B15B6B686D9EDAFD25B8B7B06696F16DAC19F51B786D |
025EDCDF5E4A61BAB9B27BBBD96F7C8D465D575368628EF0B4115C18AF6E2FA1 |
B79A785ED34FBD92CEE3EDF0C57864825B8911A6B7855F62D94D7F6BE6CB06C8 |
ECD2E22D3D21D34BD813CF855AC239A1B47BD9225BADB1090CF74978D24BF665 |
55862BB89D6E2E82BCAB2348D736D0BEC136708D29377A96E68DB4E56D5E3EFC |
633719CA37B38CA3CEDB8C29BBC9C9B936E56D15ECFF00E1AEAE97677E9AEC6F |
E8F069333B4FE25D2EE4E9C2F45BADD5A476D7189A495AE134DD4D57FB36FF00 |
56D3F5CD3B4267B6D16DBC59E1E8F4B41AEDFAC1AA4F757CB141A82699A7DD3E |
9211974368F50B9B09E3D3F48BFBAD6627B29AC6DEF23B9D35AD6CF50D1EE6FB |
C377BA6DB596997DE258F4CB28DA4B3BBD56686FE7D4AA588B70D2C3A825CA5B |
6A36CB6D2C36561A74E6D22B9D774CBED46E6E20BF33D9DDDCAD94325B18ACF5 |
2D1EF2EBCFD49A1D49ED2E6E6C99D7B0D95A5DDC6816F6565A6CDA05F0D16F66 |
D03561E20B1D4AFF0046B89126BEFF008482CB59F11E957F0DE2D97D9CCDA6EA |
31E97369EB68B616F05ADDD935C6FB38A51845BBB6E7FC49CAC9FB3F7528DA4E |
F29734A0D295A31B49A8AD2DBB7D34D924DEBDF4D2D64D5D6AF4B89A6CE228F7 |
D9EA7A847716B0FF0066C91340F1CB730DF69EA2EA4BDBE796DEEA298D94C96F |
359AD9CB0DFC3AA5EADDCB6CD682DAE746C9EDA58F51B7B81FD9CA2D59A5BC48 |
E59E7F106C9ACAEB4CD1DA18EF3ECDF65D3B55B68F5212DF4363F646FB65F42F |
AA5E5B69560CBA5EACF6BA85DDE5EDA26B524DA75FE9CB6DE20FB5DDDADAC577 |
A0DCF8674EBAB17B6BBB7293E871241AC6850FDAA486C751B4D3E4BFB19ACB7E |
9B35713CEB0496CB34AB6D2CB0CF2DB891C412CF6E93C76F349103E5BCB04775 |
7290C8CA5E24B89D50A89640DB417BAAFAA4E5A59D9AB3825694A4E3EEDB9945 |
C5DD3BEF28B86F57FD79F4B5F5EBF7741D0D949A845F668ADE4924D3C5FEB573 |
7EB3DC5AECB388DB22417D70B716FA62DB413491DB69D6B246975AA5E5F2D931 |
D52EDECE18EAFD86D7589E0305BDDDF5DEB77DA9E9DE22D2B4F8ED348B4D46C2 |
FF005B8648348D1ADB418E764BEB1D46C6DFC43A64B72971607C46D0595DF85B |
FB3ECA6B4BEB06676823B7222F2E296699584102CE5E74811C4972B18B996251 |
6F19860965782DDDA792DE38A4BAB969736F264D423D3DF56B2D1ACA611DA69F |
288A3110D5FECF15C2D91BCB7132D9FF006803305682117B048F6BF6D91EF757 |
B8BAD5E5CEB42138F2CE2A4A4ACD4AF18B49C3E39A525E569A6A71724D3D6327 |
16D6CFF5EFB2FF002DB7F48638D375C59EB1A65C79E2DF46B6F0CC102EB1A7E9 |
7A0E9336991EB9AB5E2D8497F3DCE9DA86BB7D3E91ABE9D6B7720D28CBA8F883 |
5AB1B4D3EF66D118F21E3DFB4347A64971A2B6933FDB3578B51B8D56E85CF8BF |
58D7628B48FEDBD4BC4EB736D6BAADACCF76E23B7B6B8892C5274D45AD9AFB52 |
7D6F5AD5BD3AF7568B4BD335FD6ADC6ABACA9D6F4FB6629A74563A1DD69AD35F |
DDDF59EB963E1D96CE2B0796E748B5D46DF4AB3D46D6D206B1D52DED6FAD5ACF |
4E96DB99F14EB7E3DBBD02F92E3C35168FE19B749ACF57D034E3F6DB1F0F6A0F |
7D656897DE26D26FAE757D77C33AEDC6A76D731E8BAAF88E6D3B59BDB59BFB27 |
4ABDBAD02D66B09FCACC29D08E1AAD173A9CEE2EB2E4C3AAAD45D5BC555AAB9B |
969C2309C632F6AA71A5CB15CD4E1C92DA1CCE49E96F8756D6CB5B2D3AB57D2D |
7BE97D57981B1BCD5DF51D4EEF545BABC56D6351D6EE6E06B1A95C426136A63D |
4753D42D6C2FADDD7C47ACEA30E8FA7DF35E4C8FACCC87589B4DB3BAB5BFB8B9 |
7FE1CD422941BAB0FEC4F2343B8BFD420934CF13C4BA6B68D7B75E1999752FB6 |
D8DD4D15F6B1E22D356C64B8B7925F0FDAF88359874B9AEB44F22F34ED1F72F7 |
46D298DD3693ACE996D603C336373ADDC6BBABE89AD4F6D71A9CB36B7A0689E1 |
FF0026C6DF5EBEBFB2D3A0F0E786FC437BA1E8714FA3EBABE20B7D48E9DE1596 |
4DF05949E2B83C4FA7C71E97A50F1019E6921D1E0B1D1743D452F74BF135E6B1 |
2E97E4686747D6740F123EB3A6CFA7E9D63A7CFA378C5EC24D3FC3DE1E29A6DF |
E8F633FCFBA493B4A12973C928CA3EFB72E6E5BB49FB4716FDDD1253A9ED6116 |
E54D286FFA1C35ADBC979736F69134092DD4F0DBC4F75756D636CB24F22C48D7 |
17B7B35BD9D9C0ACC0CD75773C16D6F1869679A3891DD67BED5353D4FEC7FDA5 |
A8DF6A1FD9F636FA5D87DBAEEE2EFEC3A65A6FFB2E9D67F68924FB358DB79927 |
D9ED21D96F0EF7F2E35DCD9E97C570E8165ADC50D8C1A44FA7B787B4BBDCF853 |
5AD5AEECFF00B575FD022D77C896F7C45A7B5DA49E1AD57574D0B54D20592B41 |
0E832E89FDB9AAEA4B71E36D538CAE79AF66E50E74ED271972B972CB96D67671 |
8DD5EF66FEE5A390153DD5ADCD8DCDC595EDBCF6779673CD6B7769750C96F736 |
B736F23453DBDC412AA4B04F04A8F14D0CA8B24722B23AAB29020AEE63F0CEAB |
3F87E4B7FEC8BE5D62C7C573694B6771068FA65EC97B32E9BA7DD689616571B3 |
C59E2FD757509B4E5BAD134F85E2F05C405D4F69349E2F9A6D3C85394F9B9632 |
6E2B9BDD4DE8AEDA6926F55AA6B6B36D72DE510E1A8AEC985E4B730EA21F4AB1 |
B68A0B8F19DB5CEB5E1BD0F49B6D46F2492D6DAFAC34DD2ADECEFA1D7F4A3E24 |
D3E5D0747D1E0B7BAD0E08E1BFBEBBD27C3BA61F13FD830B478ADA4B9792E160 |
9DACE06D420B0BD78EDF4ED51AC248AEEEF4ED42F0EB1A2DCDA4173A6437E21F |
ECCB99756BEBF5B3D234C816F3518AEAD470D5257F79E9CC92BAB2D55A526D37 |
7B5AFCD6F7399BB20CAA2BA3861BED125B517167791C9ABE93753E9D79A4EA46 |
0B8BFB2D734BBDD2A28A1BCB5FB7D95DE9E6EA59EC35ED32383ED92BDB6B3E17 |
BDB9D32FD2F12CB1EE6D3ECD1DB31B882492649BED16C82E12E74EB882E66B76 |
B3BE8AE20836CE638E2BB47B66BAB4682EA28BED22FA0BFB3B34E0D2BEB75F12 |
69AE5F86D76D2BB7CDB2BE8AFB3008ECA496CAEAF965B458ED27B4B792092F2D |
A2BD95AF56E9A392D6C64956EAEE087EC8CB7735B452C766D35A8B831FDA612D |
52BA4BBF0F5FD949A9D83695AADDDE59EABAAD8C3A85BDAEA36F60D1F85EDAEA |
E7C4F1B69DA868F6BA999EC6DA4D3B53BA37474CB9D074E599B59D2D5AF637B0 |
C29AEAE6E23B58A7B89E78AC606B5B28A69A4923B3B67B9B8BD7B7B547665B78 |
1AF2F2EEEDA188246D73757139532CF2BB128F2D934E2D269F54E6A4FC925EE3 |
8BD1CEFA3BFBD688448A19D559D6356655323872880900BB88D5E42AA3E66088 |
EF8076AB36019E183CC4964C799E5E57C88DF6DC36EB7B997ED0A9E5C9BADED7 |
ECFE65DB6176A322EF8FCCF363D9F0EC12DF36B3A5C0DA7C536A1A0EA0C93EA9 |
AAE83A2D9C2BA2B41E27B806FB5F8BCA6BCBAB4D0AE2C34AD3F4DBFD2F58D5F5 |
6BBB1D26C2E2F9AF5F42D632B2D25B6D32DBC1089329013248E668AD712CA836 |
DC4B07DA4AC49292F0C17171242154C366C6CA9455A32D5A7CD7D2CB997D9E66 |
F96C93849B6B79A8F2C8082700B891206B78A65124684BB26326390C2EE37342 |
2749523DCD2BA05F2A49A6963791A1AE934EB9B486DF62EA77F66DBB74889A95 |
E592492322179160B3D1F518C2A9FDCAC8F746594422568A1575892FFDBEDBFE |
83DA8FFE0F756FFE662BA6386A538A9CB154A1296B28DA1EEB7BAF8E096BB251 |
496CAEACDCB935A72B7FD7A326BA5BDD4F47B7F3FC59633DBDAD883730CD7315 |
AC5245E1ED2AC1B41B392DF7A788B5DD76C66F145EF84B4D96F34092CB4DB2B5 |
921D1BC4175E0ED2755BAF0F6A9F092DF5B5F5B4BA9F86D75A6834BBDD0AE9E5 |
D27C37A36B9E1FB38E3D26DB50D1B5DD5B5AF0D6852C17612FBFE1258753D29B |
C690788748D3EDA6B39350B8F881278778E967D334EF3A1B04FB6DF45F69B16D |
59A5B7BDD16FADE5FEDAB3BBBCB0D2356F0EDADF5AFDAAC6EB499349B8BB922D |
4F48BBB2BBD49522BEBDB08BC3F3C9A5D859DCF889AE06AB7FA66933DDE97617 |
FA7C7A77D9AE7569E4BB8B451A8EA5677DAD6936704D6F657FABF97A65E6B8BA |
B47A5CFA6E997CB6D72FE23D3614A2DBE687B456B4BF7B3B43DC9DDA6D4AEE29 |
4E71F76A28C95D3A8A5CAA8F57D4B4E8F59F0F7806C6EFE2E699AC2DD787A1D1 |
FF00B17578347DBF0DD67D4ACA74B2D42FF51D6DFC9864BEBDF08C835CF0B1D5 |
756B6F0436BDA76AF6FA5CBE02D6FC0F0F09A94BA4C5A1D8F88B4EF0FC16A7C4 |
73F89F41D4B4E96DDA5F0DE9D269769E199ECBFE118B9BEF10EB3E2F4D56CA4B |
FB6D76FF0055BEBDB1B69E7BF8B4182DAFF428F5BB1BF89F56D60A78422B1DD6 |
1A9DC69F6E906BBA9DBD9E9D7925D5B788FEC5A4EA1A678BF57BC96E2CF4FD1A |
D3C37A168B63A9D9DF681A76809A56B1A6416F6B1CBE20BFD69B67A06957FE20 |
F0FE8975757DA3DAEA37C34C4B8B7F0CEB17FE27B8B2D49A2BFF000DF88EFF00 |
C3275196D67FEDBB5D66C2DED6C7C33ABDD4BFD9F60D736F61A8DD4B6775E22D |
AA4D54D2104E528D0A71A952A3BA93545422A75E73B250E78D4873428A53937F |
BB8528C55BD7AFEBDBE5E7A776CA77F776BA8EADA45D4B65A2E9B657FA068BA4 |
ED9EF27BBB3B27D3F4487C2371E21D4A1F0E85D56D2F3FB474CB8F141D3E5B29 |
AF24792DE69F4FD774FBC8FF00B573EEA3B2B5B2B78DF4DBE6FB6D88BFD2F579 |
A3974B96EA59A5B0B4BE592DA49B54B1D5343D2EFB4BF11E97A6DC69C74BBDBA |
BD9A4BED4AE97EC43C3D6B423BEDB65258C967633A1F39EDEE24B7F2EF6CEE2E |
25D35E6B88EF2D5EDE7BAFDC69A2CE1B3D51F50D32CE2BED4AE2C6C6DB51BB6B |
E5BFAEC5651CB646D357B1D6246B1F26F64D37499749B2B6974DBDBDD1ECE385 |
66B3D3A4BFFB7E8FA7697AE49A94D616B7B732EAD22EAD1B6B116A12C9CB2973 |
AA93F75CA5EFCA4F914B9A6D29D93B5FDED62A9C5B8C65CDCD14A49BD8C95B79 |
1ADA6BB0D008A09EDEDDD1AEAD92E5A4BA8EEA589A1B27996F2E2055B3945C5D |
410496D6723DAC5773412DF5925C444A6C5015BCCDCE598B0285084D8AA9B032 |
B2B090BB191838640110A3349EC937862EFC53F0E3C57E358B5BF861A6DB7823 |
C6FA2F876DFC1ABE27BF8FE206A1178DBFB72F74F83E1FF85F55BABFB8D6FC07 |
A45E691AEDFEAB77A5CAEDA16A7AC40FAFCE25F10E80975E53771E9496BA53D8 |
5E6A1737B35A4CFADDBDDE996D656BA7DFAEA37B15BDB695790EADA84BAC5A4B |
A4C7A75ECD7D7763A14D06A3757BA5A69F736D6106AFA915A8BA4D59F34654F9 |
D4DDA2A6B9DC1B827AE925CB6F8EC9C9A8ABA493FCEDE9A5F5F90C8BCEB7D975 |
17DB45AF990452CF16EB5DD3279574F6E970BE746B24724624819B7B7EEE2BA3 |
02B0F2D6EED8643730CB6D991A48EEE492D21580A5A436D20FB5594171B25963 |
BA374BA8CF691C76912DB5B2B47F67B725EC2BC3A8CEB6634D9A7B97B017325C |
C56CD2BCF67673DDC515B5FDF5BE9B23A5AB6A5716B6D6B00BA2D1B88ADE352D |
E6C76B3DA746FA5E957FE25BEB2B6D46E65B693579E1D3F52D634B1A54B359CD |
A9A9B6D5BC5BA6697AAEB89A249716D731457FA3E83A96B7736179E658DACBA8 |
5DC101D535A5173518D3F79B925CB2E5515292A89C1395F592F815A49ABB5255 |
1590DF7F5FBADDBD75FF0022CCC6CAE23B6B8B8FEC78A0B2BEB295DA1D2E0B25 |
8F4E92E6F6F22D35D61B5B6D43589EE21BD13457B75A5033D9C22DE4D426B4D3 |
AD20B495B50D6A29E3B6B08675D234626DA156BBBBBDB5D3635BE77D5618FED3 |
A8436C2096F6E6EEE8DB5C8B558E19DF574874F9AEAEAF9E08E35B559EDE5BE8 |
B52306B52410EB115D27F64CB71141A8CF6F7F1EA37B05ADF1B2BD1746E05B05 |
B7D56C24135EFF00A0EA977159BCC91D82DB1B0B69668EF6C6177F37CED32012 |
FEF9B370B6FA85F5D5C5A5DD8449777C200FA6CF66ED7A4B69925F60FAD04E51 |
525FBA972B949D2B46BCAAA6DFB28CA5ED1C935EFF002C24B967497BCA7ECE14 |
B37BDB75A2D7556EEF6B6DF34FB6AF4AD7ED57517DBF76962CB4C861B7B882CF |
50D3E4D40DC5DC53DD6A57561757934178A63516D1EAF790DC5CDA4097A3CDD5 |
57559ED0C9ADA0DBFF0065EA72CB7DA3E91A34E2DA1D4FC317DA8E91ACCD0EAB |
77135E9B9D36CC5AE97ADE8F7316A576B34178DAA24FA56963469B4D87505B31 |
AAFDB79C8AD2CE1B25B59E3BBBBB7BCB4916CA482C1AC21BBD4A30973A74DA90 |
D36DAE6FB51D2E3D352793ECE935B5F0BFBB86F25BAB8FB16A3A75959B4D3EF3 |
52D6B5DD134DB0D4EEAF60D1B59D76E7FB3AF52EA56D37C2BA3DF78A2E35674D |
4E486F8B681A0595CEAD7AB69A98FDD6952B25BBDBAB81BA9B87B1A934BDA46A |
C17BF28D46EACE94E51A7CB0A728C62A31A5C928CE118CA9FB55093A718D556B |
DD2D9A7A2D34BEAF7BF7BEF7BF2DD5DDBD87C07E01F0C7C58D6F4AF0B3EBD75E |
02D7ADF4DD3BFB5F4C3A3697AFF839BC2BA2689E24D77E24F8860D56F7C676BE |
238FC69A7E81E18F0C788FC39F0D74DD2AE2E3E2BF8A352F197847E155CF83F5 |
6B0F865E02F1AF7BFB50FC34F877F0A3E20DE7863E177C48F875F1EBE1DF883C |
0FE1AF197C34F1A7823C33F13FC2D6B69E1A3ABCDA6DBCBE25F0AFC4FF0085DF |
0DE7B8F89FA8E9BE1DBF4F1EE83E0D9BC67E08F0978ABC45AA7845BE23DEF8E3 |
C23E22B78FC2A5BCD5BE19F8AADF4CF14E97F107E1A78F7C35E20D6B4EF1247E |
20D0B52875ED127F08A4BE1F6D12EBC31AAEA5E1ABB975AB5F1A69FE2FF0DF8B |
74BD5DF4DB0B796DE4B2D534E97508356B38BCDF4ED76F2E2777D5AE9A4B4786 |
48DE5018A59B438682E25B2B108EABF6C9ED7CBBB8D6D6EFED0902DB6A11AC33 |
C524FD6B0D1E5A6AA49CEACE70A95347FBA54D42946B4EA72CA8C62AA45F3D3A |
51A4A69CAEE74DD44B965BD9592BA4BBEEDAB377BEB7BB6EDA75B1ED3A4A69FA |
669D0DDEBFE1DD66CF451E119671324F3ADC43A85F69DAF4BE13D4F4F9A6B08E |
D9B4392FB49B3495E65D68789342B0F143E8971677B369DA9E91C5E8577E0EF1 |
8788F55FEDCF11DC780F4FD27C35E2DD63C2F36A36FAD6B706A9ABE9968DA9E9 |
FE18D4AF3C1FA3CFAD6957FE24D36CEF346D27598749BAD057C5B36816FE279B |
C21E0DBCF11F8CFC3DF40FC7BFDA7F59F1EF81A2F873E19F08F85FE18FC31D3F |
C51E34F197857E18782FC51E2DF11E97E06B5F8C9E1DF8351F8FB42B3D63C49E |
38F1B6B97BE07F11F887E0BF81BE20DAF83F5DD7352D2FC1DF102FF57BBF0EDB |
E81FDA177A30F8F34696DA1FB7586A52FF0067C2D1DCCF713369F677374D7969 |
6973069BA779CE2DF5AD3EC6EEF6EDEDB5D5D2AF1E49ECA4134FA75CB69B1323 |
C763270AD87C34654A54E2E33A9CD0FDDCDC27FB953BAA5ECA1174F9E514E3C8 |
9373E69274910826A52B3BEA9775DEDBDDBBE8DFE0B53A41268CD1EA936A96BA |
86A977369FB7438B4DBB80DBDDDCA78874DB078B569EDAD97549ACE0B282E174 |
DBBB99AEBFB46F12CA5FF479A49ADA2965B25B8BBB9D3A1D524996E6DADB5436 |
FA53A1DD6FA85AC573A80BEB8274C866D5A59F6594CAE97BA55B1BACE96F7FA5 |
3C37D6DC4DB2430DD79714EB324ED344B333DB5B46D64B3A0692469AEA19616B |
BB786EA292CDAE74DB8314B120BB786E9A37F4AB5D2ACA28ADF5269F4BBE8FC4 |
3A3C3A95B581D6B4FD57EC334BA9DCE9D3D9EB50D89B96D1B50B9BFD2ED3C9B5 |
D7EDA0F10EA16F0DBEB496B73617F657B7986166F132719C69AD52A9EF28B9C5 |
42ACA6DD5A694AAAF7E9A82BD48C13A6D4652E6A8EA5EEABABDFA75EAADA3DBA |
B7B5ECFA683EDED2DE1DC96570D7B2BAC4A8ED71651ECB3BB9ECBFB40DB1D3FE |
C732B41602CA589D815B683FB3A2B06111F20D452E9790C96D792145B7D32397 |
4890DC4373006884F0429656F34566BA8DCFD93132A35859585924F25DDA4F6D |
34B2D74BA878F6DAFF00C07E1CF0D5D7833C1BA56BDA136AF1EA1E37D3ECF56B |
EF10F8D34FD6F52D16F2C53C476DAEF8966F0A5A5A6865752D2348F10784340F |
0ADC5D69FAAEB5A76BBE22F1058B787ED2C73EE345D1B4BD134E9BED2CDE22D5 |
A1D2B59D0B48924D2B50FF0089469BFF00090D8DDDC78926D3F549F5CD0359D3 |
354D36D4E9BE1A93436D575BD36FE4BD5B9D37C336FA4AEAFE8B9C25ECFD9594 |
2318549734A509C5CF9A30A7C9794A5539BF772E7728B872AA6A525CD185A5EF |
7BB7656D53B6EEF6DADAE893DEFA6EB3E9B74D75AC5A5CD94BA45D47AB411DC4 |
934263D404BA49D35D03C138963CACB15D42048505A3A049EC9EE5AED010446D |
AE1628F51916D2D3ECF1C96F28B6685A4B949634B60EB6709B790CAF693C30C3 |
76EA8B325B45656B6925986BDAFF0089B56F175CB6A7E27F186A3E20D565D03C |
3DE11B1D7AFAFE5BEB9B0D0BE1F786AD3C37E10D1FFB4AD45A5BDBE9DE19F07E |
8FA3E97A4E9AE2DC59693A6C7A6C73DCD85BC0903CC3E5C92CF6F15B89658CF9 |
B94F2A4B99A3555B6F36E903B08E35F3233BA09D82BA98F688DA397AA118CA5C |
F0DD4AF26AA2E6E594EAD58C650A3251BB728559C5DFDA29B8BE7B2466DB5A3E |
BB5D76495D369F44D27D37F303711AAADC34D1B5B4BF65481A3567DD25CCC228 |
D84A8CEB2473B4D6EB1ED8D553E691E56471E56CE93ABEADA0EA567ACE85A9EA |
3A2EAFA74EB73A7EABA4DEDCE9DA958DC26765C59DF59CB0DD5ACEB93B658254 |
917270C335936EE97A34F8ED2F34FF003B5752B665EE00B7B6B8F31E0FB3EA57 |
939B4D2E29A2746B9945BEA93D98B10676D423920D422B08FC4722F8675FD5BC |
21E25B4BBD375BD2AF2E748D534ABBB1B89258F50B7BAB8D3EFB4D78A38A6F32 |
7B6BA825B6B8401A3F3730ABC9224C91ECEB538479E5521183718C65292847DA |
493925CD293B7346CE31B5D2B59CAE929E56DD9277ECB576D174DFCFCF7B1D7E |
A5E1EBDD0D343B6D652C34F9BC49A6E95E21B796E66BB6BFD1F47D427D421B07 |
D5B4FB5F36E2C22D62C05A789AD21B8D32E2FF0050F0D5DF8775DD1F7E99ADDB |
B6A1E63AAEAF0C37F0E9F27DAD1269A04965FB65B5859A44B1B4B3BFDB637176 |
9346B3DBC925A996D649552DC2110DCEDBDB9A53A259DAC16E1A195D8192D277 |
B8964B08E3589A4B7786FAE96E916081ADED95E25F2BCDB9B7BD4B45B59F6D73 |
3E2A921FED2D4ED66D56E563B3B2416F269E23D4F4C7D5184E8B622F6CAFE1B1 |
FB0EA7A6CB733C7ABDB0D68DC3AC36F0E34D9EE6E2D38F1B899430B0A91718CA |
53A69AE6838C938B9CE9B7539134E09DDB8E97D5594B96E10F79A7B59F477F27 |
A5EDE5AF4F439FBBD73ED36F76174CB7F2AE2CF48B463B6E56CEC750B4B28AD2 |
5D4ACAD7ED12450EA17F6B69340C26966B00B3EA17561A5D84B1E8E9A0D9D075 |
99B45B2D66DEE74FD0F55D26FA4B3D2F518EEE2F0F5DEB566B712C92DC5DF84A |
F352B5D56E74ABEB8B0B0BDD3A6D7F4ED3EFEC2C7ED763717711D497C3B345C9 |
3B172090A08545F9511061115149545552C554177237C8FBA4919A46663706A9 |
A9ADEDAEA4BA8DF2EA363F60FB0DF8BBB817B67FD9515BDBE97F65BA1279F6FF |
00D9B05ADAC361E4C89F638ADADE3B7F2D218D57E45E226E6A6E73E65CD14D72 |
FC337373BAEADB96AA4DB92BA735EEDBAECBFAFEBC8DDBED5D6EACBC2D717D79 |
FF00091DD697E6D9DC69FAD4BE20696D74AD3E5B4FECCF0FACE9AB7D97FE114F |
B2F98DA70D126D1358B5BDBDF10DADCC50DADBE81A8DD6ADF68967A9F8C75BD0 |
BED9069ADA44173A1E8F15A78575CB5BFF0013EADE1DB28F41D0EC21F0D4305D |
5FE9FE24F17DFD9DB4FAB0D564B55B4D46FB54BAB966BC58B4DB9E36FB54D4F5 |
3FB1FF00696A37DA87F67D8DBE9761F6EBBB8BBFB0E9969BFECBA759FDA2493E |
CD636DE649F67B48765BC3BDFCB8D773675BFB4EDAC23D43465B5D2AFEC24827 |
B29F53D3ED23179A9DCD9DCEA371A46B367A9F88F4ABDD5B4783ED17166B7B67 |
A45AF86E4D6743B1874ED4A0B5BF9AE6FC3552126F9D45C79A9B6E4A4A5270A7 |
2872B51A8E569BB4A72527C9672846F254E47F5FD69D3A7E258F1058EB5E129E |
6F0CDFA3689AAC765FD9DE2ED0E09B56B7BF86FEDB59B9BC3A3F8C6C6EE4FB34 |
3AF6952C362B79A35BC69168B359D959EAB6967E2DB0D7208393ADDBFB595EF4 |
69706BD63AF5AE956370B617F1DE5ED9E94B650C575AE5D5AE9A3C4D6DA2DD41 |
8BAB8D40C761F61B69750D6269A3D3ADEF6EAFEDDAEE84D75179525AD9DBF936 |
B37F66CD37DA96CAF6F7EDB65652417125BEA2B616B756B637575757B7034D85 |
962F29AC21D424D52EB4BB5D42B3A9F13D5A8C7DC8ABA9A5CB76D4651F724B99 |
DE528B4A4E7ED147DEB07F5D882E9AD9EE6E1ECA19EDECDA799AD20BAB88EF2E |
60B66918C10DC5DC56B6315D4F1C45126B88ACACE39E456952D6DD58449D95D2 |
DEEA7A3DBF9FE2CB19EDED6C41B9866B98AD62922F0F69560DA0D9C96FBD3C45 |
AEEBB63378A2F7C25A6CB79A04965A6D95AC90E8DE20BAF07693AADD787B8DBA |
BAB9BEB9B8BDBDB89EF2F2F279AEAEEEEEA692E2E6EAE6E246967B8B89E56796 |
79E795DE59A695DA49246677666624EB4B3E99A779D0D827DB6FA2FB4D8B6ACD |
2DBDEE8B7D6F2FF6D59DDDE58691AB7876D6FAD7ED56375A4C9A4DC5DC916A7A |
45DD95DEA4A915F5ED845E1F2124B9EEFDD7E6E2DEAF4E483B34D5D38BB455EC |
A70BA6C3B13E125BEB6BEB69753F0DAEB4D06977BA15D3CBA4F86F46D73C3F67 |
1C7A4DB6A1A36BBAB6B5E1AD0A582EC25F7FC24B0EA7A5378D20F10E91A7DB4D |
6726A171F1024F0EF5BA969D1EB3E1EF00D8DDFC5CD33585BAF0F43A3FF62EAF |
068FB7E1BACFA9594E965A85FEA3ADBF930C97D7BE11906B9E163AAEAD6DE086 |
D7B4ED5EDF4B97C05ADF81E1F28934BB0B3B9F1135C0D56FF4CD267BBD2EC2FF |
004F8F4EFB35CEAD3C977168A351D4ACEFB5AD26CE09ADECAFF57F2F4CBCD717 |
568F4B9F4DD32F96DAE5FC47A6EBBEADAC14F084563BAC353B8D3EDD20D7753B |
7B3D3AF24BAB6F11FD8B49D434CF17EAF792DC59E9FA35A786F42D16C753B3BE |
D034ED0134AD634C82DED6397C417FAD75C2A538AA8A54A49CA1CB38AAB55FB4 |
4ABC7E2509439A4E778BE794A2E11BC631A9184E4ADFD69A68D75FF87BF9684B |
A94BA4C5A1D8F88B4EF0FC16A7C473F89F41D4B4E96DDA5F0DE9D269769E199E |
CBFE118B9BEF10EB3E2F4D56CA4BFB6D76FF0055BEBDB1B69E7BF8B4182DAFF4 |
28F5BB1BFCCBFBBB5D4756D22EA5B2D174DB2BFD0345D276CF793DDD9D93E9FA |
243E11B8F10EA50F8742EAB6979FDA3A65C78A0E9F2D94D7923C96F34FA7EBBA |
7DE47FDAB72CF40D2AFF00C41E1FD12EAEAFB47B5D46F86989716FE19D62FF00 |
C4F7165A93457FE1BF11DFF864EA32DACFFDB76BACD85BDAD8F86757BA97FB3E |
C1AE6DEC351BA96CEEBC45CA477DB6CA4B192CEC6743E73DBDC496FE5DED9DC5 |
C4BA6BCD711DE5ABDBCF75FB8D3459C367AA3EA1A659C57DA95C58D8DB6A376D |
7CB8D494B5BA8460E51F723ECDC5D6A30873F346294A1093AB37CB151A5CF394 |
62DF249A3F4FC9FF00C37AFDE5FBA8ECAD6CADE37D36F9BEDB622FF4BD5E68E5 |
D2E5BA96696C2D2F964B6926D52C754D0F4BBED2FC47A5E9B71A71D2EF6EAF66 |
92FB52BA5FB10F0F5AE4ADBC8D6D35D86804504F6F6EE8D756C972D25D47752C |
4D0D93CCB797102AD9CA2E2EA0824B6B391ED62BB9A096FAC92E35B5D8ACA396 |
C8DA6AF63AC48D63E4DEC9A6E932E93656D2E9B7B7BA3D9C70ACD67A7497FF00 |
6FD1F4ED2F5C93529AC2D6F6E65D5A45D5A36D622D42593D266F0C5DF8A7E1C7 |
8AFC6B16B7F0C34DB6F0478DF45F0EDBF8357C4F7F1FC40D422F1B7F6E5EE9F0 |
7C3FF0BEAB757F71ADF80F48BCD235DBFD56EF4B95DB42D4F5881F5F9C4BE21D |
012E9468FB4752D6BD3A7CD1843964E4942536F9A0DC7DD8A7292729D45F036D |
A94A25FF003B7E365F7B3C6C94D8A02B799B9CB316050A109B15536065656121 |
76323070C8022146692DC5E75BECBA8BEDA2D7CC8229678B75AEE993CABA7B74 |
B85F3A359239231240CDBDBF7715D18158796AFBB8F4A4B5D29EC2F350B9BD9A |
D267D6EDEEF4CB6B2B5D3EFD751BD8ADEDB4ABC8756D425D62D25D263D3AF66B |
EBBB1D0A68351BABDD2D34FB9B6B08357D49D0EA33AD98D3669EE5EC05CC9731 |
5B34AF3D9D9CF771456D7F7D6FA6C8E96ADA95C5ADB5AC02E8B46E22B78D4B79 |
B1DACF69942CA5EF4B95F2A71946CF5E5BA4ECEDAAD1DF6969371F79A62C8966 |
D2CA6EE59ADA52CACAB65A72B5BCB1B471B25CC6B717965244B7418DC244B6F1 |
C4A922185228996189BE5693FF003FBA8FFE0AEDBFF9715A5ACDAE9CDABEAAB6 |
9AB17B38F52BE5B3BBD674D9B4BD5F51B36BA966B4BFD5748D2AE7C49A768FA9 |
4F6F2C42FB48B4D66FE2D32E925B217776D09BCB8CDFB15B7FD0634EFF00BF5A |
B7FF002AEB771B397EEA83F7A5AD4ADC93DDE928FD623CB25B3495AEB46D6AE6 |
FE6FE4AEBFF492194D93DBDB08239E0B98A093EDD25C5D2DC457B70D76FE49B1 |
821B081AC523B3785258AEAEEF7CD96DEE2E52E6113C361154A2A694C523CF2C |
4AB04666261B52D248E914864655594A6D758155237691D6472E8CA8E3CC31F3 |
3F7B5F753492B25CB7493D745CB74924F5529369DA527265176CAEE34B6BED3E |
EA4BEFB2DEFD9A68A283506B5B08B54B591E3B4D4F53B41657DFDA31D958DE6A |
D6F0C30ADADE44DA84924178B1FDA2D2F64BC48744D7AEA3D3353D335FB7D235 |
79D34FD621D3E79747D6E1B0BC65B4D4E2D2BC49A65ADD49A66A49147749A7EB |
FA3DB4EF6B30B6D534C86433DAAE4514733B256578BBC65AA92576EC9A76B5DD |
F54DA7B34AE984C64899E12D6EA91A2C692AC1248AF3ED3F3C85E76B958E6957 |
82523102100ADBE32AD7EF350B6BCB0B288E9D041A9DBCF38B9D4EDFCBB68EF7 |
4E4D3B46B0D2AC5B4CB6820B38A7B06D3AFEEEEB5450F7FAD5CEAF34FA9C935C |
C1F689B311DE37592366491195D1D18ABA3A90CACACA432B2B00558104100839 |
AB37F617BA55EDD69BA95ACF637F633C96D7967731B43716F710B14922963701 |
91D1810411EE320834EF2E5934BDD6D464F923CA9BD61ADBDD93E495AD67CAA6 |
936A534036CEF6F34EBAB7BFD3EEEE6C2FAD2549ED6F2CE796D6EADA78CEE49A |
DEE20749A1950F29246EAEA79041A2D2182795D2E2F22B18D6DAF6659A68EE25 |
479EDACE7B8B6B30B6B14D209750B98A2B08246416F0CF731CD772DBDA24D3C7 |
5A8A4A4D593F7A3197372B6F95B76BECD35CCA29369A6D25AE8AC0E577425919 |
918ABA12AC5494911A39149041DAF1B323AF4646656054915D2DF69DA97876D2 |
CC6A3637D1D878A74DB8D574A3756F3D8C1A9E996BA9EADA1D8EB56174921875 |
2B68B59D2B57B7636B25EE94F716135B8B99AEE073654B409F4AB6BF926D6239 |
E5B65D2B5F16BF6679A3962D69F41D4A3F0E5C87826B79152CFC40DA65D4BFBC |
286285C4B15C445E0933A2369C89D2E7FE3DE60AD14B17FC7DFCED6EE51E1FF8 |
F7FF00571CD107F37EFCE937DDB7AD69B508F329479E4E5185E4FDC56873B943 |
964A51AB19B87BDEEB519DD3D04F5FD7CFE7D2DBFDC745676AEE91BE951C925B |
DA893509AF66BDD3F4D49EE746B67D5A4022D444A897D69A7CD796B058C13DC3 |
6A93C71BD95BDE4B1B5BCFAD6D71A9AA5B5E68B6FA947792590B69E5D3EE2EF4 |
FB3BBB7BBB68EC2786F2EACAF2DD65119B9D42DBEC367245041A65D476D76D04 |
1A7DDE9CBCE2113DCB5EC43ED121BDB79E6902DCFDAD67BEBA59921B6F225B08 |
AEAE611098CA4296534B2DC5E3DA46D6F6B1DF5AFD4BAEFED13E09D63F644F03 |
7ECDA7E077C24B2F16F847E25788FE21DFFC72B7D3FC4F17C5BD7ED75CD0740D |
32DFC3973E20FF0084835DD2A6D2E3B3D360D3E3D0D34ED17C33A4BE85A6EAF6 |
7E1BB4F14EBFF1035BF147A787953E5A9CD55508469CA746F28A84A506942345 |
FB29BA7393E652BFB7725CFED2726A7294493D34E6BBB3B744FBEAAF6D2DB59D |
AC92DBC1BC27A7E95A9EB1616F7DE25D3349B46BDB6B9B9D73C446E9B48D21E4 |
B9B74D4F56D4BFB1F4ED5FC4D25B4F359C1FD9DFD9DA55CEA22568A3D434E5B4 |
BB325EF57E16D67C39A0F897C7979AD5CDEEA37F3FC32F88BA0F86960B6D1F47 |
D32FB5BD7340BBF0E4575A949E208DEE60D321D0B50D775DD16DAF3465F15DEE |
A763E18D1B4E3A6EABA8DA788349F2E96ED5ED278E1758EEE3BB3773CD35C5A2 |
CC6E6DDA45B77B5BCB531B5FCCB6913BFDA1D6285AE64BD973777DA9E9E21FA2 |
FC2DA16A3F13BE197C50B883E1DDA6ADAB7C28F8297DA9FF0068F85FC290CF75 |
A2E94BF1EFC13E22D6BE20788EFF00C17E149F51D41AD74DF19EABE193E2EF89 |
5AD5EAE9BE16D56C34783C5D6BE18D3FC09E13D3B5A52752938518C653A1078A |
BB555C66E11A9787C528C670A7F0C6A4A5ECE578C1FBA924F47777B37CBD34BB |
5AF4D1BDF4F3EBAFCF96FA5DFEB565130BEDFA6787ED6E925B9BC9D4C56766BA |
84973729A3C137977735B893518AF93498956E5EEEFF0054D462B4581358BCB6 |
DAD02FB4FF000EF8AF47D521D3344F10BE98965A97F63EBD693C9E1DD5174CB4 |
8F55B71A9F9575A35EDBC3AAFD8ADD354B7B6BA8A64B4BDBC316B905CBEFB7E8 |
35BB1F1668FA5E97E08F11C9A8DBD8F85B5BF16DB378599AC6CAEBC3BAA41ABD |
A1D7F50F13F876E3550DA4EB1A89D1AD34DDDE2CD2B4FBDBCB1D32D6257D42C3 |
40D2E2AE5C5D38B6B6BC6D46D12156D356E0DB5BDBA7D99AE34E6B7DF1C165AB |
C7706682249ECAE025B5A5D88279E6B5564D36C058A8D18D2F64F924AA47D854 |
A9526E2DC7D9413A90873558C610A51714A7FBC56779DACA312F7BEAACEE9257 |
EBB3D13D5FC9F63ACF8A537815FC73AE5F7823C19AFF00843C3C23D1164F0BF8 |
A7C5963E20F13E91ABCDE16D26E3C4DA7EA3E23D1EC7C37A61B7BDF10A78A92C |
F4993C349E23D0F4B8ECFC2FE2696F7C5716A1AC4FC0886E63D0EC2544B19ADA |
092F354B5169A85836AF6D737D049A75C3DFFD9231A945F65B8F0EC1AAD8E9F7 |
6F11B5B1692F618A7B6D46EAFD61B768ADC45F69D463855BEC4D15CDBC377732 |
6A16A2E9AD1EE627BB571A7DCE8D1433C565347636F72AAACB6FBD5D5E48DA5B |
381DAEECFEC5B6CF7DBD94CED2C1335E0B8B8D422D412C15EE2E5E38502D85B1 |
BF9248999AD1EE99952E20830A93539CAAC9D3873FB49CA107413529CD4E3271 |
842529AB4149AA9185194E319539AA7529C9D2ECAEEDA6B7EDDDEDF26DF46AE9 |
95E3F32DAD12EADE492D229B11CB0DF2ADC5AEA124314EE2682136A61B98E39A |
3684C53412AE9F732DA3B5DB1999EDA685AF6DA0FB709AFEC9E3B016F135BA5B |
C88F14DE660322CD6B25942C25B495E4F26EA4FB45DC1A9B3ACD7D64D3548259 |
34D56576FF008F8FB2FDB2CC05492EB4E9E38AED123BE88492431DC46425D448 |
F03ED78032DC7EF52DAFC51E9B15C400C935EC765A98B74B1B658E7FED03BE30 |
6F479B706365BD31945B7B4B5991A0B6B6B4B9B849678AF65E7A7AF2DA4E0E0B |
95C2557D9FB2A8DFC694756959D470A6A1554A2E12524D4A6FF5ECAF75DBCBB5 |
DE9FA68C9A87DBB4EB8BFB86864BD5D31E29C41753C73B4735C8D3D0C91C525B |
8B753218AEA5B2D9A8D84DB0C860D2A4BFDF792DAA7846DF500F1FDBF598AEAC |
35274B089A1D361D2F54B5B8373A67DA2F752D2F553A9E913DB5B46750510689 |
716E2E2E2DE5D53EC76725F6A5A727C3CF14695E0CF09FC40D56FB48F0FF0087 |
BC5B0F8D7FE109D4A7D65EEAFB5DB9F054F636DE21D0E0B2D07FB5EEBC3F7D15 |
D6AB07D8A1F12DB78762D446A1F6A8AEA7B2B9B59DF33C2BE26FF842FC470EB7 |
69A7E99A9410DB6BDA4469AF787F47F10DAC71EA3697DA7C9710DB5DB4BA55EE |
AD6769A8477561A9CA253A65F35ADDDB4522D9D997DD55729D075E14E37FABBA |
95AA414E6937197B67EFC5FEF694D29C6B465194792B47E35382B68F95ED7B25 |
B5F6B6DD1F6D53D3A1ADADF8AE5D7F519BC4978B6E27B886D34EB4B2F0EE8DA5 |
F87AD238B40B112C37571A469BA6C7A249776D6FFD9E350D43EC4B2DC6A13EAB |
AD4AB7DA806D52EEEDAE8DACF8826D2B4F6BCB3B28EFA47D3AEAFB5892EACEC2 |
C9AF26B3824D5999960BE888335F3486E2DEDECEDB4F59ECA3B6FB1389AFFCE9 |
2F67B5B2B8B25B91F62BE7D26EEEB4AB7BAB916B757362B722D66BF54DC93BC3 |
05CDE168E3BB864B69B54C4262786E2DA0F7DF830FAEF88FC57A4D9E89A2788B |
54B8D134D93C45E2397C15A64D2DDE93E02F05F86ED2F3C67E23BF87C23BB59B |
2D2F42F08585FDFF0089F5E68DE482C2D754D5F54BCB58E1BF4B0EEC1578E2EB |
7B0C44E6956E5E6507249D4751CA6A52BCA4D54B27EF72B845B87BAE9C67389A |
705CD14BDDEFDB65A68AEBFADF4E37C53F0F67F09E816B2B789EC27D56EE5586 |
F3C30FE7C77DA1C0AB7512CD7BA9C6E74AD3AEE5B87D5ADEFBC3FA8DCDB5D58C |
5A85B457515C6A57463B4E37528B4D96D6CA69FEDF1DCF92B68903B4B1FD922B |
081E19C09EFAD2D2D2F1AD5A08F7D85A8B491F50B8BA885D4BE741E4FD11E35B |
BF0C25B7C46B39F469BC73ACF88AF74DBFF0978AEDF5F161A7E896F777AFACEA |
D77AE787EDF414975DBDBED3AEA1B29EC6C24D12EB41D66DE7FB25B5CB288A0F |
9B2E41492E12DA1D3AD3CAB786E3ED33CB6D6BA8C5731AADC4ED0C105F4CD6B7 |
B3DD5A1852C21426C11A38561B2FB4DC493566587A5859CA1469A74A74D45425 |
ED6AA84E12A92E6839292E67153D6351D2873C5CA30514C29C9C926DEA9F4B2B |
AD159FE1D2FA798EB4B6B8FB38BD86F94CED7F797534F142F7534B69A5247792 |
DDCD2CAE36AADC889A1B1BC8AD1AEEE6E2D65BA76516CD07372F981BCA91F7F9 |
1BA25025596345123B32C4E8CF198CC8F2480C4C6376769149DE58DD69238DA2 |
BC686496796F5EE916F656B88E6B6493205CAB5A422EBCE9C4B14B711DC81234 |
3711C96D092AED4A589A26C1F991B718A50B22C73C6B23C5E6C5E6A46ED1B3C6 |
EA0B22B0656465575651E1569C65184629AE45AFBF3926A4A0F9B965A479E69C |
9F2E89B4A4E52B49EA96FE7E44745395DD43AAB32AC8A1240AC40740EB205700 |
E1944888E15B237A2B6372821B5CC3248A3F358AF991C788E69374ADB14F930B |
CBE583839925D9E542BFC733A2646EC88E8A72BBA12C8CC8C55D09562A4A488D |
1C8A4820ED78D991D7A32332B02A48A7A69EBABF2D3A796BEB7034ED746BFBA6 |
B789209D2E7528219B42B3365A8CB73E23927D597458ED7434B5B3B85BC9DAF1 |
6F5159DE0B67934CBFB28AE1F53482C2E1E96B75A8DAC4E92E90B1E9B6D241B5 |
EE746D22E8A635AD6184AB70F6377ACDC98ED6F163BA1FDA33832E8BE1F8EE05 |
CDCE87A53D5D36F3EC37B0DC33DF2C1FBCB7BE4D36FBFB36F6E74CBC8A4B3D52 |
C61BE36F7696FF00DA1A74F756323CD67796E62B8912E2CEEA0692DE48216B65 |
8EE84F0CF24AF02AD93C3711C11DBDC8B9B7779AEA27B5B86BC81ACD6EE05B78 |
A5B1916E67B7BB374F15ACB657969C2CB75752525CCD5D2519277E56AEE5756B |
34928DECFDF020AB729B27B7B610473C17314127DBA4B8BA5B88AF6E1AEDFC93 |
63043610358A4766F0A4B15D5DDEF9B2DBDC5CA5CC22786C22A9454276BE89DD |
59DD27D53BA7BA774B55676BA778B69815A765771A5B5F69F7525F7D96F7ECD3 |
45141A835AD845AA5AC8F1DA6A7A9DA0B2BEFED18ECAC6F356B7861856D6F226 |
D424920BC58FED1697B4A53148F3CB12AC11998986D4B4923A4521919556529B |
5D605548DDA47591CBA32A38F30C70D3BF24AE9A7BABEE9AD62F4693B495F469 |
3B3D901AF7890E89AF5D47A66A7A66BF6FA46AF3A69FAC43A7CF2E8FADC36178 |
CB69A9C5A578934CB5BA934CD49228EE934FD7F47B69DED6616DAA6990C867B5 |
5CE3244CF096B7548D16349560924579F69F9E42F3B5CAC734ABC12918810805 |
6DF1956869C8EF1BAC91B32488CAE8E8C55D1D48656565219595802AC0820804 |
1CD1CDAF45172BDADCCA3AFD9E66DF44B577692526C0D3BCD42DAF2C2CA23A74 |
106A76F3CE2E753B7F2EDA3BDD3934ED1AC34AB16D32DA082CE29EC1B4EBFBBB |
AD5143DFEB573ABCD3EA724D7307DA26A7677B79A75D5BDFE9F7773617D692A4 |
F6B79673CB6B756D3C67724D6F7103A4D0CA879492375753C820D3AFEC2F74AB |
DBAD3752B59EC6FEC6792DAF2CEE63686E2DEE216292452C6E0323A3020823DC |
64106AA53939A9B72BC2A41A4F4E494650D354926A69AF79BF79CAF293726D87 |
F5DCB3690C13CAE97179158C6B6D7B32CD347712A3CF6D673DC5B5985B58A690 |
4BA85CC5158412320B7867B98E6BB96DED1269E3815DD096466462AE84AB1525 |
24468E45241076BC6CC8EBD19199581524536B6B409F4AB6BF926D6239E5B65D |
2B5F16BF6679A3962D69F41D4A3F0E5C87826B79152CFC40DA65D4BFBC286285 |
C4B15C445E09082E6942378C2F34BDA36D25CCE2AF277B28C3595D24F5776F44 |
82CDFF0087E5D1E1D32E3588F56B0835DB19B56D0A67D24791AAE8D16ADA9E86 |
353B29E6BEB782EED9B54D1B54B2FB469F25ED8FDA2CAE204BD9278278E1CDF2 |
B49FF9FDD47FF0576DFF00CB8AA0C5309B5583052242CC1833EF7219004528BE |
59452ACD212EAEFBC2B88D1B56EA53BFBB429DACBE29D694B657BB53826EF7DA |
297457DDAB3EEFEE5FE4C73B067765458D599984685CA2024908A646790AA8F9 |
54BBBBE00DCCCD925B57AEE7D42F12DEEEFAE6E6ED5228F4DB69AEAE5EE1E3B7 |
D32DADA1B7B28BCD91E48ADACAD1EDA0B6840582180243000919558A496036B6 |
D025BC4278E5B99A7BCC5C0B8944C208E2B370D772D9B5B5A2DBB5C5BC90D95A |
5D34FA85E47772DDC10D88B7CDAD5F4D149732E56D4ACD5A2AEB54F996B6E5D5 |
74196EFEC2CED2D7479ED75AD3F549B51D3E4BBBFB2B3835686E3C3F749A8DF5 |
9A695A949A8E9B636973792DA5ADB6AA9368B73AAE9CB69A95B4125EA6A30DF5 |
9DAE6AA972402A08576F9DD1061119D80676552C554844077C8FB638D5A46553 |
66FEF64D46F6EAFA58AD2092EE792E1E0B0B3B6D3ECA16918B18ED6C6CE286D6 |
D604CED8E182248D1400077AA9449C799F2AF76F656BABA5A735A529B4E56E66 |
AED26DA5A2483FAFEB6D828A924108F2FCA791F31A997CC8962D931CEF48F6CD |
37991AF1B656F299F2730A639D9F0DE87FF0926B565A2FF6C687A0FDB7ED3FF1 |
36F12EA1FD97A2DA7D9ED27BBFF4DBFF00267F23CFF23ECD6DFBA7F36EE6821F |
97CCDC08C2529C6115794A518C526B5949A495EF6D5B5AB765D40C2A73BBC8EF |
248CCF23B33BBBB16777625999D9896666624B312492492734DA2A4072B14248 |
0A49575F9D11C61D19188575650C158947037C6FB648D9645561E85A069969E3 |
9D7BC37E1BF0FE9BA1F86F51B8D32DF4FBE975CF1BD8786FC3BAFEA1A6B5F6A5 |
7D7DAAEBDE31D534FD2BC3D2EAD6705A5BDBDAFF006A259C9AC5A416FA5DA7DA |
B56B5B5B5F3BA72B052494571B5D76B970016465571B191B746C448809285D54 |
48AF1EE46D6954F672578C650728B946518BBA4F54A4E3294399692715AAD24A |
4BDD1357F27ADBFAD2E7466E6E1E3B0D767D5CCF38BBB9B0BD82DA3923D474DB |
4995A58A5134D6D15939D412E3555B11693DC3D89B122E059A3D82BE3B4B65E4 |
CAAB6D234EF1C0B1CDE718A185956DCCEFF662277964774B84F31AED61659BCC |
4B480AA451C108B7276DC34D1A9607CD85526288124DCBF67778048CF218B0DF |
6988468242525665082B46B23C8819023092DE39122B9048954AC7705D6389D4 |
45B8BB7D9DD257511B5BAC72318EE5565349B69DF9B9B9A5ED64E5C8A139A555 |
C9C6528C60EF7D66BF7528F2A8532DFD6DF97CFF005F3EBFC3373A05BF88619B |
C57A7DF6BFA2B69D3C0B6BA74C9A46A17D75058B5A68ADA5DCDC68BAE41E5DBE |
B36D662E23BAD341D5B4AB6BFD3649F4ABCBEFB559FEC6FEC7FE29FD9BEF7C33 |
FB65CDF18BE0AFED1335CD9FEC81E069BE1BDF781BC51A2F8BBE2BE97E027F8D |
1F011759D37C493C9F0B61D13E1FF83BC47F0BD2E3C29E1FF8D1A849E0A9BE1B |
7C10F1A78B749D3BC37F1DC7C42F849A67C38FC433360968916DD8B4FCC2F383 |
E54E8236B7CBCCE4C2B1EF419CC8E92C8B3C932950BEC965E26F0A7857C31E28 |
B4D37558B5CD5FE20FC37D12DE6583C23F645F0878BF4AF89FE08D77FB2E696F |
B51B7B78258B44F05EAF7EBE24F0FC1ACDA6A569E2AB3D1AE74BB1B8BCD5FF00 |
E119F4B018D8D2553DA38A84272AD2E492855AADC64E34E339FEF6A41D4B4654 |
D59384E7ED2724E4A79CE37B5B7B72AD1B4BCECB45A75EE95B6BAEA7E2A6A9E0 |
CD0EEBC41F0C2CA3F8A36FA0781FC51E3F1A2F83F5DF89F75A9681A1F8C758BC |
F03E91AFEBB61E11BBF83BE055D1EE358B6F027D93C416F7965E1DF135FC5A7F |
C3C8BC496D6577F0E2EBC35E21F145D4EE2E624B1B481A3834D596F31613DE8B |
464B392EEF6596449A7B7BA10DC4A6C88967BAFB45A341BECD16E2E3ECF552FF |
005CD4F5ED49755D62FF0050D47528E0D2AD96F6EB5495AE134ED034BB7D32C2 |
CA0B8BD6B87812C34BD3AC2C346B68645B5D32D2CEDB4DD36C56D62B3B482BDE |
DDDB4D71718124F03C69F6794FD962BBF38216596F675D3D1EE24DF34BF6C518 |
6B89426EBEB9104370FCF3C5734AA4E2E14E129BA6A10A6A339D1776A329B526 |
9250A7CCA1194632719249BD6946C92776D6B76DB4A5A7A777E7B96D2E2C91E4 |
BC8A399AE2253247892E2F62B4894DBADA40C248EC26B6589258F4D5BF5BDB99 |
20921796D20495EC2E63CA6677325CC73B095964F3FCCB826E5FCC48A2B890C8 |
C910996EE4B8947931B4D38844DF680D1234F240EEACAA1618E32BD590CC59FF |
0077127CDE64B228CB46F2FC8A9FBC9A503110862886964752AEDBF3E57CCE15 |
E40B0466289165606448D23213CA571195488329F2A2D9C93AAE7A3E54936D7B |
38A8AE77F6AC9475D229B69B6AFAE91B5DADFD5FF323AB33190471C2F2C6C209 |
278D6188AB2A36E42F3F9912F913F9E708B3ACD348F1DBA23110476D98154B07 |
20AE114336E745241754C22B30691B73825230CE103C857CB47656D629B49EFE |
F2B6ED26AF7DBAEB15BE89ADAF6683A9F0DF85FC4BE2F9F50D23C29A5DF6B72D |
8E8F7FE28D520B68620D69A5786F4DB8BED5F54B877936C363A5DA3DDC92CCD3 |
20922DACD1895A389706EE396CEE6EECD9A04785DACAE7EC37915ED9CED6B22A |
48D15E5A5CDD5A5F412CF00B84B8B5B89ECA66D93DA3983C922A5156E51708A4 |
A6A69CAEDCD3872B6DA8C21C8A50B734B9AF524A4DDEC9EE77FF002FCDF5FB8B |
3F6A98472440C6A92C6B1481208119E356B560ACE91AB9F9ECE09325B71904B2 |
125EE2E1A592DAE562992667B98245D88B7162F1DBC90C6207819963444F3643 |
989DFF007D035C2ACE92CBE65C9B986956A0D52F1E6C892D2D3CDD3E1D225783 |
4FB2B488D8C71456DBA78AC6CD7CD9DA3891EEEFFCA9752BC944973713DC5D4B |
2492384FDE8B94E6B95AE57653B59B6BE29C12B3775AAB5DC934F70D9D4FC59A |
C5EDCC97B2C86C6F677495EDEC6DE3B1D35617905F24B158286810DC3CA9B12D |
A1B5B58AC624B78E39ADAE4C70D2BED423BC816692DD94C976EF705162823B99 |
27F267BEFB221B3B95B69A1586C6D9AE7EDAD2C9108A796D1E4BEBDCFA545F06 |
FC6F3FC0DB8FDA1B556D1A1F86B69E345F843A0DC4BE24F0DDCF88354F1FFF00 |
6641E25FEC31E0DB6D793C7161A359F85AE356D721F1A5EF87DFC1E6F7494F0B |
FF006A36A9776DA7D78D9951A3756894CC5ADF64CB88C2450C5246F19863558D |
DA62617799BF79BE16662EF3C8C7AAB56C4EAAB55A8D57A6AA4555D6F0779293 |
8A735173927C8ED1724E327C94A5694A51E8968EDA7DDF875FF337ACA3B7D4E4 |
91B58D5A3B6B6B0D035016532D85C5E86BAB2D39A4D2B4A960B236D716DF6BD4 |
AE2DB4D4D56E835943752F9D2B5E5B43223DA13F863596F0F583D9DB78363D33 |
C3DA9DBEB5AEC2DACEBD378935D864D7355D3EFEEEC25BA78B4E92F84DA3F856 |
383498AD74EB382D62D5EEE39EE24BF9A5E6A592078F6A43223A48C22732C254 |
5B167758E558ED2279EE43B9CDD34A018C2C4B022246125FECBD4FFB33FB6BFB |
3AFBFB1FEDDFD97FDADF64B8FECCFED3FB3FDAFF00B3BEDFE5FD97EDDF65FF00 |
49FB279BF68FB3FEFBCBF2FE6AC5D56DAF72157695572539CAA28B8BE594DB55 |
29C172A85E94A9C9C1B529B6F476F36BB5BA7CB67F3BEA51AD78F41D6A4D166F |
128D2B531E1BB7D4E2D126F111D3AF9B438B5CB8B1BBD4ACF4497558EDDECA3D |
5EF6CAC6EEE6D34F9265B896DEDE7BAD82D6DE79A3C8AD47D4A26D16DB485D2F |
4F8A68354BED4A6D6A37D4FF00B56FE2BAB4D3ED6DB4BBC8DF517D18E9FA4B59 |
DDDDE98F6DA45B6A6B73AD6ACB7BA8DEDAB585B69F847975E6E916E2BBCB4B27 |
64F47D76F54332EA79AE249E3B589D6055B381ADE230DADB5BC8F1B5CDC5D96B |
A96086396FA712DD4A8B757AF717296CB6F64932D9D9DA41041454DF7F3D1F9E |
B7D7E693F54015D6784FC2371E2E7F1025B6B9E13D0DBC3DE18D57C5321F1678 |
974BF0D26AD0E926D83E89E1F93559A08F59F13DF9B95FECAD02D19AFB50115C |
B408560908E4E9CCA00421D58B2966550F98CEF75D8FB9554B15512031974D8E |
A0B0903A2545C54939479A2B78F372DFA68F577BBBE89FA5AE0369CEC19DD951 |
635666611A172880924229919E42AA3E552EEEF8037333649D1D2B4DB8D66F6C |
B47D3A192E758D5753D3F4DD2EDC496F0C371717D2B5AC70BCD712451C524B75 |
2DA24524B2C76E8AD334F222856115DCFA85E25BDDDF5CDCDDAA451E9B6D35D5 |
CBDC3C76FA65B5B436F65179B23C915B595A3DB416D080B04300486001232AAF |
95F27359DBA351BC746949397D96B9A175AFC70BDAF1028D6A5FD859DA5AE8F3 |
DAEB5A7EA936A3A7C9777F656706AD0DC787EE9351BEB34D2B529351D36C6D2E |
6F25B4B5B6D5526D16E755D396D352B6824BD4D461BEB3B5A924B01B5B6812DE |
213C72DCCD3DE62E05C4A261047159B86BB96CDADAD16DDAE2DE486CAD2E9A7D |
42F23BB96EE086C45BBAFEF64D46F6EAFA58AD2092EE792E1E0B0B3B6D3ECA16 |
918B18ED6C6CE286D6D604CED8E182248D1400077A3DD5195ECE4F9397E2D13F |
7A4D3524B995941A94649F34AD6714C3FAFEBFA5B15954B92015042BB7CEE883 |
088CEC033B2A962AA42203BE47DB1C6AD232A96D15248211E5F94F23E63532F9 |
912C5B2639DE91ED9A6F3235E36CADE533E4E614C7336D3D37D575DACB77E76B |
FCBA847456EF86F43FF84935AB2D17FB6343D07EDBF69FF89B789750FECBD16D |
3ECF693DDFFA6DFF00933F91E7F91F66B6FDD3F9B773410FCBE66E1854DC64A2 |
A76F76529453BAD650517256DF4538EAD59DF4BD9D81CEEF23BC92333C8ECCEE |
EEC59DDD89666766259999892CC49249249CD0AC5092029255D7E74471874646 |
215D5943056251C0DF1BED9236591558368A5777BDDDEF7BF5BF7BF7036356BE |
D2EF53491A6E89168B259E916D63AA3437F7D7A9ACEA90CF74D36B652FA494E9 |
F2DE5B496B14F616B21B149EDA4B8B58EDE3B9FB3438F4514E52726E4F95376F |
863182D15B48C1462B6D6C95DEAF56D80514538A384590AB08D99D15CA9D8CE8 |
119D55B1B4B22C91975072A1D090032E640EA7C0BA2E99E23F19785FC3FAC5CD |
F5A69DAE6BBA6E937171A6C36F3DEA7F685D476B0AC22EA58A08BCD9E58A292E |
DC5C7D8A2792F16C3517816C2E7D6FF68FF81565FB3DF8C2C3C0A7C7FA4F8EF5 |
E6D22CB59D627F0F5BE9B73E1BB5B2D72C2C35AF0DDC687E29D0FC47E25D17C4 |
71EA1A36A508D62D63B9D3F5DF05F8A2C75EF0378C344D1BC57E1ED5B4DB6F07 |
D2F52BDD1B53D3B58D366FB36A3A55F5A6A56171E5C537D9EF6C6E23BAB59BC9 |
B88E5825F2A78A37F2E68A489F6ED923742CA773C65E36F13FC40D68F88BC5FA |
98D635B6B1D3F4E93516B2D3ACA79ACF4AB58EC34C86E3FB3AD2CD2E0D869F05 |
B69D692CE924D069B6765A7C722D9595A410F546A619612A5395172C53AB174E |
B7BD6852B479A3A558C5C9B8D929529AE59C9A9465616BCCB5F76CF4EEFA74DB |
E6B539CB76B65918DDC33CF1182E9512DEE23B5916E5EDA64B299A596D6F15A0 |
B7BC6827BAB711249796D1CD6915D58CB3A5EDB96AB6CF736E97B34F6F66D3C2 |
B773DADBC7797305B348A279ADED25BAB18AEA78E22EF0DBCB7B671CF22AC4F7 |
56EAC65474F0C105D5CDBADE45790412DCC515F59C771F67BC1119160B8B78EF |
A2B0BC4B6BA654743776D6D7514126E9AD12756B7AAD5CDB6F6766F4D1DF6BEB |
1776BB59DB7E57B8C2A4925697CBDC231E5C6B12F970C30E553383279489E6C8 |
73F34D2EF99F8DEED8188E8A2EF557767BAEF6EE01457A1EB9F10752D6BE1B78 |
07E1D4E9A2A699E05D6FC71AC589B1F06786F46D6679BC67FF0008DB5CBEBFE3 |
4D3513C47E37481B4109A359789FCE87C210497B6FA04FF67D6EFA083CF2AAA4 |
63169467CE9C29C9BB25694E1194A1A4A57E49370BDD37CB7718BF750BF57F9F |
EBB9E81E0BBDF02359F8A74EF89177F101B4F8BC25E24BDF87F63E0B9F473671 |
7C53B88B4D83C3F77E29B5D79FC84F094F05ACB0F8927D110788A58ADF4D8EC9 |
D92260BE7F566ECD9B4A86C63B98A0FB359075BB9A29E5378B6702EA3223C305 |
BA2DB4BA80B996CA131B4B6F66F05BCF3DD4F149732D6A2526ED1767C974A4AF |
792BE9ABDD2FB3A2B20EFBEBFD68145157B51B1FECFB88EDFED9637DE658E977 |
DE769D71F69B74FED3D32D352FB1C926C4DB7DA7FDAFEC1AA5BED3F64D4EDAEE |
D77C9E4F98D36766FA2693F577B7E4C08AD2CAF3509C5B585A5CDEDC98AE2716 |
F6904B733982D2DE5BBBB98450A3C9E55ADA413DD5C49B76436F0CB3485638DD |
84424C42F179719DF245279A57332794B32F968F9F96393CEDD2AE0EF68A1391 |
B39D48354163676634D8AE74DD6A0B9D64DD6B969A95D433DE697AA69F616116 |
942DE231C76D15B471EB22E268A42FA9DBEB72D9DDA7916B107AF69676D736BA |
ADC4DAB69FA7CBA7DA43736963771EAAF75AECD2EA36564FA7E94F61A65ED943 |
796D6D753EAF33EB779A3D8369DA6DEC56F7D3EAD269DA5DFDDA292E595E7EF3 |
93D14395C22D457328BE74FDA465D1B5154DCAE9B3FAFEBF0FD48AE23B24B7B1 |
7B6BA9E7B996095F51825B45B78ACAE16EEE23860B6B81753B5F2496696F7524 |
CD6F65E54B70F6AB1CC20FB44B528A2A1B4DE894744ACAF6BA4937EF36EF26B9 |
9EB6BB7CAA31B450153DBCD1C1233CB6B05E2B4175088AE1AE563492E2DA6822 |
BA5369716B299EC65912F6D55E56B67B9B7852F6DEF2CDA7B49E0ABDA75BDA5D |
5DAC37BA845A5DB18AEA47BC9ADEEAE915E0B59A786010D9C534ED2DE4F1C765 |
01DAB0473DC4725D4D6F6A934F1B8A6E514B96EE492E6718C6EDD9734A6D4147 |
BB93514B5934AE051A28AD3D6355B9D6F51B8D52F23B18AEAEFC933AE9BA6D86 |
9366D245045019534FD32DED2C60927F2BCFB936F6F12CD7324D70EBE64AE4AB |
4795BBBE6BC528DB4716A5CCDCAFA34D4525CAF9B99BBAE5B483328AECBC5FE3 |
BF1078EB51BAD5BC469A049A8DDD9F8434E92E347F097857C2C91D9781FC2F6D |
E0ED0A1B6B2F0AE8DA2E9D6CF2689656675EBA82CE3BDF15EB16E3C4BE27B9D5 |
FC4735D6AB71C6D39A8293E494A51BBB3945424D73351728A94D26E366D29C94 |
5B715295AEC3B8F8796BF0EEF3C47243F14758F15687E145F0D78DAE23BEF06E |
93A76B7ADBF8B2D7C19AF5CF8034FF00B0EABA869967FD91AAF8EE1F0E699E22 |
BB376B3D8F87EEF53BCB456BA861C5D9BE21432FC28B1F858BE00F87504F67E3 |
DBDF1CC9F1421D06F47C57D421BBD0ADB4383C0F7DE259358934D3E03D35E1B8 |
D72CB46B4D06D2F5F5ED42E6F350D5AFA0834CB4D3F8165B616D0BA4D3B5E34F |
70B3C0D6F1ADB476CB1DA9B49A1BB174F2CF3CF2BDEA5C5BBD95BC76B1DBDACB |
15D5E35E4B158C156AA4A30E48A8C6EA4A534AF29C6A283E4936DAB479138A8A |
8CA2E534DBBD92B5FF000FBD5F5FC42ACDC41142711DEDB5D8F2ACE4DD6E978A |
37DD5AA5C4F07FA55A5B1F374E998D85E1C790F751BBE9F35FD894BC7AD4567F |
24FEFD347D9F9DFD52E974D93B5D5CBDB4364F713B59DBCF717505A34D235B41 |
73791DAC577710C058C51CF75158D945713222C93C7676A92B32DBC41190B469 |
344F2C5E74492234B0EF68FCD8D58178BCC5CB47E62829BD4165CEE1C8A8EACD |
A4D0413892E2CE2BE84C571135BCB25C42019EDE5812E2392DA58645B9B39245 |
BCB33219AD4DD4108BEB4BEB2371653B4FDE8DDA5AC7592E68A4AC9732B4AF14 |
B75CB2D15ACF602B5153DACD1DBDCDBCF2DAC17D1413C334B6574D7296D791C7 |
22BBDADC3D95C59DE2C170AA6299AD2EED6E56376305C4128495627528EE8C54 |
B2332928E92212A4825648D9A375C8F95D1991861958A90695B4BF9DBAE9DBA5 |
B5D6DADF47A6D706D493793E74BF67F33C8F31FC8F3B6F9DE4EE3E5F9BB3E4F3 |
366DDFB3E5DD9DBC62895A3760628BCA511C2A537B499912144965DCD823CE95 |
5E6D9F763F33CB5CAA834D62984DAAC1829121660C19F7B90C8022945F2CA295 |
669097577DE15C4683D2EAE9EBA349EB6BAD2E9349DEFAA5B2BD9E80486278E2 |
596582611CEAE2D6620C713BC722095959A3659D5177C6EB1BA14919199F0863 |
921A28A1DB4B2B2B2DECF5EAEE92DDDDABDDA565776B805757E05D174CF11F8C |
BC2FE1FD62E6FAD34ED735DD3749B8B8D361B79EF53FB42EA3B585611752C504 |
5E6CF2C514976E2E3EC513C978B61A8BC0B6173CB14708B215611B33A2B953B1 |
9D0233AAB63696459232EA0E543A120065CDCD2F52BDD1B53D3B58D366FB36A3 |
A55F5A6A56171E5C537D9EF6C6E23BAB59BC9B88E5825F2A78A37F2E68A489F6 |
ED923742CA6E9B8C6AD39548F3423384A70FE68292728EF1F8A375BADF75B83F |
23DE3F68FF0081565FB3DF8C2C3C0A7C7FA4F8EF5E6D22CB59D627F0F5BE9B73 |
E1BB5B2D72C2C35AF0DDC687E29D0FC47E25D17C471EA1A36A508D62D63B9D3F |
5DF05F8A2C75EF0378C344D1BC57E1ED5B4DB6F00B76B65918DDC33CF1182E95 |
12DEE23B5916E5EDA64B299A596D6F15A0B7BC6827BAB711249796D1CD6915D5 |
8CB3A5EDBF47E32F1B789FE206B47C45E2FD4C6B1ADB58E9FA749A8B5969D653 |
CD67A55AC761A64371FD9D69669706C34F82DB4EB49674926834DB3B2D3E3916 |
CACAD20879E9E1820BAB9B75BC8AF20825B98A2BEB38EE3ECF7822322C1716F1 |
DF45617896D74CA8E86EEDADAEA2824DD35A24EAD6F575E54A75EA4F0D4D52A3 |
CEBD953936DA8DACB9954A955DDDB9A779CE29B69351E54257495DDDF57E7F72 |
F96836D56D9EE6DD2F669EDECDA7856EE7B5B78EF2E60B669144F35BDA4B7563 |
15D4F1C45DE1B796F6CE39E45589EEADD58CA90514561F2F9F5E9A76D3D3ABBD |
F4B324925697CBDC231E5C6B12F970C30E553383279489E6C873F34D2EF99F8D |
EED8188E8AF43D73E20EA5AD7C36F00FC3A9D3454D33C0BADF8E358B1363E0CF |
0DE8DACCF378CFFE11B6B97D7FC69A6A2788FC6E9036821346B2F13F9D0F8420 |
92F6DF409FECFADDF4106914A4AA4A7369C60A51564DD4973C21C97724D5A329 |
4EE949DA16E5B37289DBD7EED1FF00C31E79451456601454F74D6CF7370F650C |
F6F66D3CCD6905D5C47797305B348C6086E2EE2B5B18AEA78E228935C4565671 |
CF22B4A96B6EAC224268638E3B574BA82E1AE2069A58A15B9592C645B9B8805A |
DD19EDE089E778A08AF55ACA5BCB616D796E8F70B78B77696AEDBEA9DBAED7D6 |
DA5ECDFA5AF6D6DA3020A2AF5C6A57D7769A7D8DCDD4B3DA69515C41A6C1210C |
96705D5D4B7B710C1C6E48A4BC9E7B931E7609E79A4501A590B51A1F2DFDD6DA |
B4756945F372AE65652968A575177BCA2949C62DB8A0D082592CEDEE5A4D3E09 |
9352B492D2DAEAF2099BECCC9776B2CD77A6B092380DDAA412583C9325D470DB |
DE5C98E28AF45ADDDB4563716F6B71E75CD8C1A945E45DC5F65B996EE18BCD9E |
D2782DEE4BD95C5ADC17B1B8922BD8A31308A696DD21B949AD9E6864B575AB5C |
DDE93A56953DDEAB3C5A44FA9B595BDD6A925C693636DA8B5A4EF0E95A53C217 |
4C9E6BC8AEEE753B88AE5E3D49A6B4CDADB4B652CF7B9556E494A1C8EEA0A0D7 |
3C62D73D94A69C5A71947DA732F793E68A4A575A07A9A16B609776DA8DC2DF59 |
DBB699A7A5FC905ECA2DE7BE79355B1D3058E9083CC37D7891EA09A94B137D9C |
A69F67A9CFF32D98F3F3E8A72B142480A49575F9D11C61D19188575650C15894 |
7037C6FB648D96455610DA76D2D65676D6EEEF5B37BDACAD7B69D2E04B750C76 |
F73710457505F4504F34315EDAADCA5B5E471C8C89756E97B6F6778B05C2A896 |
15BBB4B5B958DD44F6F04A1E2582B5F43F0FEBDE26D41749F0DE89ABF883546B |
6BDBC5D3743D36F356D41AD34DB49AFF0051BA5B3B086E2E0DB58585B5C5EDEC |
E23F2AD6D209AE6768E189DD729543120BAA0DAEDB9C3904AA332A0D8AEDBA46 |
023424040ECA64648F73AB69E92E5B464DA8BD546EAD749BFE5BABEAED757DC0 |
B37D7135D5CBCB70B68B2AA416EC2C6D6C2CED8AD9C11DA46C916990C166EEF1 |
C0AF3DD468D25F4ED25EDCCD71737134F25608E51A40AC635654670A762BB876 |
4566C6D0CEB1C85549CB0472010AD89EDA369E44B603E5964469196385A48D22 |
5732482495A2091C513492CA1EE20B72A824B8915615923814A0277AB32ED700 |
2B043BCA308D8928E0AAC9B59D7682E81915E366122B776F9DF335394BDE93BB |
72D1BBCB5726B9A2E4ED777F980DA29CCA54212570EA5976BA31003BA61D558B |
46DB909092057285640BE5BA335BB1D3EEF509962B58649332451C92AC72BC30 |
79CDB564B878D1FCA8C6199988FBA8E403B4D28C253928463294A5B4526DBD2F |
A2F4D7D35D80B1729A5496BA2C7A5AEAAFAABDBCE9ADA5CADB35ABEA0DA8DD2D |
8AE8AB6E0DCB5BB6966C04EB760CE751374211F67F26B2AB6353B1BAD0353921 |
8AE8B796F2B58EA16DF68B5FB6599966821BD8A29D2DEFAD12EE346716D7B05B |
5EC48FE55D5BC326F8C63D5D58B8C9C670E4A90B42504924B92318A7BBBCA567 |
293DA4DF326F9B44BEF5FD7E4391433AAB3AC6ACCAA6470E51012017711ABC85 |
547CCC111DF00ED566C03AB6B2E82BA3EAD15ED86AF3F8825B9D2CE857F6BAB5 |
9DAE8F616919BD3ADA6ADA4CBA2DE5EEAD73781B4D5D2E5B3D6B458B4D30DEC9 |
770EABF69823B4B9E178BC232DFDF278D2F7C4761A60F0E78AA5D327F0BE97A6 |
6AF7F278BA1F0E6A737822CAFAD356D5F44B78BC39A978BA3D1B4EF156A96F7B |
36A7A27872EB53D6B48D23C41A9D85AE83A961DAADB3DCDBA5ECD3DBD9B4F0AD |
DCF6B6F1DE5CC16CD2289E6B7B496EAC62BA9E388BBC36F2DED9C73C8AB13DD5 |
BAB1952568A2D72372E68D9D9B575CB7929691DEF19747EF5F4566415A11EABA |
9C3A55E68715FDE47A36A3A8699AADFE969712AD85E6A7A35B6AD67A4DFDCDA8 |
610CD79A6DAEBDAD5BD8DC488D2DB43AAEA11C4CAB77307CFA2A536B66D68D69 |
A68D34D7A34DA7DD36802ACA595E489732476973247656D15EDE3A412B25A59C |
F3DADB437772CA84416D35CDF595BC53CA522927BCB5891CC97112BB6D6EAE6C |
6E6DEF6CAE27B3BCB39E1BAB4BBB59A4B7B9B5B9B7916582E2DE789925827825 |
449619A2759239155D195941124B757B76D24B71773CEEB69696AEF7174CF235 |
958C769676368A6690BCB059C16F6705ADAA6F5B6B6B584451A416A3CB6B96DA |
F337AE892B5945EB7DF7B5D5BE14F5BEC152A7B86B66914DA433C11082D55D2E |
2E23BA91AE52DA14BD99658AD6CD560B8BC59E7B5B7313C9676D243692DD5F4B |
03DEDC3224592458D9B66FCAAB7EEC2F98548883B4B2C31C71B49B56595E40B0 |
C65A521F66C6B89A4EAB269573AEC7A66A1268965A858E9379AC259DCBE9569A |
AEA76DA85E69BA65CEA0B19B48350D42D349D56EAC6CE5996E6EEDB4CD427823 |
922B2B968C49B5A2BAD5E8AEFDD5AF9A494B5E9B5F6D02082EE7B68AF6188C5E |
5EA16C96973E65BDBCCE604BCB4BF51049345249692FDA6CADC9B8B4782E1A01 |
35A34A6D2EAEA09AB5156EE23DD7322C314380BE62A5934F341E5243E6B4A866 |
926B80BE52B4D32CEC2483F78B3470346D1466B28EF7E56A118EADDA4E52B456 |
C95EEDABAD65749DDB41528A91D7E55916391226FDD8673B95A68E388CE16411 |
C6A70D22C9E5805A28E5895D9CE2477DD5BC9677371692B40F2DACF35BCAF6B7 |
56D7D6CD2412344ED6F7B6535C59DE40CCA4C375693CF6D711959609A489D1D9 |
34D5FB2B6B676D755BF75AAEE8082A69A2488E12E61B81B8AEE856E1460246C1 |
FF00D22081B6B33B460637EF8642CA23313CB62FB54D4F53FB1FF696A37DA87F |
67D8DBE9761F6EBBB8BBFB0E9969BFECBA759FDA2493ECD636DE649F67B48765 |
BC3BDFCB8D77367A3F04780FC51F10FC41A37873C31A64F7977AD788BC35E168 |
AF1A29D349B0D57C5DAC5BE85A0AEB1A9A4525B69705F6A7731DBC535D320760 |
E22123215AB8C5CE5C94E2E72935CBA3E6D1372B25271B5AEE4DDECA37BC55C0 |
E41D8B90485042A2FCA8883088A8A4AA2AA962AA0BB91BE47DD248CD23331B96 |
FAA6A76B657FA6DAEA37D6DA76ABF65FED4B0B7BBB886CB52FB0CAD7163F6FB5 |
8E4582F3EC73B34D6BF688E4FB3CACD243B1C96A9F4FBA7D0B59B4BC9F4ED3F5 |
19749D4229E4D2F5684DE697772D94E18DA6A16F0CD10BBB39248FCBB8804C23 |
B88B746E5A3760D9D147E6C8B1F991C40E4B492B6C8D1554B333100B36141223 |
8D5E695B11C31C92B246CAD24F493551CA70947DE8C95D28BE66EDF1F34A2D5E |
FA352566AE6E3ADDA04915EE11A58D1A373029DA2E02CB1F990BCA195E05787C |
CC4D1ACAEAE1542618C890D5F9EEA7BC9238A04648FC98AC2DED601967816512 |
47149E5247F6A9A5B93F6895CC63CEBB63224683CB8D3D37E25FC20F11FC2AD1 |
BE1FDD78AF51D021D63C75A25EF8947832DE6BA3E31F09E986EA3B6D2AE3C616 |
7369D6F05847E26B40BAA787628351BF79AC52E2E2782C3CC89AF34F652942A4 |
E9A94E950B73D550E54A5524A2AEDBBDA4FE04F5B26F92379B15D5D5F46F65E9 |
AFE5BFDD7D8F2AB76B65918DDC33CF1182E9512DEE23B5916E5EDA64B299A596 |
D6F15A0B7BC6827BAB711249796D1CD6915D58CB3A5EDBC153DBADB348C2EE69 |
E0884174C8F6F6F1DD48D7296D33D942D14B7566AB05C5E2C105D5C095E4B3B6 |
926BB8AD6FA5812CAE20AC7A2DAD77DAFD37EB6DAD7D37B75185153DD5BC9677 |
371692B40F2DACF35BCAF6B756D7D6CD2412344ED6F7B6535C59DE40CCA4C375 |
693CF6D711959609A489D1DA7D4AF9F53BEBABF92DECAD24BB94CCF6FA6D9C1A |
7D8C4EC06E16B656CA96D6B1120B082DE38E08C92B1471C61515D9252BB6A4A4 |
972B4F55697336FA38B51566AEF9BFBAC0A6AA08725D54AA865560F990EF55D8 |
9B5594305632132144D88E03190A23D9B5BB5B68EF50DA5A5CB5E5A7D9125BA8 |
E4924B063736D3B5DD90595225BB68ADE4B2F32E22B98E3B6BCB978628EF05AD |
DDB54ADAF106AB26B7AACDAA4D3A5C4F7705835CC91E8DA5E8110B98F4FB586E |
61874BD1B1A74505BCF1C96F05C431C126A31449A8DD5ADA5DDDCF6D134D28B9 |
26D4D34924959C64A7CD26DCAEA4BDD5151834D36DCA128C79C2858DC5BDADC7 |
9D736306A517917717D96E65BB862F367B49E0B7B92F65716B705EC6E248AF62 |
8C4C229A5B7486E526B679A19259B4CBA874BB1D60C4DFD9F7F79A8E9B0CECD0 |
00FA8693169D737F6E91ACEF71B60B4D674998CF34304723DDBC30194DB4CCB9 |
F452525CAE2D5F7716AC9A9370BB93E5729C7962D28B9251727256BC94827B7B |
792EA468A26815960BAB826E2EADACE331D9DB4D772AACB7734113CEF140E96B |
6A8ED737D72D0D959437179710412414E0C3632EC52C5958484BEF50A1C14501 |
847B5CB2B3964670634D8C8A640EDA5A5977D6FF00A2B5B7DDDEED6AB6698051 |
45148029CEA15DD55D64556651220708E01203A8915240AC3E650E88F82372AB |
640D5D5751B1BF8B474B3D074CD0DF4ED221D3AFE6D3AE35A9DB5FBE8AEEF677 |
D7B525D6355D523B6D4EE2DEE6DAC67B7D1534BD1443A7DBCD6FA55BDD4D7935 |
CE453692764D4B6F79735B6DBDE517D6CEEB75A3B6AC0A29CA8EC1D955996350 |
F215524221758C339030AA647440CD81BDD573B9802DA4014515D4782744D0BC |
49E2EF0EE83E27F19693F0F3C3DABEAD6761AC78E75DD33C49AD68DE15D3EE25 |
0971ADEA5A4F83F47F1078A350B3B142669AD341D1354D4E6452B6B653C8421A |
8C5CA518AB272928A7294611BB765CD39B8C22BBCA52518AD64D24D81CBD1451 |
52077BF0F7E207C43F857AC4DE38F867E34D73C09E2282C354F0CBEB7E18F103 |
E87AF3693E30D1756D1B5BD3A21697706A573A66A7A33EA3A7EAAF0C52D9C0B7 |
36F15DCB05C5E69E26E2E0D919F366E6378EEE2509F67924131B66588B452EE2 |
91F9B2C5FBE28AC144AD6AFF00688731D6ABD64E60769BEC76D7E1EDB52B716F |
71E6C8233269F3446FBCAB5B882E125D384EBA8D9CD21FB2FDAAD11A78EEADA1 |
BAB67D23293E48734F9612E68C5B72842529454A4A0B6E6518295B5938C75D12 |
40C8ACE496079D4A85459D887595462DFECDBC098C5F660C7ED49B11A70ECE16 |
1DBE7DC59C573B26CFEDA62B18E4647856482DF65BC17705C25AA4F76CD05DDA |
4F7522CC45EFDA6FEC6296E82EE91A09279934FD2C6744B25C5B44C7C9B836D3 |
5BDADBDAB457E6791649A79D6D51ED625B72B752CF70E44B70978DE43ADB322A |
8593A5496F2D6666D235397FB49EDAE2C2D6274960D6F4DB18749D460BDB0492 |
C6678A3175A5DC9B09E10AC6F67BBB88E686D6EED6729D987A506AEE2DC65EC9 |
4D29A4E716E5CF08A538B752738A54E1193BBE594E11892DFEBF2DB5DAD6B3D4 |
A7AFDAE862E0C5A05CEB69A65AE99A6C9141E26B3D374ED424D61F4CD3CF89A2 |
8D2CAF668A6B587C410F882DB4CBD71F6AB8D274DD1A1BD8EDB53BB1A659F49E |
0BD5F56F0C5F6A76F1EADA8E9AFE22D3E4F0AEA8B67A90823D42CE19ACEFE7D0 |
AFE4B49DC5FE95E659E8AEF61713A5BB6A5158C474EBA9AC22B8B2E574A85BCA |
8ACA6B6B7BB5D663692C50AC923457305DF91E65E2DB5C5ADCC56EA905C13723 |
CE36F0B4CD6DB964D4ADE5DEF13F87A5F0C7886FFC39796F09D7348D46E20BC8 |
BC3F796D7C1B51D2AFB52D3752B5B3D634D6D5B4EBA6B1BEB56962BDD152DB48 |
BC821B896140134E09D3878CA12863A3149C254EF1729C63172E6B4143965CCE |
54670547D9C928C25151A7295A329959A707D53ECF6EBE5AEF75BF54677890C5 |
A8EA4D359C773751FD8A28266482EE592CEF7ED7710C3035BBBC26D249A5892D |
FC995002B3CB7115B4D70E8CDCBC30ADD33B4D75696691C121F32659155E4B7B |
29E5B7B6482CADE79DE7BE7B55B38EE0DB8B65BDB9825D52F2D20966BC4FA0F5 |
1F1678934EF859AE7C39D20DB2785BC45E2FF0D7C42D774CD4F4BF0DDFDE9F18 |
E89A4EAFA226A96FAE5C6913EA9A6E9915A78975B8E6F0FDAEB10E8325B3E9F7 |
DAE1D6F55F0DE93ABC5E3AB792695F6BD32C6FFCAD3BC4B0DA587886C1228526 |
486C359B5BD36CB36A5197B38D751D3A1BCB39259EDAF1608E38F530B13C86E1 |
E6386E5AFED2A4BDEA91F6B55461C91F6951CE34E308CAA2738A9A8AAD252752 |
9C6A39A53B72A29CAEACB64ECAEEFA2B6F65EB6EF6E87331C0F3496F0C25659A |
E592348D4952B2C92989227690246198ED70CAED184917748AE24446AC333F97 |
B2291FCE90C316D466F3661E5E628F00EF9079B165172C3CC8F8F9D73B1F6343 |
72522B4596386D2D16E1E092E353B637EF0A4914692D8987CB6D46E5458347E7 |
4D1C334F706DE5611C2D1568AD1EEE06B8F35A668D628E6767216C907CB01915 |
964B9BB58ECED2EA4920B285C5ADA4514FE6B08E6B78FCD7425B5AF2BCF66D5D |
53B293519C54F47CD7766BE26F9234A65DFF004FC7CF6FEBCD1ADE0CD1743D7B |
C53E1DD27C55E278BC0FE18D5756B7B1D63C6373A46A3AE5BE83605E3FB6EA03 |
49D2C7DB75496D21915D2C6DE484CB2490ACF736703BDD45832D94F0BC48E143 |
4ADB0316D9087CA90A6E64D96AEA62920B913453496FF66B9826330573B77AE0 |
11637D16972DA496D308E5D63CDB6D120BC496C2794AFD9AE3ED13DCC7693CF7 |
41BECDA3341A65D2AE9514C2FEF6CE2786E5EC1A546E6D229E1495EFD679CA5B |
DDB87D27ECFF006C9A59BFB37104D693ADBD9DD436D6CEAB03EFBA8DF4D8A77B |
4D3775854E0D3E48CA2E2FDACEA2846A3A9751A709734A9CD2F64DA9251709CE |
AC2A29AA719455F5EBAF4B6D6EAFAADFCFA5BCF024BC96F9A1BABFB837134114 |
36324972E1A66D3ECF4B834FD36CA0327DA8816F6363F61B3916C0269E45A34B |
704183ECEC8A0B7B7B8B469E76683ED7009278EDD26B43107125C344EFE779AD |
15B49692B5B4F65E6069E482EADA368425C6F3D8C7A75BC582D7491DDEA36B39 |
3791436CF791EA7676F1C3756F704DA40A6D2DE3BF8924376D2CC893DEC12E9B |
64C0EA68FA5E9CD77A6DDDE2DCE91A0DE5F5B596A9A95AE9136BBA969DA56A25 |
2F2FF56B5D3351D5F40B0BE4D1AD1858C115CEABA7D86B2A976BA85F436B7440 |
D1612AB9A52E59545C95649F3B7EFA8B72BA7184F6B5494AAC529A7EFDE704CE |
656F2D75F4FBDFA2B3F43949A5BAB8852CF546D4A5BBD2AD8C1A7DBDC4B76CD6 |
DA6E2E6EDECA28A75B81696D6B7372FAAA411436B034536A9249309A78183A2B |
CBF874E68CDCBC1697BA81D4059DC5BCC74AB9B9B3B5BD823B982C824BA4DC4F |
17DB2E6CC34B6424B03710ADB4D14135EF9572D2E84D3DC25FA6A73456B6170B |
73A7387960261FDF4B1836E96EFA25A2DE5B58AA4705B4A90796B14F2A5B822A |
7D2D56686C3CCB1F9A6924B7B5BB4BB8EDED1F50815BEC0B77158C9612DB5CDB |
1732A5CCF2DC6A17514B72B04372D3DB35A285253947D9D469C94A307253534E |
3521052ABECF99ED3F6709374EF28B7CB17C9ED8BBD6EBD7B3D1ED7B76BBDFFC |
A99D31210D0DE7D9BCBB48A1BDFB4437B6D66B79637375F6096E217BC8A4BFBF |
963BA96C8C169A758DD31D36DEFF005386D0DA0B9D44E4DDC33ACCEB25BF94F0 |
5BDA79F1C76F342215105B441E78E5447491DDE313CACA239AEA52F133A4B1B3 |
6CB33183FB46DED238EDE5FB5484ADC436B059DF470C6E5B4E06F6592D2E7ED1 |
F679D6D368BCBB874F8DAD1D2C6E67B2B6CCBA57943B19983DBAB497566D626C |
85ADC6FB4B59825BDAA3DA46AEC62433BFD95E57B7759E28E636CB7195684545 |
A8C5A57538ECAF0E5766A738C2552367174D454A4A319B959BE61AFBFA3F5F93 |
6979FC8CE72848D8ACABB5010EC1CEF08A246042200AD26E645DA4A215467919 |
4C8D2446DF7C02759BCBF381B968990B9B7263CAC08E81566551290D248C8E5A |
31B1023348F98B5C5C4A621248BF398976C8592DA042506C696E5D23B7B68C0D |
AD3CC21863C195D53798A2459245479A3B7539CCB2899A34C2923708229A53B8 |
80A36C4DF330DDB572C396CF9B4E577959376517AAEAED14B6BEA924F7B0C734 |
4EF220860982DC3136B1B032492234AF146A8CB1C6276F315A12D1C6A1E54750 |
8AC0A0FB6BE197C27F14597C10F1BF8C7C29AA59FF006D6B7A5F822E2DEC2EF5 |
89F46D76C75487E2FE89E0D84E97E1D65075282C6F75ED36F2E7C533C915BF87 |
D8C71486DE3D6AD5353F9874CF10F886CDBC26F36BE9AB59F844DEA685A3EBF6 |
F378C3C3DE148EE753D4B56D423B5F0DEA116ADE16B9D3752BA86F753D4347BA |
B39F49D6E4BDBB9F56D32EED26B8BA6FD5AF819FB557827C0BFB31FED67F08F5 |
7D37E16F88BC33E27F0678092C3C2779F0853C03E3AF15C107C59F847E2DF10E |
B7777DE18F0FF8A3C3B7FA87C39B86B84F0CF85B5DF19782345F19E9F7275BF1 |
45E36ABE17F0C781CFD164B87A31957AD567ECE7EC250A7539A31951955A2DCA |
705094A4A7CBED611F71B83E5D14D4E11C6AB7EEA4AEB9936ACDDD296CF4F4EB |
EBA2B9F90FAF5BC90788FC4104D7F6DE22B8B7D62FE693588EFEE3584D704177 |
3BDC5EC7A9DB38FB745A8C4CDA8DC5F4C6199E38DE5F3ADE72F149CEAA3B0765 |
56658D43C855490885D630CE40C2A991D1033606F755CEE600FA1F8F7C4B61E3 |
3D6BFB474EF0EE8DE1CD3ADACA3D2749B7F0FE9965A0D8CC06B17F716F7DAC58 |
C57B7B6BA6DFDE5ACD746E2117D379660B72B73716B19B9939BD4ECEFF004CBF |
9A1D62C8697737D042E2CCC53595B43677B15A5DD8DE98AD6265BAD3DEDE48EE |
ACFECF24CD34B0C773309C0F2EEBC6AF4A1ED2ACA9CB9E8AA8F96AA84941AA9C |
EE3CD29AE64F9A368F35DCE09CD28A8CAFAA6F4BE8EDB5D5F4F4FC7B1B5657B6 |
7E13D6B42F10F87A7B6D6EFF004AD26C35AB98E7B49A3D3F46D7E5B58A3B4786 |
49AE966D52E746D4EE6CB50995ED6DEC535785EC043A8E956ED7375AF73F1435 |
2D5BC59A87C43F11C32EB9E3EB895F52B5D7AEEF1DC0F123CED341E24D460B84 |
BAFED2B8D276C0FA5E9F234769F6B8E192F5AE74DB48F4797829BCC6861B985F |
4EB73671D9B2FD925582EE591D7CAFB41576170D730496A8B72B1EC549585F41 |
0B45752DE4BA9E14FF00846ED3C43A6DEF8B85F5D786ACAF927BD834BB317336 |
B31D9CD048FA6402EAEF4A48E3BC4745BA9A5BAB79ADACE5691236B930C2FB46 |
BD68CE34E8CA9D0A53AAAADA5187B184DFB8B111F68A528F272E8D37CB24FD95 |
95454D2B2DDDDD95BADEDD9DB7FF0086BF73064B0BD86CAD75296D678EC2FA7B |
BB6B3BC78D96DEEAE2C16D5EF62824202C8F6AB7D68660A4F97F688C360B62AB |
2A972402A08576F9DD1061119D80676552C554844077C8FB638D5A46553E9DF1 |
0BE275EFC47F1069D7DAC58FD87C35A3F9769A4785748BA8AD22D2F470D00B9B |
4B1BC7B09A08EFAEA0B78A37D45F4B961468AD82E9DF64B586C97CFF00567D2A |
4D57539342B6D42CB449350BC7D1ECF56BEB6D4F55B4D29EE646D3EDB53D4ACF |
4FD26D350D420B430C5797D6BA56996D7772B24F069F65148B6D1F2578508549 |
AA15655A8C6518C6728BA73A968AE79A83BF2C25352E4526E6A3CBCEB9AE357B |
2BAB3ED7BDBCAFDFF033E8A28AC0614514500145751A2784EF35DD0BC65AFDBE |
ABE17B1B7F04693A66B17F61ADF8A343D135DD6E1D57C49A3F8621B3F06E85A9 |
DEDB6A9E33D5AD6EB5A8353D4F49F0E5AEA37FA5F872CB58F125F41068DA3EA3 |
796FCBD538B8A8B6ACA6B9A3B6A94A51BF97BD192D6CF4BECD0057AA693F14BC |
75E16F851E32F8456B068F6FE06F8A9AC7847C5DACC9A8784341B9D7AF6E7C09 |
75AFDA68B3F87FC5F7DA5C9E22D334A5BEBDD56DB53B5D175482C350BAB236F7 |
88EF6D731BF95D14E15274DC9C2528B94274DF2BB5E15172CE3256D6328B69AD |
35B3BDD09A4F757D53F9AD53F90E7474215D5918AA380EA5494911648D80201D |
AF1B2BA374646565254834DA73A3A10AEAC8C551C0752A4A488B246C0100ED78 |
D95D1BA3232B292A41A6D4BDDEEB5D9EEBD76D7E430A2A79AD6E6DE3B5967B79 |
E08AFA06BAB29668648E3BCB64B9B8B27B8B577555B8816F2CEEED1A688BC6B7 |
36B7101612C12A2C14AD6DF4D9FDFAAFBD6A8072BBA8755665591424815880E8 |
1D640AE01C3289111C2B646F456C6E50436AECA5046D6FE6DBCFF67C34374A6F |
F73C6CC0B5A5BA4CB1C71C6B24D2DC379B6B03191662B3B6F449743C37FF0008 |
D7F6D597FC261FDBBFF08EFF00A4FF0068FF00C237F60FEDAFF8F49FEC9F62FE |
D4FF0041FF008FEFB37DA7CFFF00974F3FCAFDF7975A725E71873C15DA8F3397 |
B90BCACF9A4AE9462EEDC95D38FBCAE981854E08E51A40AC635654670A762BB8 |
764566C6D0CEB1C85549CB0472010AD89FCA81AD52489EE5EED25B83770FD950 |
5ADBD9816696770978B72F2492CF7335D437104B656D15B08ACDA2BABC92FA48 |
6CBBFF001DF81344F08689F0D757D23E25782BC7B3F8F7C14BE2AD6746F0AB6B |
C355F86DAA8D7B5AD165F0578D62D6B45D2A18BC47143A541AB7FC4A67D4F4E9 |
F4ED4ECEE6DAF26B69ADAE6E454E4E339A4B96118CA4F9E29DA72518B49BBCBD |
E69494536B5E6E5B368BEDE7FF000E70EDA56A69A65BEB52585E45A3DDDE5FE9 |
F67AACB6F2C5A75EEA3A4C5A54FAAE9D637922ADBDE6A1A65BEBBA2DCEA3636B |
24B75656BAB69F75731456F77048F59AD6E52DA1BD7B79D6CEE27B8B582EDA19 |
16DA7B9B38ED65BBB78672A22927B58AFACA5B8851DA4823BCB5795556E222FD |
2F873C0DE2CF17695E37D6FC39A2DC6ABA5FC37F0BC1E34F1BDDC125B2A7877C |
2D73E2AF0CF81E0D6EF5279E295ECDFC5BE32F0B683BADA39E45BFD72C11A354 |
94BAE0EA1A66A5A4CF1DAEABA7DF699752D8E99A9C56DA85A4F653C9A6EB5A6D |
A6B3A36A11C3731C723D8EADA45FD8EABA65DAA982FF004DBDB4BEB5925B5B88 |
6574E2D4633709A8C97BB277E5934ECDC5F2A4D5D49593BA6B56ECD0AFD2EAFD |
8A34514540CED3C15E1AF1778DB5A7D1FC23A0DEF89F58B1D03C53E289ACACED |
2E2F6783C37E07F0BEA1E2DF16EA577F66C48346D13C1FE1BD5AFB557BB63A75 |
868B6BA85C4C6DA159674A291DCC972F6D647EC77F049736B6B0A5C9796D2237 |
57737F6640D1D99B837224134926AAB762CD2D24305DDC4293321B9E14F19F8A |
FC03AD695E25F00F89BC43E1BD6F40D534DF13E97AD683AA6A5A36A5A2F88B41 |
BEB87F0D7896CEE74C9ADA5D2F5DD02E6E21BED0F52B6BB9EE34AD4655B8B3BE |
49A46851ED1FC96BA9DD6A4D2DC69CD6970B6F73793CF04D2C41E778EDAE7179 |
6DBAFF00EC1728B24179346B75662178E396F56CB4BF4F0EA12A4929D5F6919B |
9D6778469FB27C8D7B2A97E7751284A4EDCDCCE9C5283E4538CBBDF656B596F7 |
BF9F4B6A97CDEBAD8741737B04F1DB5B8BDFB1C58B0364D288641776D34115C5 |
8C571A5CD6D6EBE65F5FDABBEB57096D2BAB6C2D71FBDB3BEF43D27C32B35BFF |
00C2416BA747E22D0B499AD20D667BBBA6B9B52B7B71712DA457A2CC4775716B |
7FA8DBDFFDA665BDB48E1BDB88C79EB76BA2C76D936B25BDCA6D5B78618EC6EE |
CE33A6DAC76574F6579F688BCCB85511AFD9562B992FEDAEA4688B4B6F6C6FEC |
24803179FD4E5D37FE1183A441729A86837F268736A42C2E57FB1B51B1F10683 |
69A9C7A35F5A6A7AAF87B485D274BD635696D56D746D2F57D72F678ACFC8B77B |
DD76DACA15FA3C1E1631BCA73F6B4D24E3294637A7EF5B963CCBF8729C5AF67C |
8BDD4B9230D5984A4DD92D1ECD2BEBE7EA93BDEFDF5641E32D5E3D7BC4377ABC |
779757DF6EB5D225967BD5B6172B72347D3E3BBB494D9E9BA45ACBF60BA49AC1 |
27834EB68EE23B649C093CCF3A4F32D4AC2F2E2F9350BC4B6D555C87D5710436 |
2F28372B71B2C74BD26CADECA2B2B398CB769A622C915CAB8B416F23DAE9E63E |
EAEFEC765711DC787B5B3A9E9D7B61BED752B73159DC4905EDB4965A9D8DE5AD |
A5F5F1B396298DFE97776D2DCBA5E5B21B988CFA6DF5B4B362451984470A05F2 |
116400FC91988075F2208A18A148BC98E22D1A9DCAE89144AC26677957B6BD38 |
D7F8DB69B72BC65CD06DCA2D371BCA15232D7569AE4E65CDC95257CA2DC6FDFF |
001EB7B3E8FF005B7548E0EDF4CF3A5DD7F6CDA7C92436904764619E5D3A596C |
A3B8B0B5335F5CC77B04177F6A86036C4A4B1BD8CB15B63533A95CAB5FB5916F |
6FE6BA8658E3B6864B5BBBCF3218D74E860B37D5D25105CACB0FF687DA35269F |
5282F9A0486178C5C4CFF69856D0743268FA64B731DCDC4BA859A466E6529A5F |
9A16E2FE78258ADA5B882DE7B565325C4890DD6A31CC935BD9CB34F3ADE456E2 |
D5F11AC7CB5B97B3D3E18AE1218AEED6E7C8D42CED95A6B44B6BC1159DB4EF75 |
6F34D019F6C568A977E74512DEC092DBD85E5F79BF569D1946D1838AA929C9A9 |
CBDAD5F7252E76A114A2B9A5517B3E48D1936DAF673E5A86BCCA57DFB2D1596A |
95BCDD92D6F7F5D8A326952C761A8078FCBB4B3B27B8862B9B2B413C5756290C |
B649E679B7D6F751F9715CCB7AD0AC36D2CDAADE8DAD3CF750D9453E9B673B0B |
72D72ED6B26A4D723549654B1173143773C92A9F3A5D4AD6DDE6BAB1BB9274B8 |
5B29ECDED7ED77571AA34624D74BFF00F408E0104726B979326A5AC5C585CDA4 |
91CD651DB5E47A65922D8C2FACDB7D92D352B979EEA1B97B5BE66D1E6417FA86 |
91A6DB6A346D34C0F6769F684B790DBEA36CD3CF25C5CC77DF69B895CDCDC664 |
B7D16F6DEF67967B1F2D6E6E2E0BDAC76D2430DC4F1DB8BBC5D2A73E550A4A57 |
82BC6AB97BB18545515397B8D45B8CBF791517084A0E9FBD09459576B77D7A2E |
AD59BDF5D767BEB7DEE52D59648ECEE66B6119BAD3EF6FEDDB56B79560962579 |
60BD785E5024DF7373F6A9DA6688E991C1782E34DB45DB729697F86BADEA60CF |
20B956B591A6B8324D25C40647290C8F69F68B35D3E7B9BB89A4B28098501812 |
18D217B7D19AE049EB7E17B2D12D46A235F9F5DD45FF00B2B538746D5B4EBDB4 |
BC9ECF5FDFA63C09A8E97A80B68AEB42BBB8D3EEF4BD4A1B6D6AD353D07ED31F |
88AD1BC43369B3F8435BE3FC43A7C12F9300B786DECECAD2EA485CC5F64B44B9 |
BB82F0430ADDADCC76D1B3DE456B2BA4F6B1C2AC10497A1EEE3B5B99C4E1311C |
AEBD2AB2A6ED05EC15D45B5649CE51F76715072E77FBD7250828C945A502338D |
F95ABEFAFE96DD3BFA6FD3AF21E5DF48DA933470DF6C5B88AE192398B9D42FEE |
ED51A586D2EADCB5ADFBCF2C36FC595A79F6F69731DA32DCC26E12943334B666 |
0B7B4863912EF4F7063B7BBBA37B728B73143149E74F756C2693CD9655B6FB2C |
70DD22DC00CA628EDE6FA2BF65DFD9D6EFF6A2F88D6FF0B74DF1D7C3CF87FAC6 |
B3A5F887C470F893E227886C3C21E14D3EDFC29E1EF12788AFAC2E35ABA84D85 |
A6A3A95968D78BA669F79268FA4CD73FD99FDA1AEE91A7C9717FA7FCFBACD83E |
857DA8E9C1C4A915F4F6F1C8B77A7DEDB4C2D45C5A4D2AFD8E4BCB4BB0924D24 |
567A9DBCC220F1DC9802DC0912D3C9A946B428D2C6383542B46AC79F9E339294 |
9CD68D2E7A6EDC89B94E576D46727CD389AA716DC6FAC6DA5ADE9E4FAFE9B5CB |
5AC6937BE1DB9D5F41D76D6F349D734DD62F34AD4B42D5B4F6D32F74DBAD0AD6 |
E2CDE3D52C5317B67AA25CDC1812090087ED90DC9D424B801DD56F743D2ACFC3 |
1E1ED7FF00B7ED66D5B56D77C41A76A1E0916BACC1AEE8FA268DA5F842F349F1 |
65C6A973A3C5E1DB9D23C6B7DAF78874BD0ADB4BD4352D5B4DB9F04EB32EBD61 |
67677BE1FBBD6B97452EEA8A5433B2A82EE91A02C4005E49196345C9F99DD951 |
4659982826B6ECB467920136A2B79A643A859B4BA0DFDCDA98749BEB88B50FB3 |
CC27BF9DA254B31059EB30A5C59A5EB9D5ACA2B068511AEAE2D3953759B8C297 |
4B53BC9CB93DF8B6E5392B4B99C9C75E587355BF2A6E367B6EFD74DF4FEBBBB2 |
EA68E9777A6D9EA8D0590B0D4B4E371BA34F1569BF62B3D423B494CD6D2EA896 |
5ADDCCDA74D3DB4B7969247A6EA0C23530C715C3CF3B5E5BEB78174CF0E6BBE2 |
6F08681E2EF145AF873C27AC78BF42D3B53F136AF06B234CF0968336B36D0788 |
F5BD54E8FA5F883564B1B0D16F27D5EF6C3C29A278A35BBA6B7B75B1D3350D41 |
6D74EBFD1D07C07E2FD4BC05E2FF00159F0EDF5E7827C15AB684FE27D46CB4CD |
3EF6FB41D53C41A67892DFC32BA9B1BCB4D6F49F0FEB3A969B058EAF729E5D8A |
F9BA5CF217D49B41B6BFECFF0067BF0B7C2FD675CD56FF00E2E788358F0E6836 |
1A3EA773A47F656993DD5D6B3AD5A687AFEA7A2E9D6B7A343D7A0D31755F14E9 |
1E1EF09DF6B6F61767C31A7F89AFBC5A9A6F8864F0E7FC22DAEFA386A35AA56C |
25074A3155155928D6538C614BDD94EF0949A74DCA9CD537393E7A8D49C54ACE |
51269294AFB595D5AF7E9F3B357DB4EB638CF126930F867C45E28D06F356D175 |
38F4C089FDB1E169BFB6B4CD4A2B886CED6EF55D1EF6FF00CABB820D5550430F |
DBECACB5C7FED8867D76CE09ACE58ECFAEF0478A355D02F3C45E3EF063F87FC1 |
09A15BFC37D1C787350D3B56D5749F1A35AEBDE19D7B4DD26EF4F957C4375AB6 |
A5E26D5FC12DE3FD6E0D4E4B4F0E88748D52C74CB8B45B8F0DE86BEADF0CFF00 |
662F117ED33F12FC6D3FECFF00E0ED6B52F875E13BBB8D6A4D3FC45713F8860F |
02F80AFF00C517DA2786353F8A7E35F0EE9BF0FF00C31A07866CE57D363F883F |
10E493C1BE1FD1203E28F88335A695E07F0EF89753D07CBBC51A9F8B6D7C2937 |
C28D51BC69A7782FC25ABA6AE3E1E78835AD727D3BC07E327974BF0878ABC503 |
45D534A9ADBC01A9F8C2EECAD1BC58CD6FA75CDDDDDB699E1BBDB79DFC3FA5A5 |
9F6FB1AD194EBB54E9D083C554A13552529D47CB5654E6A54D45C2927562938A |
8CAA3826E9CF953A5375F0EAE5EEA92D34DAE9A7A37A75D93D37D781F1159585 |
9EAF2693A1DECD3E9F3C925C47693DAFFC23F7F7736A114713A5BABCBAD6956D |
1C6910B7468F5391AE036A16D1ADBADE8D320F4DF8F1FB41FC50FDA53C7165E3 |
DF8E5E2ABBF881ADE9DE04F067817C2D2C37F358681A0784BC076B169DA66876 |
BA1E9BA3AD969B058E953EADAD6A1A7E8569E1D81BC49AE6B1E2EBF82EF55D6B |
56B6D5FCFEE258E26B2D4E28ADD12F2E5DAF7CEF13DB6A5612CD61717464BC82 |
DCDD58BD94F796CDA65B68D0EA1693D9B5C6977771697E8F67A8D8E879133437 |
70DC4165A5C6F6C3ED1269F3E9522C67ED773A33CDA840F24AF0DC5CE24BAB70 |
B610C16D2CB6D6D246D6F22583D954568DFDA284A31552AA70A0A9559479629F |
B15ECE74E4DC7D9CE7CD74A9C6A4E925052739485D2EAED2D5DD75DF5BAB36D7 |
7D527776B1CCE9F3C9633D9EB304915C9D1AE6D2682DAF6149234B88DFED702C |
96D750DD69F77646FF00CC325833B4B7D6E974F25AC30B5C4B0A6BDA9EA5ADEA |
97BAC6AF2B4DA9EA179753EA12CCB6B15CCBA84B29B8BE926B7B682DBC956BAB |
893C88CDBA476F085B18098ECC2C77EEF5AD47528EC22BA6B178B48B58B4CB2B |
FB0B3B7D3E4B4B3B26863B5B9992C2CE2919BED125AC93EB377A7B6BDA92A8B3 |
975290A79513C5E68FAFEB77B79E21B95D16DAE56791AE3C3FE18D31123F223B |
74B1B7D37C33A65E787F49B69A5584C77324BA82C0C2696E6669AF835C5C7912 |
B4A0A8D3AB25194A3250A8E34A129F2B4E7272A928AE54A3083751C1FBD2538D |
F91EBE6D7DD77FA6BF81CA514E7474215D5918AA380EA5494911648D80201DAF |
1B2BA374646565254834DAE2185486591A1480B6628E496544C2F124CB0A4ADB |
B1B8EE5B7886092ABB32A0166248A269A45890C619B3832CD0DBC636A963BA59 |
DE38938071B9C6E6C2AE598032DC149364F1A797E66E12A996DDB75C2E1E578E |
DE086DFECB6EDE62882231B22ED748E693CB758E927CADDDA4F4D9DA4934DABA |
D3DD7C8DA7D5C5EF6B856A2B76C2C345B8D175FBEBED7FFB3F58D3FF00B2BFB0 |
B42FECABBBBFF848BED776F0EA7FF13385D6D749FEC9B554BCFF004C47FB7EFF |
00B3DBED9149A8F4FD165D5B5BD2341D3AFB4A9AEB5ABBD1EC2D6EEEEFE2D1B4 |
9B7BDD63EC91AC3A96ABAF0D2ECB4C874EBABA369AAEA77D2C1A45AB5B5CDE2E |
A1369691DFC8FD9CBDCB72B752DCAA3384A5ACA504A518C9CA127283F766A32E |
5709DB9270948EFE463538A384590AB08D99D15CA9D8CE8119D55B1B4B22C919 |
75072A1D090032E7B6F895E02F127C2BF1F78BFE19F8BDB4B6F12F803C43ABF8 |
4F5A1A1EBDA4F89F444D4746BFB8B5BD5D275ED0AF350D1F53B16BA596486EF4 |
FBB9ADE5DECF9590C8A31F5587C53A858E9FE28D6E2F105EE9977E578674AF11 |
6AA9A8DCD8DD7FC223A3E8FA743E1FD3F57BB0F6F37FC231A049E1FB18B4AB6B |
86FEC5D1DF47B64B7B6B26B242E54E5195484A3353A6DA9C5C6CE0E2F967CFBD |
B965EEEB6D5EAD3D197DBB3FEB439FA2A7B8BAB9BC9165BBB89EEA5482D6D525 |
B89A49E45B6B1B686CACADD5E5666582CECEDE0B4B584111DBDB410C112A451A |
22C159BDF4DBA5F47F75DDBEF7EA0145145004F35D5CDC476B14F713CF158C0D |
6B6514D349247676CF73717AF6F6A8ECCB6F035E5E5DDDB431048DAE6EAE272A |
659E57689D4A3BA3152C8CCA4A3A4884A92095923668DD723E5746646186562A |
41AEAF49D0747BE3690DE6B5A85BDE4BA7EA9AB5DDB69DE1BBCD54E9F63A622D |
F324A4DD58CB35E5CE8769AC6AD1BC103E896A83411A9EBB6167A8EBFA878473 |
1F4A56FECA82DB50D2AE6E3539E38D332DEE9AB07DA6DF4D28D7F7FAE5B697A3 |
DBDA5BDEDCDE6992DE25D9B782F74AD5E6B9B9FEC91A5EA179ABA53E5E67677B |
256A9094B68AE5E48B724D29C159A5CBAC5AE64D20C75504392EAA55432AB07C |
C877AAEC4DAACA182B190990A26C47018C8511E7B84B354B53693DCCD23DB07B |
E5B8B48AD52DEF3CF9D4C16AF1DEDD9BCB616CB6D28BB9A3B094CF2CF6E6C847 |
6F1DCDCEDA2E968F7336A7A1DF1B75D3228AD0E93AABE916EF7860B5B5B1D5D8 |
EB9A5EB7737B15FC96D7FA8DEE9F6E6C8DD49712B69CDA35869ED6AB8D771C9E |
7DCC8C266026C4CF379AF2453CDBE4F22EA5961819AED592649498D3CD96199E |
30D18DD44A9B8475B36DDB4551349393E75CCA3169F2B575CCBDD77E56AEC2A5 |
4926D3E5B2F963746BB923F3BE464CC67CC32E7324BB3ED0DE53BC23CE0A9E5E |
0C113551D83B2AB32C6A1E42AA48442EB1867206154C8E8819B037BAAE773006 |
489A009722546691A155B6653C473FDA206677F9972A6D96E230087F9DD4ED04 |
07484BA3B2BA6D377FB29BD1A5BBB38AE8DBD6D6BA0869CEEEE433B33B054405 |
D8B1091A2C71A82493B52355445E8A8AAAA028029B4548054C621192B3B34522 |
B4F1BC3E53F9F149120D825493CA4559263E536246962D92BBC24AC6933E0B69 |
26390926C31DDBABAA29566B3B66B9954348F121D8811A5DAED2471B8758A573 |
1C526B5E3442E6DAE74BD2EDEDE396D6CB4D5B6F3DB5A56D5F4FB0D3ECF56BC4 |
FB42345349ABDE897558ADD63BBB1B48F565B4B191DACE278758536E2E6D3E55 |
28A7A49BB3B5DA4AC9BF7A11B39C6EEA46DA5E503FAFEBFAE8CE8BC1DE06F16F |
8D75E9F45F08F86357F186B0DA76B3AE1B0F0DE8336B177FD8DE1ED02F7C5BE2 |
2D5EDB41FB3DA5DC9A7787743D3E7F10EB57D1243A768BE1FD3EFB50D515B453 |
2B1974FDDAB5A8D320D466DB70B7377235D25DC17460304160D218EDFCBB4BA8 |
65BE37D34B00BE6F327921B9BB9AEE78EFEDE7E76CD6EA25B49AD279A5BBBC59 |
2D85CD9CD3978A06B430FD9268BC99EE666D3FC84B8952D2D07D8EDD6DDE3B89 |
5AF34F96CFB5D12EE75B982CD2CFCB0D6E8FA8C6166896C5A2B2B48AC9CC7726 |
49E392411BE9ED6D34CF25C476516AB0A4504EED71EDE0614DB8C1A9C7DA4DC6 |
A2BCE6AA42B724E9C29B838B568B93AB293ABCB093973C795994DBDD3BD95D6D |
A35BB7A6BE5B26D1AF1412422396EB48BE4D121D5ED6D6EEEADEF544A25BEBA3 |
045E4EA9247A81D2EEB59D3E2BD5B7916C6E6F25BC96FEE6716A2DE7BFBAEA6F |
AFADAEE3D26D3549BED1737DA9C933EB97573A85C5B691F6DD46F2EEE2DF5BB7 |
9E0B8924927D59CEBD6B79A243712B5EEAB7BF6C3A8EABA85BC1A6E1CBA61BEB |
686DA486496C74EB5BB865B7B2B10B66B61757E65864D5248A19644FB25D5CDB |
DAD8EA571730B5BCB259699672C16E74FD3A3D4B39E29F4BB7D2673E45BDF5D5 |
DDCEA07ECF656B6D7938B3B6B1D1F51F115F6B3ABE9B0091A2966B6BD57B4D33 |
48F0C6930DEDD5ADADEEA57FAA9D53DF82941C95924E30D5F23DACE71E58422B |
92EE10565CD6F6953DDB46F86F6D5E8DF757BED66DEFA37AF9225D5EFED679F5 |
DFEC5D16DF4FB0B9D4A7BCD1E2BC874DBDD5F4EB34FB5BD86976DA86996FE1CD |
33EC662BC8E0D560B4D1340B2D46F74CD3EE2D6CB46B3B48206E61A586E636BF |
D1DACA6B9124D6BF682279621248D6F1B8962B41BE5F31ED6CA333B95582CC2D |
E2C8F6D188E7D5923BCD36DB524BD9E7D365FED5B11A869776F72351692D63BE |
48A292C92C66B213E95732DC68C2C4CCB78A756966B07B8BDBBD41D6EF932F87 |
B5B9A36B4B7BD8F4B924D29B4F9E09A3B1951679ACAF964D3AF20D32F6D14401 |
3CB99DAD359D38217D3A3D2B53843CB4D3969B2FB49C5B941DE5ECE51B59C5A8 |
C657B41B72518C2778B9B5B6FAF6D747DD3EF76EFBE9AB6AD6464CB78A246B7B |
736F35D2E018A4BB8E15491944A914BB567B94925B613DC4216D64578EDE52ED |
1AED6370FD826B207497D5F549ED5AE7511A8EA4FA5E8F697DA4DDCB6367A204 |
B58AE56693540D757F75AB69D6D06A4B6560969770ADC4B6D3CC75F57865FB07 |
86E39E58EE44DA5DAEA4C6EE55D46FFECE59ED347596E65B782FADA15D274BD0 |
EFB48B5BBBBD5ADD34E921D534E9604D6BCBB7C31613DAAF977B03DB5CCE61D4 |
2551F69899C5D2C57B6727992949E7824B47B5F26560905D59795E541159491D |
B2538D4E6DFDD7176692496D28DAEA71BDED794936F95B8282BA91A25E7B79F5 |
BDF55D3A2D35576FA63CD0695713DC24C238D1ADEE16EE32F2451CB15B4CF35D |
7DAE078D2183C89AFE0BF82F95E3BB95AE3ED10CA2D8B3DC4B15ADBD9C8F7369 |
762FD9A2820B836FE64A9A6456224864D2E7B185EDA137CA2CDAF23FECEB4952 |
03AE5B246AEEBA85A5BFA64305E6ADA17DA751361169BA6C57E9A3C706A1E1AD |
06E2EAFB4DB0B64BE896C27BCB29352261D4F46BFD6752B7D1B56F106AD3E9BA |
1E8CBA8DAADDC93C56EDF4EB0D3350BAF07DC78621BDD4355D7ACAD12CACB57B |
6B4D4F40BF81644934EB2D61EE7C4D61243AAEABAD0B5FB4EA3A96AD7325BE8B |
76FE24B1D275C9ACAE2C4FAB27352B4159DD4D529292938B50568395D3E79DB5 |
5249B925EF4A69F369D75E8DFDFBAD5E9E6BA3D923CC9A6B496490EF8656B659 |
30D6D334B78AF6F2C525E5BF936EA67DA8CB65E7408F219DA44827800F2C4D4E |
DF4FD3E132A6A56F7736C4BEB982E2DA17BF788F9D70D68B6DE6DD5BBDA5D02D |
64DA8DD5B326A33E66D42D535AD46D9A19362F12180DCC7A7ADCCB6ED2DDFD9E |
5482CED2E8A3F9F2A5CC96D2DCCF6B0DCCEFB59E2F3EF235BB9879B2CD0096E0 |
666B713D9E91A56AF737F67058EA3A9EBBA692350D1EEF59B03A7AC71CF3CDA4 |
69D7526B7A1CD247A85A27876EF52B2B54D5F4EB9BDBFB28F578B4CD4E5B2C6B |
724139D5506E0AF79462A1694A29DE537CAF9746A574A314EEED740B5B5AF6BE |
D76DE89F45B5FAAD6FD3A1C06A721D335184E9B6B25B4B1C9661C5FBDB4A6D18 |
A22416A7518AFE730DBDDC16AA1EDEEA78A486DA2945BCB1D95DDCC6D8D7123B |
DB29B4D445CC7726FA2934A115C8B9B1B7B77B3BE96EA4845947A5DA5B5FCE8F |
730C3A5DE5CC96A9653C77DE544B04D79B774BE75F8B4D4351680EDFB1345656 |
53C2F6532477F159D9C16513A9BDD3278EEA4F22E638AE6E64B7922B697EC2B7 |
859F1AE9ECEDA0B59228ED2FA4D46092E6E1A4B5BDB56B558F58BC8E3B6F2418 |
2D639E786CE39669B499EE6CD2CAEE1B0826B6BEB7D4837CB622FCD5AD354E9B |
954F71CE29C75A6A5150A3295A53E68C249C1D3D24B960E97243A96D1BDDBD35 |
B7AD9DDAFF0083B6F7D70EBE8BD1BC23AFF8D3C47E12F0E5B78A6EDE595B4DF0 |
BE991788F5E8B4CD26D6C4482DF4FB36D524BCD2ADB4AB3B4F364F2DE4924018 |
A24714AD8B79FCBBE1FDAD95C78C7498EFEF6D746D36E3EDE4DEEABA74BAC470 |
DA3DA5EC0D3416B0585C1BABE80091AC678E1B5F2751823B886F34EB8863B983 |
ED2F86DF07BE1E78EAC7C45A96B3F1EBC21E0D974AD36FF51F0FFC3EBBD0FC61 |
AAFC5FF1F47A7DBC2D703C35A1F85FC37E2DF0568B1ADDBCD6EB3F8C7C6BA66A |
525B5B4FAAE91E19F11430B593FA791612352956A93F7D4EB429C60A6E9B7EC9 |
2A8AFEFC5B551D48A519C6CF96DEF29D8CAB49A692ECDB76BE8F4ECF6B1F3FF8 |
97C053F84753BFF056A5A9E99793F87356F2AE2E3C27A8BDCE932DCDB309A6B5 |
87534BABDFB6C76F7AF2A4D3DADC8417500FB2CA040933FB77C34F0C6B7E21D2 |
E0D4353D27E2C6B3E12D2FC4DA3E9DA0C3E0583C4D2C775E2892E92EEEB42D06 |
EACBC1DE2CD12CBC58FA75F3DEE9C676B19ADEEAEEDA6B88A4B0BFBBD434EF2D |
6F06DF5859DDCDABE8F7F6BAC6BF7F6DA4689A7C334569AB19AD30B7BF6FD2ED |
6C6F75596E65B7BDD35AC22BBD4741BE4B7D5B48BAD3AC2FE27BB9128C5AB6A1 |
6D08B7B2BBBCB085ECEEACAEA2B3D43518A0BE8AFA5DF7AD756A6F1ED035E431 |
D9595EADB416F0DEDAE99A6ADDC33CD6C266F7E942345DE349525CBC8A2F99B5 |
4E1CCA945A76768C5C6718B6ACA5D1AD706DBDDDFAECB776BFFC3F5B799675AD |
2BC79E00D67C5FE07F10DD7887E1EF88344BAD73C3FAFF00873C5BA7CDA47893 |
C33A445ABDC6A3A878435FD3AEF40B5BDD2F55B8BDB5BB4D4564D0F444935CB8 |
BC8B535B3D366D4CB62789B4CBB86C748D286AD6BA9DBD8C31D869DA5D8D8B18 |
AD3C332595AF89742D565D4759D252C6FB4CF125C789E7BEB296D67D5F5FD3D7 |
4ABBB3D6B42D0E4FECC6D56FEA777E32D4A5D53C5577A2EA375A7EA7777F6126 |
B9A7696DA7586A327F66E9F07896CE4960B3B2D1649E24F10E8F1EB9FE910DBD |
C45E28B08AF9E4D47524B7BFE3BC33A098B4ED4F525D56D34FD2A0BBB91A2DCD |
FDADC492F886E62D5FC35617BA36957565637F62D78D6B72D78ED7F7DA1DA258 |
59BCE1EEB55D4340D325E2A8D73C6941569D36AA4253752A29C29D29356B5493 |
838D46E3ED24AF0D29F32B4A94A17D1B764EE9AD134DCBD15EE9A76EAB5DECCF |
63F8D7F07742F8377D63E11D475A4D5BC7034BD13FE1617C38D47C2DE2AD1BC6 |
DF0BBC570D958E99E2EF06F8AC6A1E15D2F4B7D7FC25AEC9AA036DE17D4B5EB0 |
B2D1AF74386D3578F543E20F0F7847E6B79A5B892C351D26C74CD36D74BB68B5 |
34D3EFEEECF59B38D05C41A5DCDC47A46BF0DDDCEAC67BAB29756D5B4DB78358 |
B68A296EEF63D3EC74C8278A0EE7C65E3AD77C476764C6EB5868F4DF0FF84D20 |
B8BED62F6EAD637F0CE950E8B043611788C25C1D260827BCFEC9B4B0DF069569 |
AB45A05A44BA7DC3C33F05ACE95E24B3D3F45F116A3A2F8934CF0978B23D46CF |
C33E20D5346961B1F1259E85AAC49AE3E8DAA3DA5969DAE5CE99ABBAAEAED617 |
53CB677F2ADA6A17425919A4F2733AF439F968F328469C5C5D3A718CA5EFA942 |
4F1324A5ECE3562BDA7B3E4A6E53838A528FBBAC232EBAEAF77A767EEAD2ED77 |
57DEE662DCDCDE479B9B8F2E43F65B987ED30D945A72DB69CD25B422385D479B |
1A79F79FE8B636F28678648FEC77B25C3BD9E3BBF9E59DD951A3861455669DCC |
9E4A436EAA8CC6621BCB5F30ABBC702223C7088D44301D69AEEDFF00B3AEA1BA |
B09D35992EE3885FC7A8FD9E34B4B504DC69F7DA21B79321643642CA4865D3ED |
ED56C4C0B6D72C8C60A0A91AC92C715CF991CDB2055DED66D32CCBE6C46732A3 |
DB471DADCA406EE3966F2FCC51F679DE35FB647E2D56E5CABDA7B4D2F27273E7 |
52973B4A519DA5CDBCA4E9BA90BCD2529BE54F55E96FEBFADECFC8A55A1A8DFE |
A1AEEA9A8EAD7F235E6A7AADE5F6ABA84EB0C7199EEAEA59AFAFAE4C16D1C704 |
2ACEF34EE90C51C10A6ED891C6A00CFAEADFC2B8FB4471F893C2935D5BDF59E9 |
6D6A9AC797E6DFDEFD842476F7F736F068F3D8C124FA94779E208F526F0D5A7F |
60DF4D36B296BAA784EE3C498C633926A3771BA728A9257694AD64F7928F3DAC |
9B49CACB5776729522C7BBCB2D2471A49218F7B36EF2F6F97BA492288493AC6A |
24043089BCCDB22C42478DD575A0D3585E6E9ACA7BED3EC2D34ED5B585D3352B |
291A2D2AE574F6959B5682DF50B1D2E79E4BFB7B08C5E5ADCCDA6EAF796FA45E |
D9CFAA23D8C8B0DB693FD9E27FB76A6BAACB74F6B05AC9A2E9E7477B76B28FCD |
95F59B8D711E1BA8AEE7F24C5FD92C96F6A61D4FEDD14ECB691D469C9BDBABDD |
F27C2D27F1F2F35F58A8A6A5CDA68DA4C32EEA18EDEE6E208AEA0BE8A09E6862 |
BDB55B94B6BC8E391912EADD2F6DECEF160B85512C2B77696B72B1BA89EDE094 |
3C4AC593FD5A4A64781243218964D9F7FCB1298CB2C891C922468A64F29FEE47 |
B95C205A8E8ACEFAB6B4F2E9BDEDADEEBD6FE6039D4A3BA3152C8CCA4A3A4884 |
A92095923668DD723E5746646186562A41AEA34FF1CF8D74AB2F0DE99A6F8BBC |
4D63A5F83BC557BE39F096976BAE6A70E99E19F1AEA70F872DF53F17681A725C |
8B3D23C4DA95BF83FC256FA8EB961041A9DF5BF85FC3D05D5CCB168BA6A5B736 |
CB07D9E2657637266B8596323E458152D8DBBA9DA06E791AE55C6F6C08D32A99 |
05E1A77942578C9A764D38CB549DA495E36D56975A5A4AD64D06E14515AFA2C5 |
686FECE6D4FF00B4FF00B223BEB58B591A3283AAFF00644BE6BEA9FD9EF3A1B1 |
5BA1A6C379E52DEC8B0BB1065492D92E5A3231E6928AEAED7EDDDFC96A0653A9 |
42012A49546F95D1C61D15D41646650C158074277C6FBA3915645650DABEA96B |
6C5E1BEB5BB79D5810D6F7D043198D915A32B9B1BC5955C1F3239E398C52C4F1 |
B460AE1DDDE6E93FF3E5A8FF00E0D2DBFF0094F57ECE3D6AC20EED384D55E68B |
4ED695A93575D6CC57F26FEEFF0033A5D1666D4F5AF0FE956379A8D8CD0CFA1A |
68BAA4571AB6AFAEE91796C9757D71A6785AD6C8E956E93EB5E27D42E2EB49B0 |
92DED96D75A934F8E4F13D95ABEB3AFDF6EBE93A147269BAC496D616D26B4743 |
BED2346906B9A9F85EEB45D5B58F11695ABDCDD49A7D95BF8A34DB0F09CFA759 |
7856EAD84FA8F89356D662BAD7B46D4F54B6BAB399B0754F135FCBA158F87078 |
8AF355D0E486D75692D264D4219EC75B874FB4D1BECB7B0C97A6D2F56C6CF45D |
3B4DD1A65B8D42C6CBC36B653D8DA68FAB5D6B3A44366282EAEFFB0C7852F9AF |
352D134583517D46D6DE0F0F4BE1D106A4FA9491DEEA170200759B7F125E9B4D |
1B5BB7D5E49352B6BAF0D69162C9ABDFAF87AC3BA9382BA8A8D6925CE938C1C9 |
D59B8C214A1494E6E6A945CE71953766FD9C6A5A14B91A77BEBA2FD16B7BF4BE |
8B5F3B6E4DAAE910DEEB33477D77A658DC5E5B689A8CF7115D59FD961D57C49A |
7E93AAEB177A845A6E916D756365A33EA3712DE689A5787DEDF4286C6F34A827 |
BAB9B09EFF0052C6D5A2FB4DFDB6A57B62BA3E8FABAE89797373A4E950089FCF |
825B5D5350D174F96E6C6D5D5F53B1D74BE99A75DE9BA1C1AA5ACFA4DBAE936D |
656D6B65EC5FF08F78A34EF0EF86B5ED6AEEC741D1C25C689A7DFCD713E9BE3A |
87C4B65E30F11236AD3E8C9727599F55F0E6B36D63A36AD259DB788EF345F0CD |
F69BABE8DA15F6BDA3C8BA279FE97756D6D3FF00C237FF000925D594761E21B6 |
BED2F5ED2B51BF7D3AD67B16D5CE97A858D969DA7C1AA6A1732DF5DE9FE46BAD |
6EDAE7876C2FF5592C7C21797427B78FA6BE1E9FBA9F3D375BF79CD5546129CE |
5172A519CB9ACE94A152A43DB45C6157D9295E1173AB049BF2D3A2EDB3D3BAB2 |
D3757EAF47C66A66D8A39B6FB4BC9F682BA9CDF6C7B9B19EFC4F7F22DC5B2B5A |
8296D25B4C96D626E751BFBD99ACB51D4259228F518ACAC62D41ACEF6E95F48D |
3DACAD85BE9362B6A6E5EEAE2EAFA1D3ADED6F6FD6391DE756D6351B6BAD4DEC |
E1F3ADF4D7BE4D3A199E18ED9A4EAB588B481A2C6D63777577A86A37D6973AA4 |
F7BF60B46D3ED9AC2D2EDA5BBD0ECF49BE97CBB9D5757BA3A6EBD63E279E47D3 |
E33A56A5A069F70D6826C4813ECE65D3351BC3729A55F6A8D6FA759EA62F2C20 |
D41ED45B5C6AD6EF69A6EBBA2DF5909EC74CBAD467B3948D6347D1DAD61B8DB2 |
D85F5B70D6A56A8E0F952769376825169D4B4233E69DEF16DC927273AA9C1A72 |
A778D277D7FAE9D2CBF2DB5EA73AEA50804A92551BE574718745750591994305 |
601D09DF1BEE8E455915940C8EA11995956452F1965203A0778CB21230CA2447 |
42CB91BD1D73B94816E2B36B92BF677DF9CA10F1C88C2716C67480155963692E |
E48E7B7B08D64335CC917CF0C1BD457D87E08D0FC23AE0F0CF8793FE13887E18 |
F8B7E205978E3C78BA069BF0F7E2A78BBC3F1780752F157873C17A6D8F883C33 |
A341E2CF01C5A9F873C45E2FB3BA8B58F0F786B42F1C6A5A7F84FC4F73E06B8D |
0343F0E6A7A0185C14B152694B97DE8C63F0CB9B9A4A2DA7CD14D41CA3CEEE94 |
62DC9BF7795A94B97A5F46FF00E07CF5B799F235A4291D88D43E649A2D5EC218 |
E7905C476F1A7937534989AD64F3D983242F388235B8B74589A090BCFB57A1D4 |
AE7FB4AE217BC8E2FB46A1A4E85A2594BE1DD3EC34ED2AEA0D2A3B3D36D04B0B |
5869D14B7D6B6361A426A174A4EA5AC6A705D6A1E23D5A7D7353D56FDFF52BE3 |
1FFC137BE3B7C3AF833F083C6F72DA0FC51F871A8E81AEF86FC05E36F827E19F |
15F8E2C7C4DE38BFF11FC73F12E8BE15D4F48D4FC19E14D7748D7ADF43B0D1FC |
73E22B1F1DD9695E27D03E1B78D7C15E20D3F49F10466DFC3517E57C7A52DDDD |
DBDB43A94324ABA3DF4FA84D69134B159B1D5AFD0C1A647617D2A5DA5D59496D |
2187ECDA6AAC7A85CDAFF65B4F025DDEFA153055B0B1A14FD9A9BAB4D292F723 |
6AADF2D68393938BA90F693A57FB3ECDCA5254B9E0429A95DDED677EBB74E89E |
B64EDE76DECC9D1223646DEDDE669E15BBD3EF264B592DDD74F8AE2E229D8C33 |
9D3A18551E4D16E6EE36D49BCA32DC5C5EDBA2CBAAB6A1D668F6970C6E6F34C5 |
BBBDD3A2805FDD359C3BE1985C2C501BAB99AF2695A041AA31B5324F76BA81BF |
D42CAC6FCC765696525C6AE81A1C9716F6772D756443C3A85EE99E75A6A9753D |
F476F6FE23BAD7A7D1EE52C2E249AD61BED22EAD65D4A6BB689A1451711C76D6 |
3AC6B50F61A11B5F104BAEA6A76705B6B57164A9A65A68B67750E9F06A5E7477 |
F26AA65BC974CD1ADB488F4CD3AF93C4371F6A86C3437D54DED868B0E9B6060D |
37D7C26117EE67294632708A8725D37ECE0A518C6A7B49E92E66DC649BC44529 |
BB479A265396EAD757D9F9E8DB565AE9D1FBADDB57A993A0CD7B63733DF68E2F |
BFB526B59E786FEDDF50B6D534EB78636BBB89AD8D949692DB476BA625EDBDC4 |
77113DBC36171A8DC5CC22F1E4BD4DAF0F786B52D4352F0BE9F041A7EAF3F8C7 |
4D74D12D753D62D7C2C16F6EEEF59F0FDADD6A7ABEAAFA6E9763716DA9D926A3 |
159DCBD9D9DC3C10D8DD5D40B7D247694343BCD46CF52B57D2AF9EC6F9A7B6FB |
26D49E6FB65FDBDDDBDF693A70B482DEEFEDD3DEEB169A7C561693DB4B6D2EA6 |
6C8DC7951A99E2B977F65778EF353596633CA9793CD06B367A9EAFAB5D5CC1A1 |
DD6A315FDE0B8963D2A2923B9BEBDB2BB9746BCBCB7D46E2E347D4BFB52E6C2F |
25D3BD48C524B5F86EECB457934DCACF9936FDEBF3C6576D3BB69A795FF17F97 |
4FCB6B11A5AC17914379A6E856CD710E99A9A6AC1B59499EE069D6B6A916A167 |
A321835A84D8C77D3EB574D2EA17FA7C9730EA1776D630E87A7EAF636549F500 |
74B16090B4333B24571796F3BDA1B8D3A0BA5D460D3E786C96D45E2B6A7FE977 |
93EAB26A52CC967A3D9DAFD86D34E922BDE963B2F0A699ABEB125E4D1EBDA468 |
3E1DD135C090F89748D123D66E273E148F568EDA5D4120D5AEEC2D6F35BBDB7B |
8D334BD2DBC4F636F6D25D5EDBD8D8E9BAB6AF678BA1DFA7886E2D6C60D7A4BB |
D66CD6EAEF4DD1EFE28750B56B8D3ACF4B4B3D3CD9DE5D4F2FDB350B5D3868B0 |
E992E8B289AEECBC3FA1BC52C37CC74A1B827C9CF0E69394793DCBBD93B2B46F |
CDBAB73395EFB34D9AEFAE9D57F5D3F027835DB7B4B6B18ED648E4BCB5B18216 |
D24683E1DB5D0ED1ACE49ED349BDBCB0305F5B789E66D32E758816F355D2EC35 |
0B4BB9D658B50BD5B675929EA6F79E21BC7D4CC1AB5CDDDFEA1636D752BDFEA7 |
AA09756BDB8922D174DB29EE9E7BE8D66B4B4B6D3AC34BB9BED46EAFDECAE9FC |
EB81712DBC5DCE8F711AEB3617168F15EEB961AC78A20B2D7351934CB4D2EE7C |
53AB69FE26B4F0C5DF8B7C45AEDE49A1E9F78DAEE9BA75DD96A12EB5ACF82A2B |
2B98FC466FB4C6D235FD6B52C03E2BD3ECBC652EA76934369E1DD66E752B1F14 |
6A0B6A3C48F696FAC5EEB7E14D6EF34CD43C5316A9ABC707FC219AC1BDBCBC9B |
4F87505F12C7A978823B1D1EFB4DD0ADED94A4946D29271BED6F7630E5F8F56D |
3E56DC6A72BB257D526A234BCEDF3D5BBEDE4FAABF5EF6B94B519F4A8F4FB8D0 |
5759378FA51D323F0ACDA658689258CBA3DB5E6A97DA959CD78B24B710225C6B |
A774FA35E6B1A4DCCC5E182F2FEC9341D62D74ADB5BD42DB4BF0FEA3A4DE5B78 |
75ECF58D7A61358DCE87606E354D1D62BEB7497C33A069169AD5A69AD06AEDA3 |
68D378822BFF000C6A90DF6ABA568F716BA2DA7886CED713C5C746D2FC47A8E8 |
FA22E84D6309D322B587479F50BA480471DD5B096C2FEEF539B4E9ACB57B7B77 |
D7A6D36DE6D76EB478D61D2C6AE97D63AA69EF9BA66AB2C42D468767A75AEA7A |
69D766FED58CCB60669B76A52F9B3CDAB5E4F610EA360F6B35BE9F71A15A41AA |
9D4A4B5BEB5825D466B09952A894DC79A3EEF3536A0DCBF87349C60936DF2BBD |
D7BB28A8C633517BB69F9EE9EBA6F7D5B76F2B6B67AD997358BFD435DBAB7D36 |
1B5B947D0B4C4B130C530D50DA0B3D1ADD758D4ECF52820BCB0D5048DA3C5733 |
CD05D5ED8D86916561611DEC9A3E87A5C0B89E31F0C6BDA5ADC5A59471EA4E90 |
6A77B6B71A66A369AC58EBBA7DADCC2BA8CBA64115FB5E6A16D6EB33EA4A56C2 |
5862D3F47F105ACD0A5A687E28B4D3DD76753D5ACBC47E21B7B6D7B57D2B4D9F |
466BED6A1B7FF8983EA5ADAB4924DE5B5EDDCB7D6835386E445AD4C4596A88D1 |
25CDBA4972B6F7296FE22D4352F0E6AB6DABEA57D79F67BB8752F104DA6EAB07 |
87F54F12DA5C5A6BFA6ECB2F118D0AEA09CBDC78BB519BC4A75EB2D4EF356F0F |
DEE8A9656D6DE1ED1F5AF11CBC589AB09D3A907ED5CEAC2A4A1562A315CB094A |
0DEBAB56A6E5195353E7E4F760E3C94A5515AA7A593DB57BABFEB6B3B5AFEACF |
2FD21B4ED6AF645D6B5568574FD3F59B8B2FB65B5A88B51834EF0EEBBAA0B3BA |
D4EEF506BAB7D4356D52CB4CD2F4EB68D2FF00173ACDC49A74F673D9595A5FEB |
599D1EF944176743934CBAD4EDE35D3F4B92D748B9D2AEFC436F61A84569A56A |
9E26B9B2BCB7B5B36F0E5B785357F12F8866F13E8BE1E8F50D57576B5D46E6E6 |
CB51F136D6A97FA469AABA2AEA3697BE1B36569AF59E95E20F05A6917B737A6F |
5B5D9B4E2D602E35AF0C5AF8BF4AFB09B3F11E89AC6A579AC68F3783346D4359 |
B4D16C2F3FE113A5ADCDABEA2D75A9C798EC34883FE165C3A13F866CE0D2F42D |
5FC5BAB7842D754B0974ED6E4F267F0DDCB5DE8B7BA24368DE2AB3BDD06F3409 |
2EB4EB43ABF885B4AF9C92F671A8A538D79ABBA8A369CE4ACB9B9A6ABCA3ECA9 |
42973534F99CAD6746097B43A57A597DDF835BBBEB6F9337FC2BACD9F8A2E7C4 |
9AA6A76FA468361A2695A2DDBE85E1EBEB0D0D1EC6C45DE8675AB5D335E2F2F8 |
DFC4B657FAEDBDD5E5D6A3E2A7F14C9A66A5AF3190F878EB1AE7843EAA593E1B |
7C3EF84FADF88A1F0F6A37FACF8B86A1A778634EBBF1DEA50D8EAB05CAEA303F |
89FC7E7C39AD684B241E19B590467C2FA5C57314124F6363AAEAA82DAF345D53 |
E35F09A40FA71BBD4F4BBDB9B2D07C3DE20D66E355D0A1D3B568F47B1BA9E4F0 |
C689378934FD16F344D67414BBF1B78874FD32F3C51AD6B3777F05B6A1E1496C |
3C37E20B0D274BF0F6BF757C4FE25D6AFB409F5A5D67C71369CBE1FF0007F876 |
D2FB54BDBCB3D55B4B68EC74ED2E2637ADA9B69F6D6F6D6DA6E89159C82DEDD6 |
026C174BB978D2D3D7CBF1D1A587E4A8B9AAD48CE6AA7B27CF4BDABE69547154 |
E72E56A528D274A2E13E484572B9A818CE17775B689ABEF6D976BF7BB4D5FB2B |
9DD787B57B7D08DEF8A6FAF6DB47BBD5B4CD46D934BF0C5FF8BAC3C4968EB776 |
F258E9BA3DFCF259C31CBA8C905BDE699A66A77BE21D3AD6D2DAEAEBC43A6EB5 |
AD347A25D62EBBA46BBA0EB37D6DE25B4B6F06DC4915A6B76167E258AF605B4B |
7D734FFEDDD1A082C6579F55D3E5BAF0CDE59C5A7417B70F25DA5F585CEAD73A |
5CEDAE482EEB1E35F0CDB78CB41BCF164506B73F865EFB51D4F4DF08416369E1 |
887515633697E0AD023905C5B3E816F7B2DC1F155FF9B2DAEB2D35DBDAC7A84B |
1C97DAF73FE30F17F8BBC4DA6DD5EEB8F169BA53EA76BAFCDA3595ADB5A4A75C |
92CB4CD366D6E392D82247A9DEB584534F713C11BDADC6B1E20786C2356486EF |
7A988A4A1554272AB3C3F3371A695F4A6E556AE2E716A149AA8E49469CBDA735 |
3938A7052889277574A29E9AF9BD147BDD257BAB6BD1D8E9FC5BF14AF3C4379E |
0EB78342F0DDBE81E1BD33C27A26A7A3784EC66F0F69BE27D33469AD9EF2FF00 |
5FB8B2B3BC8B52F12F8A6F348B29F59F14ADC5DEB57BAD59594565661F49D3AC |
ED7C7DA316505ED8CFF6982F2FAE629E4BB325CC4973A5490DC59C779788D72C |
D1C935D4923C969A85C58C42FEF6D85E48B6714B0C7951CCE659E5B9B2B992D0 |
C86CB505B8BBB876B6845E5ADD28BA91609AEAD2496FA3925BB98C216F249AEE |
3B1B6B79E36F2EFEAFA8DDCE52EA6486FACA06B88209258ECF72CD70845BB10A |
654B958E6D39679AE60812C6EAEE3D4B4F8659B4FDA1BCAAB8BF6EA75AA36E71 |
D29C3924E10A53E6A75656718D48D2E44BF79172973A9A71826F9F451E5B25B7 |
577D6EACD7757BF4DADDFA56D47ECB691DDDAAF92658B536792DE79209D661E5 |
589B886D458DBA7D9145CAC9BE689B45792D152D5D26B881ADEC353C4BE34F1B |
DFF85FC21F0E359F14EB9A97817C0B36B7E21F02F84EF7595D4F44F09DCFC48B |
5F0F6ABE27B8D16DADEE27B1D3EEBC40348D064D756DD6DA79EEF4C806A56767 |
A8413DAC387E289F46B9D7751B8F0DE9F73A5F8727BBB99341B2BC5FF4A834B6 |
B99BC88EE256B9BD7B99626F32179A4BEBC7063F27ED0CB12AAF3F5E5622AB73 |
AB08B4A37F669D393E49D28CDCEDF0C79E129A8548371827C919BA7CEDB5A25A |
2FBF5DEF6B7DFBAEBBDAF62F5FDBDA5ACE9159EA116A719B6B4964B982DEEADE |
05B89EDE39AE2D635BD8ADEE64365248D6934CF6F0C72DC43335B79D69E45D4F |
4DDDDC86766760A880BB162123458E35049276A46AA88BD1515554050055E875 |
5D420D2EFB4686E5A3D3352BCD3AFEFAD5523C5C5D69316A30E9F23CA50CE16D |
E3D5AFF10A48B04AF32C93472496F6CF0E7D73CDC5BBC572F36B2824D460F9A5 |
68C5CA7394A2A367CD26A57728D9A5CD2669E956AB73768F25DFD86DAD64B49E |
F2EA39AC12F60B692FECECDE7D36D6FF0052D29752BE81AE9278EC61BD824F2A |
29AEE79ED2C2D2F2FAD7ACD1A63AAC5AC6F7B3B7B3D416DFFB674C9F51D0B49B |
1D57C4D7BAA6A07C3979A4D8FF00655B58785F4AD2A4BA89754BF57D32C74BD1 |
175ED263F14E869E2ED37459F95D192337F04EFA9695A635A4F657114BACD8DC |
EA561248351B384ACF630693AD457705B4534BA8DEDADED8CB6D75A758DE5B24 |
37B7935A69B7DD1EA7A94DA8DFDB68C24D0FC311C30E9DE10D424D2DECE3D1AF |
2C2C6E6CD3FB4F58D43C35613FFC24318BED32DF5BD5B5696E75B6D46FFCAD43 |
46816D61B3B4B6E8A0E318F3393BAE64A9DD3556524E2936EF1A692BF329ABD5 |
83941734652514FF00AF2FF83DBB6E741A67862DA1D76DB4DCC9AD6B5ADDCDC5 |
95B5B5DDC59E8FE23F0DDE5D78B6E3C170B6AFE1EBFD66CD6EFC5FBA5FEDBB4F |
0D47E23B3934BBA1A5EB1AA6A93F87AD7565B8C3D274F13DDD96A77F6F35D58C |
C658AEF4E9F519B4FBB5D1EFEE2D3489AF6CB51B89E19AEB556BAF1043A85AC7 |
6561AAE9EF70D3DFEA3A5DDE8F6FAA69956350D4B5B1ACF89B56B278A38AEB53 |
BC1AFEAAB0BF88749D3350D72FFF00B4CD85BEB923F8852632DD68EF0D8EBB6B |
706FB5C82DEF7FD3EFB4D926924EDBC5BE0CD76CFF00B7EDEE3C230781A4BD9F |
5CBED2344BF6D1DDB52F0EE95A9CE56DF43BCD40C115CEB5A0DCE9D1C17B71A6 |
EB17DE25D7F47D6F4BB8F0DE88FE1FD435ABBD6BD2853A7284F9294EA7B197BB |
08C3F7739A92E49FB47CEE5ED274AA426ABB4AA4E6A8D05374614E9C36EFDAFB |
B6F557E96B2DB4B5B6DDEEDBF1DB1B76BBC896682D85B697752DB2DD0BC6FB6C |
7F689526FB2E2CF50811ECD27BCD424CAD942D6FA65DA5A4FF00DB925AC77762 |
11A20D674FB5BFBDD4E7F0C417EAF752DB5AD8DA6AF268F25D79B3BDADB4777A |
A58C5AE5DE98B12A477777710DA6A062D3EEEE9ECEC45C57712CCBE2763A8DC6 |
B7A2C53DCDA2697ACDCEB3A459BCB34BAC789AF6E2F353D123820D47C41ABDDE |
9F753DAEA5A8EA8AEFE399FF00B663B44D18F84E1D42E21E675FD1D92E6C34DD |
2D26D465B5F0F2EAF746DED60D890CD14FAE5EAE9D2596BBAF2EA9A4695672CB |
74DA8C834ED4ADEDE2D406B9A569D2E977621E4A98774A1CF0FDEC13872C9FFC |
BE4DC3962E942A36A12E493E66ED254BDCBBBD4749DFD7F2F9ED7D569D2FA9C8 |
88666689562919AE31E428462D36E91A21E50033266546886CDD9915907CC081 |
1D6FCA125B569E7BAB78AEEE2DF4AB4586DA0D32DEC96C2D952096E2E7FB26F9 |
27FB7422D74879229B45BBBBD5A5BAD5F53BE91751D3CDD5FBB40B0B29EFCB6A |
D733DA69F0DA5FCAD7765A7D9EB8D15F8D0F52D43468E6D3E6D63488DED26BEB |
3862D56617571369765F6BBB5D1F5DBCB58BC3DA971FB1939C2118CAF36AD7B5 |
D296CDABFBBA273BB7651EB68B936DA4AFD11CF5761A348963A9E877325858F8 |
9E274D3B529F42D66F67B5D2356934FD55A28348BE68AE34AD51EC6682D46997 |
70E8DAA697AB35ACF791E95AC5A46EB30FAA2C3F67EBCF8A7E23D6BE15F84EE3 |
C11A4FC50F879E091A1E89E1EF105B5EFC2DF1CFC66F14378A6E3C7FA9EA5E27 |
83E2AF8934AD0B42F18E9BE0FD7F5AF08E9B0D85DE9B77E2083E1E784BC32BE1 |
59FC6BE318356F12AFED67FB3A78FBE0A7C48F883E1FF881E06B0F877E2BD23C |
6DE27F0F597C2F96599754D1B4AD07C5FE3FF0EEAB75A3D9E9D7FA8DAC5A0E83 |
ADF86FFB0F4C6D5F54F3B5CB6934BD4FC2B178A7449AFF0056B2F5696595E9C2 |
B55B39AA695B92CDB71A9569D78C5C3DBC1CE9FB274A4942AC5FB683BFB39734 |
A1D48DD2BEFF00AA4D3E8ECEF74F4D9ADF43E5DB1B8D1ADE39527BDD3A47FB4C |
C15754D166D5AEA1821616D6B17DBAD6E45B4B18B68227416E5A142ECB1314C5 |
5DFB7E81FF003F3E1DFF00C24EF7FF0092AB3E6D16EAF750D5C982E35A6B6D5A |
F6C8EA367AADBDADBCFF0065711A3449A8E976D76D1347B1E1792CEC4881E38C |
D8DABC6D0AA7FC23173FF402D47FF07DA4FF00F2055C258A8C5469E169CA116D |
4652C3E60E524A4D7349D372A7CD2DDF249C536D2D15897CB7779BBF94A9FEBA |
FDE72B6D244A278A582DA437514704773726F01D39FED56D335EC0B69320797C |
9865B4912EADEFE0FB2DDDCB4569F6E5B3BAB6D9D1F5CD534E8AE2DED75B7D32 |
D6582F6DA5B4F2E49ADAEC6ABA56ADA15D4D2DA2C12DACB3AE97ADEA7647509C |
1D46C6CAFA6FECC67992286B9DA93CCC2ED58E35CC7E5BB6DDECFF00BEF34499 |
90BF9520C245BADFC9CC29B181F32732F8B4EA3A72524ECE29ECE7172D6E9374 |
E509692B493E64D596AECA26CD5FFAFF0033B2B1F132DA59E996B369DA1DF244 |
D33326A5A74D3C72DBDD43FD957D67A8DDD96AABA8CF6B796B15ADDA33C49A9F |
87EF346D2AEFC20FA34B3DD5DDD4BA93C76F64FA5689AD4A3C2DAE1B7D767B5B |
DBED1E7BEB73A1CBAC5ADA69D3C56F24578D73653EA3AC1B013C3A17FC2470DF |
D8EB73787F4856892D39EB259A3B882C606B6173757D6D1C32CD7674989F74F6 |
72594D7BA85FB58C369A4CA18CE933DDE9A22256FEFE78A3B4B565DDB1BBFEC6 |
BDB4BCFECC865BBB27BD1A8ADB4D630FFC49E7B69F4C9EC74BB5D4348BA5FED5 |
B053AC492F89248FC4AB6D70BA65E46913E93732EA3DF4E6E692A8DD928539CE |
11A8E74D7BB1AB1E684AF5232A116A74938A4AF08B8455DCBFF3B2D35EDD3477 |
7BEBE77284769AADECC1D6CEE48D02C63BA8DE1B5B6022D1D75268EDAFB52D5E |
D1B4E7B9B74D4750B1D3E3D6E596431594B6F0DBDDC165A769F6899EAB6D034E |
979F6BB88A3D3EF628ADCC965677305CFDAA78ACD48B83A8BDB25BDE98AFEFAC |
E1812F6EA0179631C96905DB6B31D9B8B9D4ECCCB3A4B763CC80DB43A94065B2 |
536FACE9D9BF8AE0DAEC59EFB54D2EE859EA627B8B9FB459C9756F73F6D8DE29 |
A2A97724093DCC4915F5AD9B24AFA7DB4B7C97974B6378F15EE9D677D791C569 |
69325BAC89792C96FA65A1BABB3266D6D1A543658D4E48F324AA2945C94A551F |
DA6DA8C64A31F67A2A6F4529C6718A704DB9422D3EF6F2FF003FE92B1ABABEA1 |
A9F882F5F56BF1631DD8B6B2D21E4D16C748D32C6DAD34FB05D32DA5B983C3F6 |
E0DFCB2697A55E9D56FE6B79353D5590EB7AB6A5AADE6A3713DD765E16F12C9F |
0FFE20F853C756F07F65FF00C23FE3BD07C4B6B696574B1EB963A6E9D7DA7EAF |
A6C1A4CDE20D33C4E2CFFB222B67B186EB51B3F11DA3DE462CF59D335FB3B79A |
CEEFCF00516E4C49E64CD1B2CB716D6F309AD62FECB8A548CB5A5EAD83477289 |
7B0DD19A37BB5821BCB9BB8CCC5A08FA5B2D46EBFB29EDA3B4D3C437D79A54FA |
8A6ABE1DD3A7B38A6D22DB51B6D1E55F12DF06D5749D3C691E2064934ED3AF23 |
875BB8B5D36E757B6D46EAD347B98FA6836E52776EB3946AFB46D5497345CB9B |
A45CA6F9A2EAC2152EE0AA2E69F23A2A64B4B5BDDD636D95B45F2B6B66D5AF6F |
F11F707C4AFDA63E287ED5BA27C12F0278BBE2B68FE30BCF007C03F18781AF7C |
41F1AFC63A7786EDFC2F6BF0EBC5BF1C3E26F82743F0E78D6F740F055C69FE21 |
BEF031B1D0BC1BA5EB1E21F88F378AFC69AF41A2DFEBD35CF8B22F03F873E45F |
098BB9668A2BAD2DB59BC935D86CD6DE6B0B979F544B09AD2DACEDE53A4AB5C5 |
DCCD7EC96C0C5A82DD266EA6B6BFDF66D22E7D86953699A65F4B70F25B46D6FA |
7DD4F1C0B0457B1B69A0B5FC0B7163242248EEE2802DBCBF691228B895E65170 |
D7125C7A65E4969AC691A7E9BA678666D375CB3D5AD96EFC551EA36F63E18BDB |
4D42DADEDF4AD2F588AE2D23B81AD477FA6EB7AE5C6AD75E238ADEF34F953447 |
874BD0B4AB448BDFA11C45474EBE2253F6D1A692A2E2ED67CF049C1B9BBB8D37 |
51B9B7252AD57E1D6060F955E31B72DFE2BF6B3DF6D2F656ECBD4BBA6EB57369 |
A4DB5A08EFB54F2F40F11697ADA5CE9FA4EA3A6DBD8F882036096D20BBD17518 |
4E9B6BA9CD06B16F7D7B0D82D9F892FE09FC336FE1BF12C769E20BDCFB8D4F55 |
D7CEB9AE111DC8961B7B9D427BEBC5BD6834C9B5AD2B4EB292CB50D4EE353D41 |
FF007D71A5D9E9ED15E4DA9CD69347657370B6D35F636B504FF8469F595D3B4B |
8974FD24B693E36D334F2353F11DE3BEA97772AB2DDDDF87E3B44B6B393588F4 |
29352D22D750D0D7C61A5DA6BF32D95E2F87EEAFE1D26DF4FD62DF41D0AD643F |
F0925FD95D457DA526BE749B1D4BC456907892EF49963B7D4A09F4DB9975149F |
4FD27C3CD25D584EB3586BBA7CEBA7A6B235CAF4AEEFC9CF6928F2F57769FB38 |
5A4D734DF373AE5E55CCD5449592938B75B75BF6F3DBA2D56B7D3F055ACF51D5 |
34DB79F4DB28F4467B94B5BE9A7B93A4CFBEC22FB06BB3584B733FDA2CAED247 |
D334EB83A2DEC77173FDA763FD8B6F1D9CFA9EB3657E9E1DD097C55AB43A4E91 |
A95BACB3E9571AAC735F5B5F18DADB4DD3D351D72E48D1ADB5B6874AD1ED16F7 |
51BCD6EEFECDA65A6896136AFAA4FA6441E18EA5E788120363A7E99A569FAC8D |
1F50BA8E59F5C99EE61BCD3DEC65B546D37ED3A75AEABA268B3EA33F8AAE2D56 |
CACF4ED52E25D760BB6B84BCD0ACB57939DBCD6574F9FC4B6979A7DCF9D7DA6C |
1A1CB1EABE1FD0B49D56D2DB4DF12E99A8E9ACD612C176FA06B965A7E977097D |
ABE91AEE8DACA3C9AA9D4B57D6205F13E9B26753111875E651BAF794941A4AF6 |
84D2576DB71D2EAD17256B28D4146FFD6D7EEBF1FC3CD7710EAF2F8555C3E9FE |
0FB94D46C7FB3F4C91E0D62CA5D6BC297916A5E0DBF974F7B16D2A0D32149F4F |
922F361B7D1BC6525EDCDA4D73A84969AE5EC51717E10D767D46EB4C8A4B91A5 |
D90D560F1049AABBEA12D9C69E16B3D6755825BFF0EE86F73AD5B2CB776925AA |
78934ED4DEEBC31A641AFEB8208E3517163C7FD92D353D4EFAFA19E7B4B49ED7 |
50178F2DCDBCF73169EF28B4D3926D42D841A3DE3CBA7DA3B5EDCDAD81B58AF6 |
1BF222B394D8C5A6E64F2348F24D09D3BEC023373A925BC90CF2D9BAD84F6CD6 |
F73A88589B5493515D4182B1B83717378D756D6D7D6AF6F35F8F36AE32ADE134 |
9C2973CD4630926EAD3E68C9CAA36938422AF0AD08DAB53F7F927154ABCCD545 |
7ABB5DB7D256B69DDBDD3D9E97DE27AA1F11EAFE30B8D2AFE4D3FC3536B37F7D |
E1CD1FC3D7338F106A47466D1E0D1EDEEF5F9FE4D4EDB5493E2278864BABFF00 |
13684DA4DEDFEA9AD6A7E24169A1E936F776B6A98905EDF6B7A5DC5A2E99AFEB |
DE15D12DEDA4B486EEEAFB568740BBD47540669E5D420D52D746B78755D5B4AD |
5D2CECF50B6B9D3E7B06B48A5BDD475C8ED2E9F9CF0EDA6B9E39BA8F47F0F693 |
AAF8A3C67AC5DD8C5A6F847C27E0BB6D4EFF005CD374BD035D97C4F248FE1C82 |
2D661D552D6D6CA680D9F86357FED1B2D475DD5B54F12E9773A2DF0D6D346BED |
191EF63D4B51B586D62D2F44115CD96953EAF77A5C7FDB5A735DB69B75797568 |
C5EDEDF3730DA6A96FA9C2B71731E93147A5CD17FC241A573D2C642AB8B94E4E |
328D48D575A54A32A9EE3A8E52E76E1C8D2727093A928A7461C9ECE9C6516E36 |
BFAAB5AFA5F45E77DB5D2FABBDEE6E43A81731CA65800985D5C241691E9C9657 |
44CE96F2C160D68F6B616C63D464896C2DEDEDF4BD3A1B3BD834EB7D32DCDBED |
B0AB1CF1EBBA99D2ADAF6E2D2CE74B76BEBC9ED1E6D2D2DB50B35DB25DBABCDA |
9456C627B766B6D2ECE2BE2A97ED14724F30B8B5CD96EA1B892CEF84F7A736F0 |
66E1ADD6DCA4D1ADF5CDA7092222EA29612DE7DABED3E5E82F6D771EA571B6CC |
5BDADD4771349A55DC16CB1C9630B5CC57B7B731592B4F7F6D692B4B7729BC6D |
5EF2EEEE369DCCF35B989AF6D74E95DE50F0C724771D13AEF963777A119C3DA4 |
94B592945460B994D469C26DFEF2D2E5504E31536E72254757FCCD3D3F17A5B5 |
6BA777D5683921B9BB96DED2561AA5A5FC52471DBDC6A9A37848B5F5F88B4D59 |
125BF84E95A944BAE6B5A56B1F6883EDA22B3B2D42E56F2D6CEDEFB5DB7B7A9E |
A1AA4EF2D8CD76B04777E21D635ED46FEF65D52FFCDD62DED6E750B16BA57377 |
6FF6C78266BED22ECBD9C31EA5AF6BEBE22BE8B44966FECAAB61AC6A1A65DF9D |
6026D3EE750379E6EA765631B49AC5AEB11CFA75D476B612417C25B45F0BEA17 |
D34C5A1967B4BF78E691E1D48096EF060BA8B4BD5A6B89869F736968E54D85D4 |
31DD4AD05B5E470B68B768D25A6A1708D6972D6374F61AB5A97B1121B2D5E51A |
72C4BC352A2845FBF56D52A42336E4AF4A115CCE1ED26D569F3A525353ABECE9 |
46495195483E75A2577D344DEDBB7D6CB45E564DB7BD993EBAB7BE1AD6752D37 |
5CD3E0BEBC9745B7B0963D4B4DBDD36F2D96EB4D86E6D2EAE2DB54B2B2D7B4FD |
7AC2F3EC178D73E640B78B6B3D909758F096AFB6FA7F11DDDF43E16D0BC3FA9E |
A5AAEACFA26ADACDBE802FF55D45F49D1FC2F75069DAFD93F847C3BA8DCDA5FE |
8BA578C2FBC457FE25BDBAD47C39630EB27FB2AEF499A3BC5F13C32E478A3C43 |
26BDAB4FA8A6983C3F0B451C5A668563AA7886FF004AD0F4DB88E7B8B8D3B4A9 |
3C53AB6BFAF7F66DDDCDF5CDFC31DEEB97AC3EDD74649AE8DC99455F100B179E |
C6FED7C4179E22BED5F4F4D57C413EA16371697963E21BBBABBFED2D3E7B8B8B |
BBD3ABB02915F0D6526517C97CA6682DEEE3B8813C9AD5149E25C1A945CE4A2E |
4D29284EA7335FBCB55ABEF462D27194A9AF7DF249C8D174BAD6DF769E5A233E |
D278120B9B7B94692091A0B80B14DF679DA7B7F3618D6390DADDC5B7CABB9E49 |
1248E3DDE5A949D594433EF5FCD60CC2D6D2CA1D3EE2D52C8DF5D4F0437D6AD2 |
45186BC9E6F2F4D33DAA5CEAAC24B7B54B1B66B3B7BF4F0FEA51CFFD98973719 |
1A358BEAD7D6FA3C12E9B6F75AADCDA585ADC6A97BA7E956697375731DBDBA5C |
EB3ACDE69FA1E8962D712C32EA3AD6AF7FA7D8E9B6104F73737D0DAADC4571D2 |
5EDDE85359E9969E167BFD1218EC7417F10E9DE24D76CFC4167ADF8AA38AE2CF |
50F1159A43E10F0DDA699A4DB2EA8D1693E1FD493C4FA8E8713EB9711F89F518 |
EE8C9214672E451BC2DCAD2D20A764E729C149B84EFEF2765560DC5B845373B8 |
9AD7FADFA3B7CBB3EFD0C6D4AC6E56C2DAF859CF0E9D70649B4C75864B6B396C |
965FB2DCDDC315CCB3DDDD93A8A369F797C259ACEDAF6C8E9B1DEDD6D823B5E8 |
759BCBE4B0B482F5669EFF005686697ECAB04DF678E492458ACECD602B1296B7 |
82EE795931717E9A9C3A7BCD2BC31400E822BE83E65941A968CB62B1EA16AFFD |
89E27B292EF58B7BAD4B57D17551A84E9A83DBACD3E95BEC192DE4B1D1F51D0E |
2B2BCB0B5B997568FC4273E7BCB65B28EF5E6B4BFD5ADA18BEC970B7BA73794B |
6D60238A475BD916F666FB45CDCEA0216B15BC6D4235B6943456F6B3CBE9429A |
A74EB355254E55A8C3DA47E28415397EF254D47F88B96F0A11D7929CF7709424 |
45F55A5ECF47D5DD689F6BBD5F76BC993E9F30B0B19EDD753290EAC97936AD17 |
9F1DE6910DBE8E751D2F4ABD8ADA7637176607BC165A624C6EBCFB5BABD81572 |
FF002F39A95CE9D0AB49616B73A56B69A8CE2E521B8731D9C71C6F0CB15B4D0B |
471F97348DB94471EE461711064B5FB3AC98925CB8F36385D85BB42B681594FC |
D6E93C7703E4925B8F21A6B98C5DCA90CBB1677956322262A6573672DD38B88D |
74E862B36876E968FA824B7D67A7186094FDB35420AEADA9411CDA95CC178D6F |
662F2EEEB4BD39EDA0B4D21B86A6339A946942104A0A315295A5C937F14E94DA |
FDDF34A2EA732941F355A8E519DA9CA95A8EADDDEAFEFF005EF6DBD12F3BD5B8 |
B896EA5334C54C85634F9238E14090C690C4AB14291C48A914688AA88A0051C6 |
726A1A9ED668EDEE6DE796D60BE8A09E19A5B2BA6B94B6BC8E3915DED6E1ECAE |
2CEF160B855314CD69776B72B1BB182E209424AB25FDEC9A8DEDD5F4B15A4125 |
DCF25C3C161676DA7D942D231631DAD8D9C50DADAC099DB1C304491A28000EF5 |
C0DF3294E526E6E5769DDB95EEE52949BDEF6EEE576DB565CD458D1AFA2D3357 |
D33529E092E62B0BEB5BD6B789EC92497ECB324CA8ADA969BAC69E77320056FB |
4AD46D1D72971677113346D9C4A6C5015BCCDCE598B0285084D8AA9B032B2B09 |
0BB191838640110A33493DD259A3C42CA7B9B88CDB5B3CCD7569159BC778F023 |
5E4112457B7C26B682E4C915B5DBC904B7702A5C4B6565248D6D1C051C22C855 |
846CCE8AE54EC67408CEAAD8DA591648CBA83950E84801972DB972F268E31729 |
5972B49CB9137CCAFBF2456F6D2CB77706D59C5BB5AA048A55BC8A5B892E6792 |
EE0FB3CB6AE2CE3B486DAC8DBC73A5CC13FDB24B9945E5D0B982780476766B61 |
7371795A8A94F7F356E9EBD53B6BDACDABABEA076F078AF5AB7D1174F8A4D36D |
6C12E566B78EC0DAD96A90D94B16A7A7EB5611BC1B8CD6DE20B6D4EDED3C45FD |
B505FDFEBD63A478761BA7BDD27414860DED535CD37C57A85F47E209AE2D352B |
AB3B2B597C4B77ADEB3A9496177A3C7F6647D42DB57B71AB6A5A2EA702E9B1EB |
3A7A49A9EBBA76B3A75EF88BC376C6C9C783351F303B2425218D6350D3CAAD2C |
C3CCF2820758A4918C503B46B1B797E5C31493CB2320572D0C49B3676EF7292A |
5B6972DEAD9D90BABEF24452436B04B3E9A8BA96A7A92248D6B646F2782CA74D |
FA625889A1B56BE5BBBBBC79BBE9E22ACA2E97339D37C89C66A55149A8CD38C5 |
2873455A6F482E7A718C5D37CD1534ACB7EBAED65FD3F5D37BE8CD6D563D62CE |
74B3B8D3A2D1EE3C2A2EB4BBA92D745FB05EEA1AAC7A95F6BB2FF6AC2429BB9E |
CE67F2924B98EDEDECB42D2B4ECD9C53C71C1738529172B7B731C3059DA4EF75 |
3C1636CBA8CB65A6349731C8F6F6F25F47A8CFB2248EC6C96593517BC65BDD38 |
5E6A1383782B76D1F4FB54BBB5B6B12D77A80D2E5D2352BBB02E3FB56D2529AA |
E8DA75C43AC490D9E992C97B2DBDBEBB1CDA9EA334DA46953E3425D5AF65D268 |
47AD5CDE5A368F2DEEA11D95D5DDE6ABF65B4B382F36EB4FA65CE9F6715924D7 |
10DDC29AA836B65AFDEC77DE76A16E6DAEAFEC359BBD134F4B875392D16E534E |
4A69536DCD45DF9210E793A57B53F65CD656941C6A37269585F2F5EAFBE9EB7F |
9FDE58D1EEED747BD8752BED26D3C42F63AE99E5F0D6A163AA45E1ED76D6C6DE |
E25BF8759934ED4745D42D2D2DCBC11A5A68EB61AA0B1BED524FED6F0FCF6BA7 |
3DC56B18FF00D2FECD74B385960BB1059A14B555BA093FF63D9C726AB05DC971 |
690F892544D574D6B730DC2DA4E5EF1181D4EC72D3CBB99200A23324B7B1816A |
6DD8AB34AB08B8791EC6182616F2CC156D6CACD259218CCE9188A408F79763BF |
FECF368D6D3485ADBEC770D17DB7CE8E599ADAE26884463B188DB5BDBCB79731 |
6A3646E19A66BA960572C24B948A7385E3CF2E5A519DD38BBC9F372F3A76D5A9 |
C57BD194D5D27687B497BE35BDB7FF002BB5FD7A7CBE96FD9F3F688F187ECF5A |
CCBE22D0E7D2EE6FB44F0DE93AEF81B44F1D683A778FBC2136BD65E35F0B78A6 |
549FC35AEEB29A2E951EA50E99AF5935FD8E997DA95C6997F7FA4B6996FA86B9 |
1F8B3C37F4DFEDADFB497C7BFDA87C5BFB417C476D5FC5DE2AF845E0BF89F65E |
069B5DD1B5BB9FF85396BF0FF58F11FC41F127C0EF86F6DF0CAD3C5DF107C35E |
13F0968F1F833C612FC36D17C15E31F107823C1769A34FA16937D73696DA4EBB |
17E765CAD8EA2B676B67A369B74D61124775AE69D2788AE351BE8AEB5EBCD4C6 |
A9E25B7B8BA7B4BCD59AC3538B46F2340874A48F4ED1A179ECCEAB16A3A9DDF4 |
FA46996F66FA0C7ABDADBB4309BEB2BBB7B6107DA35047926944505F5D596A2D |
6A97160BA8DC33B22C71CF3A2BD9C9196B2AF6F0D3C554A6F0B19F2E1F923055 |
2124E504E7ECFD87B474E30E4E7946A54545DEAC287B15373F69CB8CB914B99A |
F7AFAA7D6CAF7B5DBDAE95F66EF6B587E932C56BA75A258E97248B25BDBDCDC0 |
B296CF64773730473BC721BDD423B9320492275F34C845BBC0AB215002E8FDB6 |
E7FE80FA8FFDFDD27FF9695B1AE3E917379149E0CBCBA8F4D163611DF5BEB9A2 |
DC24965E208ED635D7EC34CB93E23BE9F53D0ACB541716DA3EA97B39D4AF6CA3 |
8E4D4912FBED02B1FCAD5BFE7F74EFFC15DCFF00F2E2BD5846508C630751C631 |
518BA2B0CA9B495972296A9793B7A2D8C5D9B6DDBE7CD7F99E114E4778DD648D |
9924465747462AE8EA432B2B290CACAC015604104020E69B457C09DA6A5F586A |
7A25DDC595EDBCF6D2DA6A1716D343736F2A42D7BA55C4B6B3A3C17512ACAF6B |
379D0CB14D0EE88BC90CD1A97742EBCB9B3B8448EDA1B6B5558A046C5A4D11CE |
9F6D2C4B309DEFB52B992E75991DEF35047296B05F4B1DBD9FD974AB6B786DA9 |
413411457A92D9C57325CDB2436D34925C23E9F3ADE5A5C35E40B0CB1C734AF6 |
D05C5818EED2E2DC417D34CB10BB8AD6785D6A97773716B0D9AB35D060B6DE42 |
AC72870ED3090CA811B746C59CDC4AF98A3419912285426EA49BE5A716D54B28 |
C3DEA938B72B382695352735AD92926A515FC45CD15EBD3FAF3FE9172E67B3B8 |
804E913432EEB969EC94AAE9C97375B52292C20FB58BA894410B4D3C989A14B9 |
86D6D9A216B2468A0B9B5B68A64826696E229A44B69858411A4B04726FB4BB4B |
A1243A8D95DC723CD71953379816D2D66CDBC463A7B1B633452DF59C90FDA647 |
9E4F3EE6F5649E1BF836C7750CAD6B70DF67B3BA8E6BA49185D4F3ACF1C2E2F7 |
CA9653B0C90D869975691C57FA75DDC6B3E1C7FB448659B6422C752BB9E117FE |
768D636735ACB77A74D3D8DED95D4B3CF1C5716FA9E910E9D72BAAF428B939CD |
4A9DD27172846A464DFB26E2F97F75087B4E5B38CE4AF284B96128CB92A2ECB5 |
F9D9F5F9BD3F5D5ADD66D85CFD90EA0D6E9A6389A1B809712DA4F3C16AE12F42 |
DAC32DEEC689AF2D12736E9325D9BBC5B5B5C26E6B9F27A8D1F55834F3AB451D |
DC9A4DEF8874ABCD2A79B4F9F5E7BCBDD375A48245B4BFB3492F20B98EFD4C37 |
53C03519C48C62B7963F3048C326DEC6E6E22D535A4BA449ED21FB3CD65A8DBE |
A57576F2AC57DE7A35DC96D25A936967A74325FBDC5C5AA4B71A9D9E969A7CD6 |
1737B0DBF51A669FE1FD46C75A96FF0056F13C1A8DB594537816CB4CD1F4BD66 |
C7C417D1F88B42B5D5EC75ABDBFD5746B6F08E829E0BD4B5FD422D434FB2D685 |
D788B4AD0BC0F7FE118ADEFEFF00C57A37761A3560938A84B979E54A33829467 |
4E529C64E925514E15A6DF228F346A733853B37285A6567DD5F7B3D9F4BE96B2 |
DEFB5AEF6BDFA2D2214834855BFD5AE6EB596974F36B66FA7C71C1269A6D7503 |
AB5D4D7F25E437E97363763C3F6B69632E8B3B5F26A1AB5F5FEADA6CD6363A5E |
A5D3DF4B1A5B5EFDBEEF50B7B7D5DA6974F7D5352BABEB1B183C35A2447448BF |
B4B43B87D3F50B9B1D27587824B6BDD2B4FF00EC5D627F0C5BEB5756BA04BAE7 |
83AEF904696C6CCCCCB72D61A7A588BF90E9E2436097B16A8F691DC4BA779765 |
197FECE963822B4B799921D3EEA56592DFCCBBB5EE4786B169776BAB6B10C57B |
E1CD5353B79F40D2ACFF00B47C5B73A8695FD8CFACCD71269B269FA70D2EC748 |
FB76A11C5AB6AD0E93737165742CD2D2096FEF87D1D357A5ECE376E318FBB39B |
6D2F85A94BDA7B4936A35A31F79B728CE1693824B9FED5FA36F54BFE0597D9FB |
D3BD9989A6DDC1AA5EE9D05DE9769A545A95CCB3325B6A72DBDDD8C5A82E9F14 |
5091AE4AD66D65A05C4D2CBB2F6EECA5B94FF46D4F5FB517D1DFE8D62C74D82D |
2DF46BD834ABEF2FC45AC49A18D63C41A66A5A96857DADE9936951BE8FA169C8 |
3507D7F56B0D3E7D226D72DE5D37599355D37C4B656917876E277D3B55BDA9A8 |
68D7D6F00D4A7B1B77D2F4C6D4AE741BEB3B7BC886B70DBDBE91A0DEDC69D79E |
2061ACEB17734D6EB2CDA5DB5C7D9ADE7BCBDD4BFB174B77BB5B4CED47C51ADE |
B2B676DE20B4D4F516B5D21B4A4BAD535EB9D4D63BAD43569BC51A8D9F87F4B9 |
BFD1E2B6BCBED47535BD8AF26D42C84FA8F8A35C37B6D7D7CF2DA29CDC2DED63 |
79A97EEDBA529A778A5CCDD2A6BD973BF6893BA84A1BCE2A4D49A4BECEDD6CED |
E7B37ADB4F34DE8AFB1A96B161736973A1696967608575ABCBCB7BBD4E43A6E9 |
B6A60B7BCB9FF847EC75577B7F274FB6F09D8D8258593DEEBDAADD1D4B49D475 |
6BBB3D5068F6D91E26BF8F55D5ED24B0F10DC6BA963A4F86B49176F73A9C1158 |
ACA62BCFEC282E628AE6E2DACED2E6E750D1E2FB34ADA55C48A6F596C6682C23 |
BBD759757B8D3F51925D6F5A9B4FD4AEFECF713CDAF69EA9E2CD62C74ABBF156 |
8ED74FA94F6763A9EA169A92C32CEE659AF62FB6E9973716FAC6A1AD787F46D6 |
F3B54D461D5B4F17FA5B79D7576D0EA97692599B65D45668E1B6D72C34BF0C5A |
29D2ACAC747B91750C91C9ADA47A945A8697FD8FA2DBDC457D7967C9567CCAA2 |
728DECA6E11A4D49C69F3A50A56A8E2DC65520A5269A94A7C91E453A2E7496DB |
F6BB7E9ABD3C9F9F7BBBDB99BB96394CD736D0DD6A3259787BEDD7F6A744B6D4 |
458DC5C5B699E1FD422D6DA6BAD43FB26C6D66BCBE7B5F101B89B5E92EC6830C |
F6FA16A434DBFD2331743D6EE6C353D5F4DB5D4AE74CD2F52B58F5882DF4DD4A |
2D2AC350D78EA634BD2669EC64B8B4B6D4B52D2F4BD5A55D325BBB6BD361A7EA |
915B35D7F65EA7F63E8E2B9BFD2EDF41F18E91A80D175C8750BDBFF0C5D6916F |
AB1D5BFE126D2B59D2F5FB6B9B5F104FF65874DD4344875B8A6B59BC37A8971A |
B69565A7DC78722BCBFBAD6353CF1A5AEA773AA5D787A0B5D2AEE2BAB086C34E |
B7BA9EEB556BAD6EF23D2E0F0F691A340D7DAD5C7D9AD2FE379AFE7B7BABAB4B |
EB1B8D3EEB58BFD6B50D33EDBE455A7CF394A579A6A337CADC6569517539E9F2 |
F345D55084652A55BD9C3AAA718D58CD6A9BB5968FEFEB6D76B2BBB5D5DF9E9A |
E35FF85F58B5D5752D1AF116FEF3476D5F4D375A2CF6FACE9925C787AE2F23BD |
7B6D734D171A3EAFA55ADA69D7B79FDB567AA4DA545A1DBFF68C1A8CB6766B6A |
E89746CF52B1BD9214D125D32E74AD42EAD349BA9749D67CFB482D65FB7695AA |
4B65A94DA4DFDF911CE90C2D756FA5EB13CB7B6FA3D96976CB6765AF7363E5E9 |
DE1CF11E9D04DA6CB716926973413EBDA26A5A9EABAA6957CB24571A76916F65 |
0EABE17D2AE7C2B73A259595C6BB6D750F8AF5DD3BC4E7C3D7BA85A9D47C3DE1 |
DBD6761676B3E95A96AD0DFC9A4EADA868B2930C96F737173E1C06FA3D5E1D72 |
DBC3CB0DFBDE6AB7CF689696B36BBA1EA37F0026E1945E69BAD69D8C70EA5774 |
D4E2F9E2DD49EB4D52716E9D4A926A3387BF6E6E6B72C2705CB353A721F377B7 |
A75BA76B2DEFFE69DED67611A3BA81E782C34DB5B3B54D5442F0C8F25FDC4978 |
86C2C87F65A5E5DE8D736D6F3437F69A6DB47F6717F7BA8EAF76F2CC2EEDEDED |
F06DEFEE2CEF16FDACEF2E254B9782E747BBB9D554DC49792C53E9D657334179 |
69AB2C53DB5A4692DDE9B77697B770D8C56252CB7A6A175DCEBBA07866EE5BAB |
3F0DCBA10B6B1D56E55353FB6F89AEECFC4769347E1DFB39D0ED351D13C3F736 |
B71359E9D73E237BABAD27C2D2EA369ADEA7652693E17FECBD2B408792D4AC2E |
3497F3D1BCCBB58EF962BF2BAA2C31AEA5716D1441AEA7BD7B6B1B989EF35478 |
E596EA48F6AC735D03777093576D7A78851F69CB154E9DA73AD4E50929CBDDBB |
A74FD9C1DE118A5C9356A9053A75252E784884E37B5F7D934D69E7AF57F73D6D |
A31A63BD9CA9113195D615367A6B5BE5238D2DBFB2A596EF47922822995561B8 |
B3BDD4F3611A35F4B6DA7411595B41A84DA1E9BA86B77DA84D0EABA17844268D |
E22F11DBDCEBDA87F654573FF08D787AE3C410694BA84F637371AAEABE2D8B4A |
9B48F0D69924A907893C573C30B3C2CF23D6ACBA36BD62D6FE1B874CBFD3755B |
8B4D2A6B31AC4371A2C3A7DA6B5A77F6EE93A82DDEAF1476D09D7F45D62DAFA1 |
D66E66D1ADA5D2F59D1EF228AD2DCCDF66C686C0437620BD8E3B892492E52D0D |
A5BD95AE9F29496E34E826BF4104DA6192D6791DB0627BDB39EF6D2DCC5A9C97 |
1F64B299D2949C2CEB5EEBDA55BDA11AAEF1E5555455494E2E52BC29C610BD48 |
FBB4EA2714D3D1EDE5A5F4DEF6BDBE6F5D3AA3839832CD2AB45F676591C34189 |
0792C1883162567947967E4C4AED20DB8762D926F69BA3EA7ADEAD65A1E83A7D |
F6BBABEA77D0E9BA4E9BA3D95DEA1A86AD7D733082D2D34DD3EDE06BEBBB9BB9 |
5923B6B58ADCDCCCEE91AC3E61D9562F6D215B58EF4BDCCD25D6E6FB479CB730 |
CB32DCCF0C924C648AD6EA0FB6B4371716C26899956D997CCBA926B9FECD8753 |
B7B7B65D3A28A3097034FDF7F22DE7DA92E2EA4BDBD9239634FB2DB8B345B06B |
2804292DF4373E4FF69DBDEBDBEA114307892A4E2E4E4BDD4A13D1D9B8D47784 |
62D45C54A517CCAEB9528BB6BEEBD2FDBCFF000FF827AC786FE1FF00C2DD57E0 |
47C4DF88FAE7C6AB0F0DFC59F0978CBC03A0780FE0649E0FD6752D4BE267877C |
4B1EBB278BFC5D6BE32B6B94D13C376BE03FECDD316EAC754B796EB589359B68 |
B4ECECB892DF82F036A7E14D3BC55E187F881A26A7E22F87D178AFC39A978DB4 |
3F0EDF69BA0F8AB59F0CE9D7C7FB6B48F0F78AEFB48D69BC3D7FA9693737F6D0 |
5C9B1BCD3D6F9AC2FAFF004DBE6D36CC43CDC161777715CCD696F3DD2D940F77 |
7E2DADEE26FB05924B6B6FF6EBC78E268ADED1AE6F20B659E49028B89238A4D8 |
D341E6D4A4E7CAE94E14A30E48C6F7BCE1564A4DB9494EE9A926A3386B0D1C6C |
937145B7D5EBF2B2ED756FBF73D07E2ADFFC35D53E2378D352F83DA07897C2BF |
0CB50F136BB79E08F0D78BF56B5D77C45A07862E755BC9B42D2354D62D22862D |
46EB4FD25ECADA7BA6124B24D1C864B9BB6CDD4DC03840EE236668C330467508 |
EC993B59D15E45462B82CA2470A7203B01B8B68A89CF9E52972C62E52E6B423C |
B18DFA462B44BCADA74B21AD3FE085145150038B0D8ABB14306763202FBD8304 |
01181631ED42ACCA5515C991F7B3A88C2368AD21A46A5269B7FAD41677371A2E |
99A969DA45F6B10DBCE74DB6D4B588356BBD22CE7B9789160B9D52D341D6AEAC |
2DE7114F7306957F224445A4FE5B49BD95ECB65BD926DBB2E8926E4FA6ED815A |
EAD27B37892711666B6B6BB89A0B8B7BA89E0BB81278889AD659A1F3503F9375 |
6E5C5C58DE4771617B15BDF5ADCDBC41BDBC6B38F4E6BBB96D3E2B99AF62B133 |
CA6CE2BCB88A082E2EE3B52FE425CCF05ADB4334EA825962B782377648A30B2B |
5ECF76F611EA5777D756961147650234EF33D9E9A2E66B97B4B05B8768EDE213 |
5CDD5C470204805CDC4D294DD2C8CD469BB2BB836A2F4B37EF5AC9B52B6966F6 |
EF6D8028A28A902CDAFDA3CC6FB3712AC724C1C6C59235B45FB63CB148D86864 |
8D6DCB87859262A1A252C246479EC27B78EE6037B1BBDA20D970B6B3FF0067DE |
4B69E6196EADEDEF63B4BD48AEEF6033D843757B63A8DBC2B72BE7DB49042AB1 |
D6B7BAB9B391A5B4B89ED65782EAD5E5B79A48246B6BEB69ACAF6DD9E2656682 |
F2CEE27B4BA84931DC5B4F3412ABC523A34F713C1716F14921BE97556B9BA379 |
757172935BCB67E458A69F1C51343F694B98644BFF00B54D2DD4D14D049631C1 |
05B35B4CF73A4649453527CF177E5767071BC744B7E652D5AB59AD538B8FBC7F |
5FD7F5FF0002E3DD451DD79FFEBE2590C970D69A85DC0D737B29BD96DAF60378 |
86F124B1F3846B2C904C0490666918DE132BAEC66789A3D49AE0C30A1D3AF645 |
9EC156D34EB56655862921E19EE636B5B4686E0335E5BCE664F32E125142DE45 |
F3A773062DDE3956710C11DC7D961999635922FB589CA7932C912A399A29DF22 |
15BC8649BCE16ADACECAE5D62125DA4932D97D9827D827679243F65BA89E292F |
6D0A335F321B55DFE6AD9833CF17947CF5E88CA751724545B954E6493F676B5F |
E17749C64AC93A89CE357DE8494E7539D6DADDE8BD7E7FF0DA7DCAC4A6CBCB55 |
816D2479A196490C2D716EF07EEBED2D6F2FF69A5C445ADEE02436B2585C2CF7 |
56F04D6F2B4935F2326A59DCAC7611DB0B3F32682F44125D417F34B38B809A94 |
BA7A5846B6D796D14933CF7515A4F6AB72826592E1BECB34B6B7D1A4CDA7410E |
90F62F0CF143A35C5C6A65ACEDAE6EDEEA4D76FE058AE62B8D2DEDF4D99AD974 |
D58B7DEEB304366E97B15E8BAD424F0FDAD8B6D3AE6CA2B19676D3E649A6B97D |
36F6DAF20D4AE603672EA696BE558C5771CB13DE6A3A7DEFF65DADC9B55BC766 |
B9BBB1BC82EB4A98745253F6A9D3E5BB8252F674E9CA14E3254EDCAE5ED2D7A8 |
DC6555CA317EF7BF18D47349EDAF7EAF7D5EF6B74E9D3B5D1D04578E345D374D |
D36EF4D1796BADC37B02EAB3E837BA8A09EC574D9AC6D757B48DF513A4147523 |
4B4B982179227BA8AC96F85B93E8D676A229F4494CF6DAA6A125B3DFC56BA568 |
F75ACCD69ACC77BAB5869DA35C695AA59C115EDEEA2B67637B341A61D7AC1748 |
F10DADA2DCEABAB43AA6896FC1DB685696D63A36BD63E27D0E7D4757BFD62C6F |
BC2D63A4788DB5CD02D74B87C377BA0EBDAE4F63A7699E1A1A1F8C175ED46CF4 |
486C35B7D41A5F066B775E30F0A787E39FC357FAEF416CCF717525ADAA5B9BA9 |
44F7416DC497325CC5A77DA5B5293624506F92C74CD3CC978E92CE74D4476BB4 |
16B6D1BDCFD0E05B49B95E2EF08461CF09425C91F7256837155649D38C95E166 |
9416B077E79EB6EB6D5BB3BEBD2EF5B6EFAF7EA6EDC5F68A6DB4AB2D73C66D63 |
71A669CB6D02C1E1EB1D56096DEF2F2F35A90C4D77E22F065D590B5BED56F74D |
7B29ADF5CFDF58CB790788AFAD6F20B6B1A9F68F05FF00D1419BFF00089D27FF |
009EA576CBF0EF56D7B66A57DE30F07784649ACB461069FA9F8A6C05FDDD8268 |
5A5AE9DAA5CC37767ADDD5A1BBB1FB3A456935DC4B6F6F0C296B6161622D6D63 |
7FFC2A3B9FFA2B5E00FF00C2A349FF00E66EBB9D1AEDBB529C95DA8B73A89B8A |
D23BE3693D92DE09BEB7F89C5D796CBA2EDFE07F99F1C55EB7D2F53BAB2BFD4A |
D74EBEB9D3B4AFB2FF006A5FDBDA5C4D65A6FDBA56B7B1FB7DD471B4167F6C9D |
5A1B5FB4491FDA25568E1DEE0AD51A9ED618EE2E6DE096EA0B18A79E1865BDBA |
5B97B6B38E49151EEAE12CADEF2F1A0B75632CCB69697572D1A3082DE794A44D |
F9EC6D7D5377BA5EF28EAD3516DB4D594ACE4B4BA4D7346FCCBB42E2EAE6F245 |
96EEE27BA9520B5B5496E26927916DAC6DA1B2B2B7579599960B3B3B782D2D61 |
04476F6D043044A914688AC8FCC3E6246FB03C6DE6032AC4B2471E2728C59955 |
FE6895E38892D24CB1AC6AD2F960BED6D6E6FAE6DECACADE7BCBCBC9E1B5B4B4 |
B5864B8B9BAB9B8916282DEDE0895E59E79E5748A186246924919511599803D2 |
7F6524316BA9637F633A1FB1476A6FDFC251CB75A2DC595EF8956EC3CDAFDF4F |
A4EBB1C1A3585B5C69DA1B6A1770DEDF5D784EFF0054B6D46EEDF46D7EE31949 |
F35A4EEDA6D6EDF2CA4D6AF56D277DDEBB36D26197A3D8B5FCD75123C61E2B19 |
EE4A1B2BFBFB86B681A27D4E7B4B7B2B6B88C49A6E922FF57BA9EFDAD6CEDB4C |
D3EFEE12EA3BF8EC524D2D074E1A9473AFD8EFB528E08AEC3E9BA76A3629AA49 |
31D1F5AD57FB42C6C6E2C2F6E7EC162344B59F5DBCB58243058DBB59CB73049A |
BD918286A1A7595B49247677D3DD6C79AE44925B597923479ADAC6E745B99E6D |
2756D6A3B7D56F7ED6F6BAA68EEC5741BF486C6E751B8BA7BC8B4EF4BF0CE95E |
204F095A4379A4DA5D681AE6A9A95E58C5ACDA5D69F341FD991E89737BAD689A |
BDFCB61A65CDADEC569FD9F79A6D8CDA9BEAF75A65AD85E69535F2F87AEEC7B7 |
054255AB469723F714E53715ED3995E09466BDF49737BAE71A751FD974E7CAD2 |
993E557F976FF2D7E6BD5185736124B6F692E9AF168DA6A4D6D757DA9ADDDFB5 |
A5BEA7A958A3F951DEFD974CB2B69B53B74BFB9D23409605BEB3D26C9D1F51BC |
06EEF27E9F48834D5FED5B5D51A4B6D520B1B9D5F499ED21BAB69752D57549D3 |
54D3A0FB1CA2D7ED9A7EA3A449657A9F6AD5ECAC2F74BCEA5637FAB0D1E3B0D4 |
751EC6E6E35785EE346D374A8134582C759B3BE7D2B46B3F11595CEB9A55D5B6 |
B734D772D845A3AEA7A35DE9169AB5FE93A9E9BE21D4347D2AF3C4AFA82C3A86 |
B06D59637105A4319B49186AF7779777777AA69971F60B7B9D3B5AD2EE6D6EEC |
9F46D3EDDB4AB5D2A45B68ADF478B4F4D1ED6CEC4DFE96CFA85BDCDBDA43F454 |
70EE159BE5514DA84B9D349C528412A74B9928CEFCB253E5BA74E779723A6A58 |
C9DD77DDA6BCAEF57DBA5AFD575B9B361ABDCE91AE36AD61AEF8BB4BB896EE0B |
E7D6AD356D52F7C496E34ED42D75083508F50B29F4969FC416B7905A6AB0DC5A |
3E93737DAD5A45A8C06DAE6059ADA8E8961A66A11EAF0EA9770E8B752E9D6D79 |
A5DACBA2DCBCFAA585FDCDA6B03509A2B96B0D31ED25F0C4FADDE69F6B7DAEE9 |
92F88754BBD3A2D3257BC9EFF49492E6D12C08D2A2FB035A69F7325CD9DC6962 |
D96DAED2FED6DE4F3D66B7486EE4B668D95974CD563827D32FBED7E769B63A83 |
5D6EB3A96E8E6863B4B49A1D1678E4D474E9AFE1823D4E46B868ED6E606B982D |
231A9D8D9DCD84F6705F0B88A092E2DAEA78B49D2EE2EEFADA3F41C36BA8A4AF |
1945466DB52F8FDF8CA0E369733552D66DA724D49A32BEFD5BD6EDAE9B69AFDD |
F76C5CD6AFDE2B1B8D3756D435882E6CB48D1E3DBF6182DA3D3F5AB13A5E8BFD |
9DADACCC2EF5193C35E18B1B8B13A8EA16CD1E97AEDC5F4B6AF7DA6DD6B7A96A |
FC7ADF5DE9DA1C705C5FC3FDA2DA4DCC6AF195B01610DE6A89FDA9A46B335F81 |
278956EF4AD4EFF4B49E2D49AD9ECB50D374EBBD6EDBEC32699576E2DD648DFE |
CDA6EAF7FE4C29A9EA0C92473DB5BC96BA8D85B5BCB1B95B28F4CB5324FA6AA5 |
BDD5CDC2DC5F8BC945CFFA641A7C7B1A5EB3A6DADFCD73AB6E8FC3BA6DE5D5ED |
8E9FA9EAA164B5BAB994C360D64ADA54D69A94970345B4D3F5DB8D4FC1FA9F87 |
9CEABA69D426D32DA5D1F50B4CEA24E52E6A8E97EEE54F9DB9A51849B739C9DE |
14EF08460D497BD1D9DBDC945ABF6BF5EFAF44B796F7BF47BF74F10DC68BAAC7 |
75A75C432451D943657125F3E951DC6B2D35F89EDEFF006DA58EA16373169B0E |
8B7B7AB65A46A9A8EA77FA86A5A5DB5ED9C5E061E25D5228B2C053622316ED63 |
BF553A5DC6A10D858595DE9F26A16739B3B38B555D2E09AEAC2ED3C3B245A147 |
72EE4AC7793D8F93771DE22EF6B7E55C4769058D9D958E8D3C57B6F61A33EA77 |
9332C260B8D3EEE591A4B8B86B2D67546D1AC3FB48D869FA269D75A5E9D65A9E |
9FA0C113C17579CFF93796D6D124A9A6493A2ADBE9EB32B4844ED3452431EFB5 |
B1B75F26D05AA5D9FB35843948A3F33ECABA73EA1738CA324DF35A4D73B95451 |
7692E6E68DDAB59FB292853926E7249B718D4716AAE9EDA6DA755A5B6DF7577D |
3D523B4F0A7853E19F89ACAE6F354F11DF5AA78524D0E5F1158EA3AF269F0F8C |
EDF57D7ECAC6FB4EF09EA369A76A49A7C965A79B4D4354BE8747F1AF89AE3C5F |
A9E973C7E05B8F0659F8BBC57E15E25C4F63AFD8A78776697FD9F0C177713D94 |
8FA1DE6AF0C135AF89646BCF23518ED2E25D1352D26E47876D6CA7FED1D5A5F0 |
FE8D7117875F557B8B89AF5C6A9AFEA7169CFAC6A5ADEAD2E9B6369A2DA5ADD6 |
A6F7F7BA35869D76DAB5868162CD75FD8FA6688935FEB57AF696B1E956D30D57 |
7FD9BFB46FEE24B9A66D25BB9EDD2F4341322BCB1CD6F791ACF27D83EC8B035D |
42B1AC37CAB7F3CF7F6CFF0065482DB6DB2CD6D03DDDC5A364E8C67156A4A351 |
D484E538D274DCA2A6FD9C2727CFC928C5D2E6836DA929A9DE329F33BDB77A59 |
E97BF4576B6DFDED52D53F4B7A3F867C21A5C51C6BACEBF15869D61A27C435BB |
9BC47A6F888687E19F896FE1ED4FC3DE1DD0B46D2B49D634FF0014788AEF4DB8 |
B4F05D8EB3AF0F0CDC5AF87F5B965BEF1368DADF8234749FC5F8D6567241E13B |
B86EE62934B796961268D7E25D22EEC2C2EB4AD4755D1B58D1B4A8348B6927B8 |
B3BDD56F64B0F1843E2AD4443A24963E129F4ED43C31A96EBBDCF0D6AFE17F0A |
7827C66B343E2F93E236B9A268F63E05F17E9DE36BCD134FF01DB2EB90EA1E36 |
B5F1469767A27DA35FD4F5FD2F46B15D0F5A4F158F0FF853CFBEF3F40F12EA3A |
968EDE0BE7DF518B56BDB1BBBDBBD4676BFB4B0BAD62FDAC34F9248AE196282E |
E4824B5BCB7B6D6A7BA11CBA9472C92C376EF31B6D6753D46F01F136B9D30A54 |
D4A29C5A9382E64A578B728A84B99294756A31BC6509FB96949C7952A72DBB36 |
BBDAFE5BE9A79BEDAAB2BDF5C2B7D39237C4D15A4B1A2DA49111008F65E5B9B8 |
5F322B6E6DEDD6DEDCDB5BD9C91EEBB1044B15C5C4C2185EBD2BC6BF107C03F1 |
0358D7BC45E2FD01BC3DADDF693369D75E1DF84FE01F07F82FC0BA65D7867C0D |
E0EF0DF807C4074DB1D3EF6C625D5B51F0FEBBABFC47497C3F16A9E21D4668B5 |
FD375449B5EBBD474E9B4EF85FE2ED4A7D3ACF53D16FB438B54D73C61E17BA5D |
5347D6F53BDD2B55F01693A5EB3E3AB2D67C2DE17D2BC47E308CF85F4AD6AC6E |
7594B7F0DDE18E27BB1124FF00D9DA90B4F2BB2B5B2125D5D8FB219604D4EFAF |
AE44FA7C7059CB676CD73776CD22AD935CDDC70FDA56C84B6F36A770649ACE22 |
6E6FE3B5B97520E318D3A7ECE31936E6EA2937CB695EE94A13FB77BB926D735E |
51D649277BB776D59595ADFAAE9F7DB7D8C2B7B5B3BDBD921BD9B54974A96D1E |
F5752D312EEF12EF50D3EDB51B16B3910EDF2E0BE5DBA7CF2457B35D369F6F0D |
CACBAADECEB0DC5EF11F84A5B19EE249E286EB55D4D343BC82DF4FBDD335FB73 |
A1788BC390789ACEF24D585ECB69A3EA12E9D71A1A45606DEE6E746FED4D46D6 |
F1E1D46CADB498B9EBDD5750D4F5517B0092EE2B59234D3A4B6B382DB7B59E99 |
7935BDBC2B6115BDA8496D56D535A8A795B5CD54C7F68BADF7F24D0C1EB3E07F |
0B6A3ACEA33268FE1DD7BC7365E16F0F9F1DEB7A57847459B4FBFB7F0DF81A3B |
1F15F8E7559E1D7B47D4B4BD3ACBC3FA1A6B9AD6B3AE4DE14D7342D262D1EE6F |
F5CD3756F06586B5ADE97E6D2547131AD0F67CD18D49BF68A31536D4656705FB |
C6D294EA72B8BAAE119C675253E752357CD1B3D76DBB6D7BEDD16B7B27B2B1E3 |
97D134972B6716A3F639638C35A417E249EECCAB74F716D259FD9ACDBFB1BCFB |
3F23C9B0B58ACAF0CB0DBD935838786793A6F029F84CBE1CF8B927C50B1F1D4B |
E28D43C09A75B7C15D43C39369F2E99A57C549BC6DE09D42F355F89305F4D697 |
973E06BEF8670FC44B5B55D1C4DADC7E2DD43C25A8C106AFA5697AFDBCFD8FC4 |
6F04DD7847C57E3AD03558AD3C35E26D1BC61E2CF016A5E10975CD1FC5FA969F |
2E8BA96A5E1F9EDA6F1AF8634E5F05F8974CD1F50B7B5B61E32F0D6AC6CBC5B3 |
ECBDD1F485D2AFB42B78FC99AD922B4B9B43710DDA69F686626CED84D35CE9EF |
797262C8BBBA78ED6606F27B95D42DB4BB8FB1D8CB1DCC37D3C37291DC71E230 |
F28D4F68E119251AB28C6A2BC651E4FDDA9D29D5BA9C69CA7524A2A938CA29B8 |
49B84E75177564DEB6DBA3EBAA567AD975F55D390323B89E57955E5998093CD5 |
32CF2798E667996578DC230923512C9E6C73BF9BB17CC89E70036F2813970B1B |
5B3049A39648E29D5CB98F6ADBCAE93C8C8C0895628DCC38CCA10735B096772C |
D1DBCEF72FE6D94572C218CEF9ACAE21B0166914EEA0DE793288A34B09DA0B63 |
71682CEC6E7ED9751810DF358091EE749B39E1B17820B5CEA52C37127DBDADA3 |
3A8CD671AA462383CD32FD96094EA336996D716AB71A84F7C6DEF5BC79526939 |
4EFA371B3BA9B76936ED69A6A2DC79FDE8EE93B39F3AD2FF00E7FD7AF431EA75 |
9A35B69A036B03CB24F6F325EB35C8B9B78E08EE925B58512E16CDA0BC6B88A5 |
B869ED27B9592C6D45A5C5AC4F7B15E4D3C11A3C4EC76452C92ACFF678DA586D |
A48EE1D64B7B695E768EF7CAB736F3AB2DD1565B8891E6CE656A8E8E842BAB23 |
154701D4A929222C91B00403B5E365746E8C8CACA4A906B171941EB6EDD1FC51 |
BAF4767A5D269DF6945D98DA2A75B5B97B69AF52DE76B3B79EDED67BB58646B6 |
82E6F23BA96D2DE69C298A39EEA2B1BD96DE17759278ECEE9E2565B794A49756 |
F6F04764D05F417AF7369F68BA8A18AEE36D3AE0DCDCC3F61B86BAB781269C41 |
0C176D2D9B5C5A797771C4B70D3C53C71AE5766F4492BEAD26D5F97DD4DA72D7 |
7E54ED66DE89B40FD3C59FDA4B5F4D2C10C76D7D344F15B45785EFA1B1B8974C |
8248267489ADAEB524B4B6BC91F7882D669A710CE6310494DD42BBAABAC8AACC |
A2440E11C024075122A481587CCA1D11F046E556C80DA9EEAD6E6C6E6E2CAF6D |
E7B3BCB39E6B5BBB4BA864B7B9B5B9B791A29EDEE2095525827825478A686545 |
92391591D559480EFEEDB955949BE6D6FEF25EEBD796DEEDD697DF56B441054C |
ED1B410801BCF46995FE48963301D8F09DC8A25926F35EE448F316C442DE346D |
A9B561A29276BF9AB7E29FE801451452027B5B892CEE6DEEE2581E5B59E1B889 |
2EAD6DAFAD9A482459516E2CAF61B8B3BC8199409AD6EE09EDAE232D14F0C913 |
BA3415AAD77AB6A3A743633EA73CFA6787A0B8B8B0D3AF75555B6B08F51BFB54 |
BC5D1B4FBBBA5569EF2F2E21B9BCB5D2A07B99638E7D46E2136D657573041A6D |
84BAA5EC3A7DBB7FA55D7991D9C22DEF6EA5BDBDF2A46B2D36D6DF4FB5BDBA9A |
FB54BA5874EB08D60F29AF6EADFED535ADAF9D750D59B718C799A95B96EB97DE |
9594ADAB56E64E2A575CCA29B517EEA064571790C0C209268601344D23C3BA30 |
67FF00596E25963DACEC86DDA5B5491CF94E934B02A334AC6DC62E12D4EA8971 |
14572D737445CFF6A4635277845924D1A594537DBA1130D504C6F2EE3106A0B0 |
5DC76339934DD4E33AB0787350BCB2D156DEC33FDA7F689EDB518B4CF13CD2DE |
5EDF4BAA69FA27864F97633D8DDDF6A77DE16D4E1F0FFF0063DACD15C5EDF5E5 |
BEA9AB8FECCBE83C3D89334F6D6F2D941A9ADCE9F3B6957B730DACF7515AC97C |
2C677804D677715A493DE68E2FF52D364BB5B696DE09E5BD5B1BC9ECAF61B9BC |
D7DF828B9395B97F76F9AF67CBCF1714F54A37D5C6DCB2BB52FB2C3A7B4B08AE |
174D9B549F5A885F0B6B5D2648F4C8945DE857326B7A2DC5D5BCF3EBD6165BF4 |
D9748916CB4BDF0AEBBA8BEA9A7DCEA1025B9BA9ADCF6FA9DD7DB2085216D274 |
DB06B2315F5DD84A915CDAE9EC91B24AB6D8B5BFB75BB592E5D5842B710CD036 |
A3E424223ECAC432699A7B4DE1A090DA69FA25EEA6FA5DFDF1F0C789645D26DE |
6F0EB6BB1681140967E268ACBFB56DC7D8AF7FB604A358BD36569E238B52D635 |
8B16F657331B8BFD3B4FD4DACB41D435093C0DABDF8D4D752F0D69D15CE86FA4 |
47AA5EE9F746C6D67F0CAEBD16A706896874A12F8CF58B7D4F54BDD634AB83A7 |
DFFD053C2354A2A3CF29547CD53D9B94273E58BBAA8EBD3BB4DBB727C13718C1 |
F3293AF53172D7A24BBEAB7E9CAF4B77E9BFF7559D360B25B24D5ECF5730BDD6 |
A1A869571A74B6565AD49225BE8E9E46A6A97125D4B126A1025B580D4F509F4D |
FB25BDFD96BDE1E3ADEB36D756F656E0D72E74ED1AF74F1AC58AAC361A8E9B0F |
DB2C74E7D5A61AD5DDB5EDE68FA36A96DA2DCEA7A15E5EF9B35D49268B369379 |
3E9977E22D3D27B883C57AEE97E2086C748B6B868FC39A0C53C86E74FD25E4B7 |
9974CB7D53FB46C63D5236B6D3756B27B3D4AE60D4E459AFADB4E582CE7BDD4F |
503A4C6BAEDDDAD9CED72C1EDEE751B2B9374DA1C4AB6125B5CC305E38D3F50B |
18964B3D55D1A47D56DE697508EDEF2FE5B76967D39C4971A4695E6DBC3A6CBE |
D421370575184DA71694A4E0A4A579B51E68C397DA4613E6B27EF28CA092316D |
5FAD95BD5F6D7BD9BEBD2F7B9D5F827C27E0ED67445BDD6BE25784BC19235C32 |
D968FA86ABA1DCDEFD80C16F347733452788ACDEC15AE25B982DACFCB78BEC76 |
D6F75692B595D5B2A75DFF000AF7E1AFFD176F037FE05E81FF00CD6D78B89124 |
6731D8269C88563F2A3398EE1D234135FAE6EAEDC3EA13F9B79701DE1FF499A6 |
F2ED6D60F2A045ADE0F96115C949D95AEE3562F4F25560925B2B423A5B425DAE |
F47FF812FF0027F9B3E77A2AF69D1CB2DC48B0E9BFDAAE2C75491AD7CBBD93CA |
8A1D32EE6B8D4B6D84D6F38FEC68124D63CC91DACA2FB0F9BA94373A725D5BCB |
46BF38B689F76D75E96EB6B75E8EFDD2BABF71E97E1C962B0BBF110BFB3D1BC3 |
DA96A3A6E9BABF82F4CD73C2765ACE9B3EA9A9EB5A55BE9D691DFF008CB5016B |
A2787DBC29AE6BBA92EB9E249BC41A3DC5BD858CF75693EB2BA1F89B42C18AE7 |
556975382DFC62D247132594863D5354B34D6747D2B40D6F4A5BBB23AB2E9704 |
D6767E1B5BAD0F4ED27549B4ED5EEACF5DB7F0FE97A54C2F6FACEDE4F0D787AE |
FC4961AB59D9DDE956334571637514BAF3E89A1E937325AE9FAF5DC9A7FF00C2 |
6FAEDD58D8687AACF616D7F79A5E81797F656BE2F3A7DD5B5B4D75E23D33C39A |
46A97F4DD4345D37C49E208FC3979AAB7862FB4AD57ECABAF5978523D46EA3D2 |
A08FC55A169FACDAEAD36A1A05DC1178A742D1535182D9FED3E22B0B59ACAC34 |
E177AB2686DD89B71A37BC29B9C946D3D5CA6EA2F76119C229A692A92518B841 |
D2BC249C7DAAEBE7FA7DDEB6F3BFCB464D3B499B4BF16EA714B73E2F874CD33C |
3F73A5F882E2CBC5AE345B59DEEBC29A6F84BC44224B2D3B48D620D3AEF4FD6A |
C2EFFB4F54F0D5B5D7832D7C37A5DD6B965AA5C5B8D4B0D7FC63A2D81D497C47 |
E14BA9B5986DEFA7D1B50BCD13C4373369DA5E8D6E6DAFD9B5BB6D6BC2561A9E |
9DA7D9368DA778766BC8FC63A69D45B4DB2F0BC5637D6519E3346D3EE752D260 |
6D3FC35AAF896E74BF125949770DAE8D249A4C76DABB59D8D9697AAEA7A32278 |
82F67F12EA504561A658FF0069E911E96D6B7634437DA9F896EA5D262D7B55F1 |
278C278B59D6F5CBCF12DDD8E816C2F2EE71A95DC9A1E9DA7DD1D1EC6D35299E |
C96189AE6E64B294DE4325CDADE6A1AFDBCFA8EA0DAE5FEA4B1EB1C44A9C54E9 |
FB4A35250BC7D8C9D38CDFB4AAEA559546DCA4E9C67ECA094AADA2A6EA3A7CAE |
02B27BD9FAABF45FF0FF00A1EBB6DAA590B3F0EDE4A8F617777A26A36B70FA47 |
88D49D42F6E2F754B27B8B8FB0CD7F0D8DA166B3D2AE74AB8D8DA9698AB6EF25 |
B9F12EE92B5BDDDFC76325B69B71F67B2D42E525D4A296C56D2F2EA18AFDAEC5 |
B79CF6D14F05A89CB5C4D6925B3C7A94D6F63753BADEDAD9EA707945AF882E05 |
CA3DF0B331DF59E9DA6DDCF1DB59973A6D9EA36D34E25823825586E2F16C81D4 |
EE2DA1B4D57562D35CDFDD5D8D6359FED8EF7C317525D4CB0EA1692D859472BD |
BC97968977327956F78CB37D834BBE6B68E336F1CEEB1C13DED9199A24B44F2A |
1B59174FFA0C1E610C54A10D549C396E94A356E9412954708A8C54D24DB95A9B |
72F66A5277E7C270714DEE93BDB4E5EBA24F5D35F3EB6EDD9585B6ADAC5CE9DA |
0E996FA8EA9777BA8A5B691A35845737D7377AB6AB25AD9C76FA769D6EB2CB71 |
A8EA52C56568915B42F73792476B02AC8C9128A73C13DACF35B5CC32DBDCDBCB |
241716F3C6F14F04F1398E58668A40B2452C522B2491BAABA3A95600822B623B |
3B6BBF0EEB1ABDC6B7A2584FE19FEC944D26F1ECF4BBED5349D4EFAFA0BCD4AC |
EEA6FB2C1ABDD691AADD6916B71A689EF3C452E9FABADFD959CBE1DF0C6B575A |
3E157AD757B5EEEC9DAEAE93BA575BEE9A5E8CC0B1ACEA37BAF6BF7FAFEA31C3 |
2EA7A9DE6A1A85FDDC16F67A65AB4FAC5D497D7FF63D2F4C82DEC2D54DE45032 |
D95B5958D85A4122C760238A236A22D1E5B18E6B7D1751874CB1D11E37B892EF |
56B4F3E71268305D5D697A668BAB5B787FC517BA36AFAF4F041A369B7920D3EC |
9EF756D386B571FD9F16A4F61523977471DCB0B9459E3B6C5B490FEF20695BFE |
5A471A34A9266554B9DEED0C0B0EF3E52ACD2364A5BD9CB7AD0493DEC92CF6FF |
00DA302CB777D14D0ACB732895A28C5D46D63E52CB0DAC6A2D2CE61034D6FE75 |
D07BD8E1E79B778B838F34E57BCF915D371D1FB92935351515B3D93774916BAD |
EFA76BF9DF5BDAEAFAF4DEC5C9EF4DCBB4F14CB1DDFF0067E924DBFDBAE3564B |
9B6D3B47B3D212FE26B896F757BB84DBDBDBAAC51C96714D716315B5843A759C |
A11997979327DAE28448922476E96EEF6CD1C52DD4FE7B0822BC989B5324AA91 |
411492446DADAEE6812537924BF625D6D13C29E27D546A92F87346B8D6B4BF03 |
F84EE35EF145F4503791E17F0E9D4FC39E1CD3758F116A31C33C7A5E9DA978A3 |
53D27C376B7B73F60B2BFF00106BBA1E836AB77AF5FE8F61A870B6674A8E59E5 |
69D6E64B9B4B53279A2CEC6D7FB313534D3CACB3C24DB3358F922DEE21B592DF |
4DD56048238EDAE4BB4C709D49C2D0F8399D4E69397245254DCA52A76BF3BF69 |
562BF771B45C5F32552D095D93D77DBCDBBBD2FD5691EBBDFB6A5FBDBB7855C4 |
70C7A74D6F722E5A69AE2C2E6D05EC9359DAC88213335CC165709A899AF2EE38 |
B4EB98629C5D344D35EC914B623BD874E8ECD1A18E28EE247B3B6799E78EE92C |
2CD9E489EE629B4FB7B98EDECED8DC86695644B73F6779EE9E3BBB8BF86396DE |
D27819EFD7CF9A1B70975710DCEA56B653DFC508B3BE7B86B4863B58E355996D |
E6BC2B23ADB0BC8268E3874E9E34C48E2D3AD1AFE08A67DD69A787B0B6B802E3 |
4BD6AF1DAD584DF68B77B0B7B236FA2CD14BA8DCAC174B79048F657B1C5633DF |
EBCBCF52A55A3539D4A9F2CD250E695E70B3729274D538D3529C2328DA0F9E4E |
0B965525ECE9CA924D59A775BF67F3BDEC9BBEBA2F2D5AF4DD1FC51E158B44F1 |
5695A8786E4D73C43E22D3346D3B43BA9359823B2F095BC9E20D3B55D535B9F4 |
8B1D0B5B6D6EFB52D2B4BFEC3B17FF00848744D2F4CD335ED4A7D4E3D427BDD2 |
CD8E5C46DE5CF93379BF67B9983ECB979365C1DFE6C336256CF97E71C5B4B948 |
3F75B224F2A1D9C2DD6AFA335C2CA9A65BE8B6B0C3A443A8E891CF7578975A94 |
3A1C69AADF3E9F24FF00608E3BFD46D1DE1B3D9E76957F7101BC9E18ECFECB71 |
B1E21F11F837C3BE3BF12DA7802C75CD43C009A95C59E932F8CEDAD749F145F4 |
10588D31FC417BA1F8735ED5742F0D5FDF5FC7378860F0AD8F883C5563E1FF00 |
3AD7C3173E2EF195A699FDBBA9259953838BAD3A5283AAE94A7153E7A6973B84 |
9C3D9A925CD0F7EEA1EFA93841A4EC9D3D2D1BDED75AE8F6BEB7B6CF4F2DD9F5 |
8EA7F15BC6BA768BE3EF13E8BFB47F8F746D4AE7E11DFF0086BC776EFF0012FE |
2809BE36C5AD78AFC2DE18D57E180822B1B09EF747D47C2DE255F106B961E358 |
0780F59F0EF8367D212EAF7C4FE198E0D73E593E20B24B1B7D69ED0DC5ACC975 |
04705C5DDCD9C9E6EF2A2458ED2EA18659ED56DA7BEB549EEC453CD6B0E9F343 |
776FA8DD5A49EB9E3AF04F8F97C33AC7C484F8637BE1EF01EABE26D374FF000F |
EA72E9D7D6BA1E937B79A7C3E26D2BC17A3EB3A9CBF66D6F5983C1BADF84FC46 |
B05E5AEB3E2E8FC3BA87847E22788A69340F158D7F56F53FD9AB4AFD9F7C431F |
C4FBAFDA1FC57F152C6CE0F01F867C0FE03F027C14F87FF0FF0058BFF8B9E2BF |
1159DE58E877171E31F887F18FC2917C3FBAF0DF88745F0CF8D7C47AE5BFC36F |
8ABE14F1668F0F8AF40F116ABE07F13EBFE00B4D5FB2BD4AAEAB8C1B8C674D46 |
2A343DADAB4AA4A2AA2E6A8D4D4630FDE4231946167393E7B5394C52B26F74FB |
DAEACB4D12B3D746F7DB6D4F9B6F3C536D3E8BA4E8371A51BCF0AF862D3C5EB6 |
1A7E9FA86BD1C32F8CBC65A4C31D878CA510789479DA869D21F04AE93A669165 |
A7685723C0DA05AEA764D693EBB3EB557C19E20F12F873C4896FE19F15691A66 |
B1E2786EFC040BA784B4A821B0D7653A749A1EADA86BC351D234CF09EA88C6D3 |
59BAD65E1B5B2B2741AACD05849AAA8EBBC5963A3F807C4FE21F04F82677D4F5 |
CF0F6A234BD73E245EEABA86B9A4F89352F0EF8D75E697C51F0C34DD5BC19E13 |
F127803C37AAE9D63E0EB4D024D76EA3F8A3776FE15F10CDAEDD681E1DF895AC |
7C34F08F9D6A731BCBFBBBCD3E4B77F0E58E9D03469ABD9E81A4EAB7CA5EF1EE |
2F27D374ED4BC457B771C919D46C9B5E8D7518E5D2174DD2DE7B559746F2B8E7 |
CD197B4B4E9D4557D9FEEFDA7B91A4E71937CB3A5EE53846314A5192A6E7CD4D |
C9CA2A36AD6B5EEAD7D6DADEDEAEEDB6DEDB59D8F7EFDA37E277C3AF8B5F133C |
65AEFC20F02F88BE10F80BC45AA6BB7561E01D43E2B78DBE2245677EDE2AD675 |
58EEE2D77C61AEF8A3C41A6EBBE27D2ADFC13E2EF8A1A5EBBE21F1D8BDF8C5A7 |
F8B7C63E04D63C33F0FF005BB1F85FE12F996F348BEB1373A9DE456FFD9F7173 |
6305D4DBEE5F4CFED5D4249B516B5486689E2865BB9345572B7F7F6B6F776969 |
7605C5AA39FEC89AF667B07B78D75D82E9F5582CAEA3B6316A17E6CA5B7D4184 |
3676D34D632C65E6B336935A6A76F63AC457F32BC93CF6BA9C3716B6F93A735D |
D9DDC136A22C2FA19551EDDA24B3BD90DD6D92E4CD03DBA80DA9DC4965369A26 |
96E639EFAFFCB911F514B02130AD5294A50A7284FDA2972BA9784E14AFCD1846 |
B28CA4D45A9DE30FDD463CD182515CD76935D74EDADF4B3766FAAB6BBEDE8604 |
9AA3DC5DDACB7CE1D2DC592C434D8A0D360B4863B58E195AD2CACEDEC6DE3D49 |
4C70CD25DA2A0BBD4A09AF2FDB5192EE5B978264B628915BC2B3DC5DB24D035B |
79C1E169442BF6211BDCDCB4AB1CFF006AB758A5822BB7296D769773DBCE216E |
A52E8DB68F1DADB5E6A53584966F3CF6D6BFB9B7BF88FF006CC20EA768E6344B |
EB16BDD5134E992E75A5B3822D4AFE3B34B796E8CDCFF9CE641122427EC56976 |
922DA399A27B4695EF1ED222F34774CB1CB71716D7B75677923369BE7491B4D6 |
D14F35D78F569F2C63ED2A2A92A9152BB829C94A6A09C63539EA29C5479D2A92 |
775EC94A1A38B7AAD765649DBB7E1A797DFAEC52954279517DA5B648BE4E2F6D |
9D1ED6D9E75BA8264502E8C70CF1CAB73BAD1CCC4BDD46124864496F2FF89E48 |
9F5CBF86DF53B4D6ED74D68344B2D6B4F3AF7D8359D3F41B58345D3F56B18FC4 |
E90EBB6D69A95958417B6D63A859E9AF610CE9651691A35BDBC3A559D1934EBC |
B7D3ED753B8B49D6C7527BBB7D3AF32AB6F35CE9EF6BF6E8C1DAFE63DB477507 |
9B0E62913ED76D31631B2ACB44B0D8ABB14306763202FBD830401181631ED42A |
CCA5515C991F7B3A88C271CDB49C5C792EA9CD27CFCCA3CBEE5B99ED38CFDA27 |
6B3524E2D26A257CEFBFE7FA6DF98DAE90E92AF225B5D3695642C60F1259CB73 |
A76AFA4EA126A3A8E856D79AA89A7F3FC46B66D05E35C59691A7EA1A5C91586A |
D6D6F9F0ED9788F5D82EEDB50C992C255B28F5085BED56BFB98EF66B7B7BDF2B |
4BBDBA97525B3D36FEE26B586D56FAF6D74BB8D46D63B59EEA29ACB76D9BED56 |
BA85AD96B413585E5B6350B5834FD32D67D3AD44BA3B69CDAA5B5E5EC7A7C37F |
AABD8EA77075AF1241369FA16A372DA626AFA6687A4EBDA94525B5DE836DA92E |
99A9108AFB4AEDA4E2AFA349F34AEECF955A2D39292717A4B4E7E50CBB7B38AE |
6DA5649DFEDCB3C423B631451D9AD979737DAAEEF352B8BA823B475B86B1B7B2 |
80433ADDB4F73E75C5949059C3A9E8C52B4CD77AE5B8F0F69716917D05DD8E93 |
2C30DE2CF717B7E67B7D2ED34ED49357BCD66C6CE186E259E4F11497BA643616 |
82C753D464BFD534DB1D59F6DADDCC367E2C9449A524BE2782DB4ABEB15B192D |
2436D3EB965E2796EF47B6D32DADB45D3E0B3D43C3D61692DAB18238ADB51483 |
4CD3248926B8D33B2D32F62D762D1C5EFD85BC45E30F15DE785F50D5D2CACBC4 |
B7BA6F8626B2F0AD8416D63F0F7FB0AE3FB33FB33ED013C137FE11BCD2F5058A |
D357F0DE99690C365A735B6D4E30924A1371938FBDF6549BA8E1057E7F764A5E |
CAA3529469BDDB87B38BA8BF2FC7FAE9A7EBA728FA46B169F68F13786ECF5D6D |
13C3F7D676FF00F097E9D16AB26996FAC59FD857EDF6DADFF64E8EFA67DAF519 |
A0BFD22D6F6DECF55D3EDEFF004DB5B969AF57ED33CF0A490C97563A36BF3DEE |
9FE7AD86857275DB6F0AC76D79E2FB6B7B6D465D4F4AD56722382EB42B1BAF0F |
78BA5B4BC4D0ED2E56C85EF89F50D1534FFEDAECDAD7C11AC78435968BC51E2C |
1E255D43C352AD85EDCEABABF8434AF0C59359E9169ABF89752B5F09457F2EA1 |
E19B2F1358783B4CD3ED7478B4F56D2BC51A869BAE4716A3E11F08F88B075283 |
C3F1594D6FA4F89B16BA76871E9DAB5DD8ED48BC4D7B772C7AB69FA2E9BA5CBA |
4785B5ED66C535EB39F57D57C43E29B68A2D06C934FD1215D46EBC37E149BC6D |
A4A9461AC674DA94154F72AC6FCD2752F1845DA308A5184AA5E351D39423CB52 |
FA027EBD7A7A7F4B6F4D0CAD7ECDACBC37E0F559A09ADEF60D57538E4B3D4356 |
FB34B35CCF6B05D3CDA16B565672DAEAB6B2D9FF0062EA1AFE8BE7F85B5D8F47 |
B2D374DB8B8D5BC33E20BA9F8DAE93541A759581B1D1F5C9F52B6BAD564BAB88 |
F75FD8C73DB5AE9D64FA1DC6A1A1CD60B676BAAD8B6AFE20D3A79ADF5ED7A34B |
91A8DBD8B47A62DA6B3E25C256B616D323C33B5E34F6ED04EB711ADB476CB1DD |
0BB866B436AF2CF3CF2BD93DBDC25EDBC76B1DBDD452DADE35E452D8F2D5B39F |
D9568422F95A946F0A6A368CA1752BF2EFAEAECE72B3A927FD7F570B76B65918 |
DDC33CF1182E9512DEE23B5916E5EDA64B299A596D6F15A0B7BC6827BAB71124 |
9796D1CD6915D58CB3A5EDBFA4E8EA6DFC18352D12D3C353EB325CEAD6FAE2CD |
AA6B136A361A17852F3C31E25B3D635ED0750687C152691AF6ABAA5B7876CADF |
59975DB5F12EA5A158E93A7F8574CF105BA6A7E2AF36B5BAB9B1B9B7BDB2B89E |
CEF2CE786EAD2EED6692DEE6D6E6DE45960B8B79E2649609E09512586689D648 |
E45574656504777A5F842E75FD320F10CF2C3A77866C61BAB3F13F8BED74EF12 |
6B769A0F882EDF5BBAF0EDB78E56D21BF9F48B9F13CF05B69DA45FD85A1D32FB |
4F8A69EC62D575DD0BC576B05E1F9AF2504A52719475F671E58C9C539AAB34D4 |
1C56AE6F95538734F9E2B984FF002FEBFA453D1ADB55B98F4BFDE786ECAC627B |
39ACB52D434AF0FDD598D561B9F12CFA1E8DE20D48D85D47633EB77D16AB09B5 |
F18DC5A69F79A45B58DEEB5BBC33A3E9571677A0B4B7D213C31368EADAD78A46 |
BF79A5CBA4457DA3788204D774DBE9236974CD12D74FD5ECF57D375CB3D4BC2D |
1F87B536BBBCB5BFD6744F12C074ED5B4E6D39E1C6B76B793C1B7ED25858BCFA |
76BB6B6D6F79FD93A99BD3FF00091DAB5CCD2CFAF5ADDC3A747FD969E0D16BA4 |
68BAA5BDCFDA62F13789AFEC6133D935D58EAC7E2A8F49B9F0ECB1BC1E24B6D0 |
74AB49B4EF0FEA705CDFF8334BD5AFA4B4935EB57D17C4A7546D4A0D5ACE39DF |
5F6D3D3C36B1F8B2F6E2F7C3D70BA668BA45D6A5B539C20A9C9CB95A8C251A9C |
DCF28FEF61CDCB4DB4A2E9FB29A85937EF45B5CB255298F5FF002DBA7A7F5F81 |
E893F8B7C6B63F614F116822EF57B6974B824F1825F6A7AB78AB4ABE53E6DBE9 |
FACDF68FACBC3A7F89ACC695ACDD4DA678974DB9F1758D9DB2E9AD6F63069D65 |
71676BC410E976F27882C5A7B9B48AD7570F6567AFE9FA625FE9B0C4DA8595A4 |
DA85F235A6A5A5EA36B2011C969652C505EDEDC5E34B710CBA569691F86DCDCD |
CC1ADDD5F6A50691A8CD6DA9BADF5947258B68D765659525B4B45F0F5CDB5B0D |
21E38A4B7B69BC37716D6B696A6DCE8F77663EC12AEE5AEBBB52E9278248EFAD |
65D56FE49A6BD369A94F3CF2E916F0DA1B8764B568B4FB6B395E3D2D74A55B89 |
C4BF695BE8BFB3ACB49F5F0D9AA6AAD2AEEA49737EEDD6F8B9231945A92A5087 |
349D93F66AEE5C928DDCACDE52A7AA71D1F5B2EEF7D6FE97F9EC7A7B5CCEC2DA |
C52C34FB5B1B55BC985CDAC7FE997D79793C534D3EA12C85644603F7305B41E7 |
58EC85EEC47657F737F2EAB34D33CEE1DC44A562821021820B74D96F0476F193 |
1DBC7146D2B4712B4F3B299EEA7325CDCC92DCCB2CAF9DA3DD43AA59CF74B2C9 |
6E230648A2BE40B7373E64D6EC904296493C7115B6BAFB4C26F9AD44B636E65F |
3A69A6B5179DF5C41E25F0F6956DAFE9F733E91A0FC41D3F5AD39C787F54BD1A |
7DCD9586B717F6AF8375978EEA6769EC66B4D075BB9F0E6B17375789A4EA3E11 |
D7EF2278757D26EE7FA1A6D4E0A719394249496DA476492492B4568BABDEEEED |
9CD2BA767BADFF00CDF99C94F3CF753CD737334B7173712C93DC5C4F23CB3CF3 |
CAE649669A590B492CB2C8CCF248ECCEEEC5989249A8A8A2A847CEF57BEDF2BD |
BFD9EE97EDC90D8FD834D377717AFF00D8D11D4FFB5246D2E38EEA2822F36796 |
FD64B7B886E6C8FF006AEA374B6ABA8C90DF5BD1ADF7B57474D134FF001059EA |
10EA5A85B1296F7379A6688F756B79AAE976179A8CFE208744B6B664B69DAFAC |
AF6EE11059693AE49F6EBBD32EC6A96107E7514DDEDD9A6BDDBBBEC945B4E5AA |
5B26D3B34AE91E81563B5D263B9D520BDD56778AD60BE5D2EF747D31AFADB55B |
F82409641D354BBD02F34FD2AF943CAD7F2DA4FA8DA46620FA1C92BC91437EFB |
C4173ADC9245ABDDCE9611C023D2E058A4D6A4D16DB4CB6D50E81E1DD1EEF5CD |
465D5B4EF0DC1717E6CE5B48F589638AD99351B9B4D66FF4DB389E86A1A5C963 |
25E2113C2DA6CF65A7EA36BAA476DA5EAD6BAB4B6D336A1667467BE9EFDE0D3A |
FECAFECA4BD5882C6B1D93EA70E9379A9DB69C331D1E3778E4564911991D1D4A |
BA3A92ACAEAC032B2B02194804104119A6DCA178F2F2ABFBC9395A56725CADF3 |
3BC57BD1D1ABD9DDB6AE81B454932C6934A914BE744923AC536C68FCD8D58849 |
7CB6CB47E6280FB18965CED3C8A8EA1AB36B4D1B5A34D69D9ABA6BCD369F401C |
AEEA1D55995645092056203A075902B8070CA244470AD91BD15B1B9411E95E16 |
B8D21751BB581E6D36C65B3B48AC64D46E16F1A5BA459D5ADAE8E936310FB7EA |
FA9094E9305CD948FA7D9C8B0DD6A674EB59F5597CD5D1D085756462A8E03A95 |
2524459236008076BC6CAE8DD19195949520D496EC1278E432344226F377A48F |
14998BF78AB0CA914CD14CECA12194C6C91CAC8F26D8D59874E13112C2D7854E |
552E496D2D2DA4E366ED751F7DC9C55AF25177BC532651E64D6D73D6AF350B26 |
36881AD2FF0050B3992750ED60EC6CD121B89AF05C5D2D9431B4960F15EA3593 |
C4A2ED14234B6969765767C2D7D69E2EBEBBB18F50B0F0E5ADB69B7D7D71AEF8 |
8F50B2D2B4EB4165A7EA1A84911925375E65F5C4562D068D6505BDEDDEB1AB4B |
6DA459D9CD7F77656D79E5571636BB2CED61B99B519A0BBD4207B7B4F22E269E |
050B756F2D81B759CC569346D9984F3CDF65B992EE582D2678EED1EC89F4B6D3 |
668ADE0B482EA7692CE694C845979692FDA5AE2159AFC6B217CBB7B59E3335B5 |
CC46E2DFEC96F6627BC9D26F72398621569B97B2846316E54DCEEEACA3463CB4 |
F9E31935384A718D5929A72B479634F5BE7ECE2D2DF7D1F6BBDEDA68D2D2EACB |
ADCF47B9D5AC61B696437A96F38BE8AC204B9B72D6D2191EE629AEE5B88AE84F |
6C9693DA4F0C504D6490EA0F1DCB1D4B4E86D6296FA7B8486E6D2FA379A49609 |
E3B9864F202CAF12889ADA78A05862777911D253B1967985C178F0404852DF84 |
3E187863C61A568F07F6F6B4BE289E455B9B11A5092C8E82A5EEA5BEF0CC5602 |
E67BDBDD374EB4BAD52EECB535D3EE75A5BF682C2D06B717977BC5EABA5EA5A0 |
437D15E4E56F6DEE6479A278D74D9EDFFB3A1B2B3109D3FCFB0934E9629125D2 |
EEA4B09C5D082E52D5ED2E669E2FB0FA0EB62E349D6AF868FB09D2E65C9554F9 |
7DC93946A453D1BE68A504B9795394AA7328F3E7CB06D4632D53EAB7D57F95EF |
F85AF6D396F6358AE1ECAE350D3849686D3659ACAB6D71A7DA4AF3D94D3A585C |
C368FA5B6A105BDDD98D7E5FECB75B069A1820469AEE9F7377E0FB9D03ED3677 |
5656BAE68325869F776375AA5DB3EB5733EA5AEDF2F897C2EABE1FFECFD3744F |
0EE9F6FA5E9F71A2EA3A9EB3AA8D4EEE57D006A9A1EAD7767A36558788F5FF00 |
0B34D3E9336B1E1E7F1AE993E93A9585ADC5EC563E25D19753DB07DBA6B791EE |
B5FD0EEB50B6B69E592DFCDB5D4759F0F4FF00B8B8BAC5C5960DFDE681717BAC |
91A0DC586A52DCBD8693A658CF737DA5585AC3612E9B1C223D5351D57569B527 |
BC5B59D2E1B57BCB4B409750D9D9389EC1F4BE0AD8C697BAE8A9B7285455213F |
754E9BA94AA41B4E2A6D72B74A54E135251A7CB249CD68A3DEF6D1AB3DECECD3 |
F2F3BBD1DEFD0F4D9BE2178C755F06E99F0EA37D3A0D1F4DF11E9DE29D46E2EF |
C2FE1DBAF191D44687A4681A5D9EB3E3B8F48B5F1D5FF8720D26CE64D3BC22DE |
20BBF0B68B3BDE6A1068FA05F6BBE20B97E5F565D0960D575796FAC63D5125F0 |
FE99168D7567AB7DAAF2D7524D46EAEB5667834CBCD1922D361B4B6867B3F104 |
B6FABA5DBE9771A5E8BABDA437F369FCA6A779E4D94D15AB476F2C9F648EFE1B |
7B2F256DCDE5B4935D58ACD12410DAEC9ADD60B9B568A5BDB88E0852EB51B916 |
D359D9E65C2BC711BFB595A1370D1C8F249A99B8BE69A3912E25512C315A4323 |
23CFA75D4F1149EE6298C5224824B6D463B5C7118D9253859569C5294A751BA9 |
1A6A11AB4A1ECE9C7DC84E174E4E4E0E559CA4A0A368C5C609D9EDBE8B4BDDA6 |
EEF777B7FE03A5C6AC4A2EADBED49721CF9296FE4C135CB5EC22DBC8D3AE2D2D |
3508944F6E67B7432C534C8B3C33A5BDADB40913AA4BAE5DAEA3743EC5F6E1A3 |
DAFDAA0D0A3D53529AFA5D3F4A566D413464BAB88ECED4FD864BB9E4682CAD2D |
D64BDBD9DE3170D730BC915D5AB46ACA6292E6FAEAE4A486ECC916A70CD24CCF |
022E9C2E0CCF25D43B279AE644BB81CDD476F03A5C42F24FA97127FA05A28D43 |
4CBC921D54DDDAF862DE2D4A7863BDD56771A95DDBAC7BF4C2A23D0F46D26E21 |
FB42BDE5B4D64D676B751407523E672B70AB4DA8C358D593D14DEA97B3E6934B |
9926E4E1494E529F2465794656D3CF5EDE5EBFF05D97EBF467827F68AF1C7873 |
C0377F0F5EE3C1DADE950786FE2DE9767E12F177C3FF000C78C97C3F7DF1C74D |
F007857E26F8BFC0106B9E13F105B7877E2EEB7E15F871E03D30F8E6CA6D27C5 |
1A2683E15FEC6D3F5ED22CE1974C9FE714F10DCD97882DF5AB7BBBEB548F53B5 |
BC31691A89D3F5336D6B3C5776EC351F2752B782FBCB9192DE69A2D4469B7086 |
16B116D6F0D99F53F84DE398FC07A96BDAC58F84BC07E23F10DCF82F518FC177 |
BE2E87516B2F05EBB07887C3EF63E35D02CACC58E9DE26F13E9B6FA46BF6FA57 |
86BE24DB788FC2BAA5B6AA913E85E20F1AC7E1DB593CE6E4DBC977AF4DA9437E |
9148D3C72DD451A31BAB4B3D56DAD628B4F67FB35BC2D6F2AD825CB4A9A834C9 |
1C9892D2527CEF4EB4EA56A14B92BF24E9CB9DCD53708BE5A4DC6AD4AEA4DCEA |
CA297B494A318B8CE2DC54F929BCD2516FDDBA7E6BBECA3D9745AEDA5F56741A |
75AC9E2DD3754B7D0B41D1AD6C3477F145C5D6B5E21F17784BC2923E890687A9 |
F8E349D09AF3599FC3BA4DCF88E0D27C0BE2EFEC1D37464FED0F1D78A751D2FC |
2DA1F87F56F146A5E1BD035B5D6744BCD2BC6BE2AF07DFDAE8FF006FF0BDCEAD |
A55C496122F886D24BBD2269B4EF2B47BEBF7874F974BFB74CD77613D8C16B61 |
796F1DB98657B295676E375AD0AE7488ADE35F3353B2BCFF004BD3B58B58AF17 |
4C94C56515D6AB696BE6C6B1CF75676F77A61D5DD462D5E28DA092EF4C9ECB52 |
BCF47F1EF8C63D73C73AB7C45BCF0D6ABE139FC7B7A9E23BFD1A3D66F75489B5 |
0BED334AD4757D6A17D6A21A95F58F8A35BBED575AD31358BDBDBCB1D2357817 |
FB5F5BBB862D7AF62954973B58B938CA8D4C3FB6BC17BB492AD0B2A90A4B962A |
5530EAEEB4D54557DA3938CAAA8925FCBD53B7AE8F6BF64FA26ADDEC72F706CB |
52B79961B79ACEC66BA31DAE97A6EA61D049671C105DB25A2BEAF34E2F6E843A |
DDDA5BACB6D65E75EC9A5DA5A59456716AD36A36EB0DD4FA16A3632D9EA3692A |
4B792DC437F737B1EA1194B1BA416BADE9D2CAD6F0DF5A416F25BFDB627BD8E3 |
82CED9AE6EA57B16C8D4A3D31EF560B2B87BB47119D3AF268A58AD9A24625759 |
B9D364171656824B6B186DB55D361BAB8B0D0E08DA1864D50DA4915A58FB26AB |
61A32EA1169604179768B06A360C25B3BED491F4F1716D6773A7A89EDA7B38AE |
1AD6E6D2DAE23B60DAC5C882E2D926D3AD2EB4F68DFB45C909C6317ED6A538AA |
A9C21193953FDDC22A95DCD3838CE34E9C5C69D39C9BF6616DB569DF44F4D7BE |
FAEDADD5DEEFB8918D2352BCD11356D41B45D3A59351945F5BC2FE2168D12FAE |
BECEF1E99A95F696259350BD6C6A33EAB736D6EF6B025C4728786E34B39B0AE9 |
1677CDF6EB0D4BEC2FA4DFC91DB596B16BA65CDDCF2E8D756FA3EA169AD5EE85 |
A88362D7D731EA1AC68AFA6DABEAF636779A25B5FE95A95F59DC6930DEDBDBDA |
ADCD899B4FD5D617BA8AC2FB449EEE5F33FB386D6B90BA8C49756DA3DC79D7DA |
898DEC2CAE2E665694A5B5A885D08EC25D634EBFD65A4D3E2161A858E9ABA6C7 |
A969969772B6B16BAC5CE9E9A3787FCC6D62F6D2D6EB4A9A3D4AEF4EB0BDB2B5 |
B8D474E8B58BDD2AE755B2B8D4382ACDC9F2F253F6FF00BB95E296D4E928CD5E |
DECD45461ED20A9C6D384D46A7B551A695AF576D57CDBFBEFAD9DF556E9ADF0E |
EA49A498FDA23D972998EE0B2B24D24C8CC1A4B9563FF1F3D1266DA8D23279B3 |
07B979A593434FB7B5D42DD749B5D2F55BDF14EA3ACE956FA3CD6BA841F616B5 |
9A3BDB6B9D2DF43FEC996F6FB55D4751B8D1DF4ED421D72CE0B186D6FED26D27 |
539753B6BCD271AACDE8B35BCBB5D3A4B9974F5B99C58CB7B0C56F792D9895C5 |
B49776F04F7504172F06C69E186E6E228A52E91CF2A2891BCFE6BC9CE5EF26D2 |
926E3CF24EF769B8BF7ACB59F2B6A4D369B651EABE2AB4F0DF86340F8731F86B |
E24E9DE30D435AF05788B54F186847E1FCFA5DC7C31F116B17FABE8379E03BFD |
575FB3693C49AB4F61A3D96B76FADE8DE6E8FA1DA788AC25D2EFEDF5D3AF5A69 |
FE7DA6DC6991699ABC3737DAED95F5EFD9ADE35D352DE5D32F74C8ADF51BF9AC |
757B792F2CA697CDF1159784E4B675925B7B2B78B51D49ECEF6FACB4DB5970AB |
6ADF57BB5D3A1D1AD6DA05492EEEDEEE4B54B88AFF005BB7BF9342963D17559A |
DE747BFD2ACEF740B4BED32C0AAFD9751B8BBBB8DCCF2C2D06D2ADED2776B914 |
63CB087356A91FE1C28F2AE7A92925CB1BE8F4F862B9634E11495BFA5DDBE897 |
7FE9DEF6B4CBA5D6356F0F699AE5C4E9A17F6AE9B05CDB69F3693A3C76F6D3AE |
95A56A37967F6E6B1F0FD96AB77A6E9B662F759D51A08EF6E6D21BFD7EF66293 |
DCD4F631E8F79F6CB7493EC3A74D7D71733A6AB3694971A4590D9A67876F175F |
8B4DB9D6F5BFB1DEEB92DD78A341F0EF866DA5D4F4CD296FE0B5678D2E3C37CF |
D9DFDE69F2C771633BDA5D433DB5D5BDE5BED8AF6D2E6D2559EDAE2CAF540BAB |
29E19956459AD26864DCAA4B1DAB89F4A8F4896ED975CBBD4ACAC3EC3AA3ACFA |
569F6BA9DD9D4A3D32F24D1606B4BCD4F488458DDEB2B6169AA5D8BC33E9DA64 |
F79A85A596A9776B0E9979119A7C8BE29B93E694EC96B68C539B6DB8593E752B |
47965256D149336EE6FB599BC2E60D5BED9716D36A1A25F68D73A9DFDB978ECE |
DB4ED67C3D27F63595F44FAADCE9F347A1D9693777FA35CC5A3D91F0BE97A4EA |
F15C5CC3A02E9D5A78F49B8D47ED6D6D068FA66A3A56A3A85A5841ADB5EAD9DF |
C361A84305A79B158EB5A959C137882CB1A7691AD41FDA2DA4CFA7C5A96BE96D |
763C62D89773C57339961B2B6D3E3F2ADE3FB35A3DE3C01E1B78A19270D7F777 |
B73E6DDC91BDDDC0370605B89E55B486D6D0416B0D6A52A9AA4ED3E5B252693E |
671949DF99C2353925CD2F764D36B9799BE48A41AB7DAAB6A31C8F776904FA9D |
C4E2EAF75D9AEB56B9D5B50B97B9D52EAEEE2F64BAD4E7B3967BF6D4604BC985 |
9248EBA469F2C4D0DCCFACCFAB515BAB94B69AC92E275B3B89EDEEA7B459A45B |
69EE6CE3BA8AD2E2680308A49ED62BEBD8ADE67469208EF2E922655B8943C867 |
B75B47B54B482495E7B6B81A949F6B4BD8563B79527B18A24BE6D3DAD269A659 |
5E596CA4BD66B4B6686E2D2292EAD668EDEDE4BA91A289A056582EAE09B8BAB6 |
B38CC7676D35DCAAB2DDCD044F3BC503A5ADAA3B5CDF5CB4365650DC5E5C4104 |
92DC9B5ADE4D5BDD5AB6EE9A6D25CD277D5FBDCD7DD8179D97569259161820D4 |
E69F58D4EF66FB4693A4692F6C96CB7C96BA7E9896BA759D84F1341A8882D2D6 |
E5E3D41AE74ED2346D2ADEE608A2D46FD95CC70DB69FAADEEAB06A12E913CD61 |
A5F86E7FB4DC5CDA4623BCD56CAFFC9D5341D57C2D3786E3D7EEDE7D474396E0 |
DCEAB24DA840F636D16A126AD1C4DA75E5CDD269D349A7C70E8AA6D352D4ECAD |
D2F74ED26CDB5D7B39353D5F53F0ED95F9D56CE3D43538522D6206D65EE2D6E7 |
4CD3B4E9EE5174EB04C79AD6E6DE3B5967B79E08AFA06BAB29668648E3BCB64B |
9B8B27B8B577555B8816F2CEEED1A688BC6B736B7101612C12A2D5E517CD67CD |
6BB6F4B59C75718BDE3356BCEEA52F8A3CEA480BD7D711EA51C97EEBA5595E2C |
E127B5B2B5B9B3935392FEE754BF9B528ED2DE13A169F069E0DB6986C74E1A35 |
B456CDA5AE9FA4DC326AB78836BDAE3E9D0E8EFACEAADA4DBC1716B0696DA8DE |
369D05B5E5FDAEA9776F0D9198DB4705D6A76365A8DC42912C73DFD9DADE4AAD |
716F14899D147E6B15F3238F11CD26E95B629F261797CB0707324BB3CA857F8E |
6744C8DD911D4F34F569B5CC9C24D36B9D5D36A567AFD96EFA36937795D813B5 |
D5CBDB4364F713B59DBCF717505A34D235B4173791DAC577710C058C51CF7515 |
8D945713222C93C7676A92B32DBC412CE9C6D9EEADE2BFBC9F4FB12F37DAAF2C |
ACA3BCBD8E0961D93AC36E6E6C3ED8F2C6BE4C56B3EA16B6C5A57124F6F1CB3C |
B59F452526A4A4FDEB38DD372B4945AB45B8B8CADA25EEC934B669A4D07B3F87 |
A7B8B8D1659DA7125E5B5F4D0DC595CCF19BE8DFCD9256B4B5B6BCB982FEE228 |
EDD5637BC964B9834FB9BAB48AFEE90CD6B6D232E6F74CB6D417509CB4D0A5A1 |
617C8B7F796F6324DF665445317DA2CA06BFB79227530C76F28440D2B4C9A845 |
8F30D396F6E1A48AD6E245945BB2411A30795BC891B551040A1FED117EF2D249 |
A392D637C5E7931486317664AB7796D6F05DCE8F72B3DAC90DADEC70D9B269E2 |
F37D9B4C2731CC6E20B0645799D6078CCEEF3C5058D94705DA9B7FA08E6751E1 |
A8DA827ECDD387B5AD35287B48466E3250F8A4D72AE771F7AF28AA6A3374EF8B |
A6B99EAF5BBB25AD9D9357E9E5F36EEAF6F5BB0BFB7D4ADFED56BE6184C92C6A |
D244F16FF29CA7991EF037C6F8DCACB9C64C72049925892ED70D6FABE9FA1C11 |
DA5B4CB2DBC8BF6A84DF9D5ED5BCB972A8608FFB22EC34322C6267952558A6BB |
96EA4861822648526FF84C2DBFBDA77FE056ADFF00CCFD7AF0CC30D184157C45 |
0559457B45095E3CF6D795ABDD76D5E862E9CAEF9632B74BEE79555E1776E2F6 |
D6E8E9762D05BFD83CED35A4D4FEC57DF638ADE3B8FB548BA8AEA29FDAAF0C97 |
17FF0061BFB3F2E5BAB85D2FFB3605B586DA9A2867556758D59954C8E1CA2024 |
02EE235790AA8F998223BE01DAACD807A8F1AE8DE1EF0FF89B53D23C29E31B2F |
1FE8169F63FB078B74ED1F5CD02CF56FB469F697575E4E93E24B3D3F5AB4FB05 |
ECD71A649F6DB487CF96CDEE6DFCCB49A095FE2527CAE6B96CA71566E1CD76A4 |
D5A0DF3CA368BE66A2E09F2A9B4E504FB0E568A2A75BAB94B69AC92E275B3B89 |
EDEEA7B459A45B69EE6CE3BA8AD2E2680308A49ED62BEBD8ADE67469208EF2E9 |
22655B8943C7AF9F9FA755D77EDBD9EC0414515B3A8E8777A6D868DAA4B2E9F2 |
58F8821BEBAD2C5BEB3A25EEA42DB4FD4AE74A95B58D174ED4EFB54F0E4F25D5 |
A4C6D6D75DB6B09AFAD426A1A7ADE69D341792B516D49A4DA8A4E4D6BCA9B514 |
DF65CCD46FB5DC56ED5C31AACDB3343225D2C9E535B489246EA21924170AAF2D |
B9104922978FCD8944B2057485581757668E296287C9F3A2FB4799E47989E7F9 |
3B7CEF2770F33CADFF002799B376CDFF002EEC6EE335D2DDEB9636D63E25F0EE |
8BA6D94DA0EABE21B3D534BD575CD274C9BC676163A39D66DF4EB48F5BB64F36 |
C63D42CB5657F1169B6329D3351BFB1D3AE0C45B4EB575B824BDF73E5E5BB8DA |
FCDCEA2E50DACD2724A3CC9E8DADB743FBCC558F7D999E3B3575B4678AEE6027 |
C0FB5AB0B396561764064916558FCBB7820578E05B86B96B8F2EBA2B333CD3B5 |
AC5750EA51C90ADA69D24569F669B36DE5891A217B611DB4B345A6C31C7A9DAD |
C5DC297D633416725E4E16211E7EB12E9516A9AA9D0A7D40E85737866B0B1D48 |
DB0BCB8B25961B8B44D65747920D36393CA9A4DC960EC6DAE22780436B959162 |
8B56B8B5B38D6DDD92665923FB524EE2E91D5560688A3DCDC0FB21B136E88D15 |
BD8169EDAD592491F4B566ECA53851A8D4A765156AAE9FDBE494A9FEEF91A85E |
70717175549C6AA751B8A6E3396AEB6F4BF4D9EB7D77DD2E9A7A7D73E1CF1768 |
371ACF86F56F14787342F0FDBF85BC256DA2DE69BE0BB2D5DC78DAFED965D3A4 |
D4B5A3AAEB6E8FAAEB16FA8CB7BE20264B1D0AFACB4E6D20690C976E975E15F1 |
1A4D5FC27E20F14781EF2FB417BED0B50BAD0B5797C29E30D0FC73E1BD5E4D37 |
54D32EB659F88BC2373AEF823C53A4FDB2CD2E21BDD1F5AD5B4AB99EC04F65AA |
4B6E235D4B80D3B55D56D2DEF24B07BB8623686CB59B8B79C235C699771BE982 |
D0CD347335B99ECEF2E74E648498A6B2708D68520B879726E3CE8649216B76B0 |
72BB27B71F698CB23CBF698D658EE24790AA8F27CB5638290C12B079B74CFE8E |
37379D7C24295384E9F327ED272BCB9E334E0A2A6E11E66DC2D292F66A32A752 |
318D45EF3CE149464DB69DB6DD35E7BBFBB5DD3D36346C750974BBDB0D4619A7 |
B5BDD31F4CBCB5882CB0C88D6D791DF47269F7A64B89ECE791D60D423B9892D9 |
4B5C5E792D1A08A2BCBDAFF88356F13EBBAEF897C517977A96B1E25D46FF005A |
D4AF6FEE956E6FB52BCB7B9BBFED0BE8AD2D6369AEEE27BF86E60BBFB3DB5ADC |
C8F70A408A79E4B7E6CDCDC3218DA799A32A10A195CA1402050A54B6D2A16D6D |
805C600B780018863DB634F812EAE3ECB25ED969E93C530375A824E6DD5E28DA |
E2187CCB6B4BC9E096EE7863B3867114704724EBF6EB9B5D3CDDDC47E3AAD36A |
34A2DF273A94612B283A9AC539C64DC1FBB2E4DE108C5C9A8ABCAFAD96AFADAD |
E76ECADAFF005E87A35EF83F47D33C2DA6F8F344F1C787756B4FF84F5FC3565E |
11D502681F112EA2B3D2B4FD5E6F174DA1C32EB36569E0792E9DB42B4D62F7C4 |
292C9AC437515BE99983556B3E262974E8D6DE7FB2ED597ED534A93ABDCDAADE |
59C626B3B681CC11CDE5CD33086F2D249AF22FB0DDDB34D726E9566B593C51A1 |
CDE17D7B56F0DDE6A7A2EB9368B3BD847AA785F5EB0F117876E4ACAB31B8D275 |
9D35EEAC353D3E55965647B49917CE9599D8491CB0B61A906331F9ED18667924 |
8DC3F904C3131B720C6646799DA49E14DF0A243BD4998472CA62B956E49B8469 |
538723D69B7CEA1562E119F2CAA4A53519727234AAC97B377BDD092BEB76EFD7 |
6D35B6DDAFEA59F35E548A617737DA6C6156579E72A5123B88A2B6B6D3C02D26 |
E80486E721E20A9E688E18FECDE6DCEE412DB1BC104F6D25DA5D499BAD3AC34E |
16B7B04FA745776881EC8AC96DFE956D2C97174B692C735B5CBC92C32DB3DAA1 |
9F94AB680440C9105B99235495D8C0F2416CBBED59243E61092379CED673C773 |
6EF69F3011B5C19A378E29567092972A959C5C936DDF953526A0DB4E52A6DD36 |
E51945294A4D276945B57FEBFAEB67F236626B7BD78A5696FEE1626D3E5BD0F6 |
965A86A7717F213032C0F2FEF1B4C0122B7417324F1A5C4F6B1BD9CCD38C6D19 |
5ACEC6DAF65BCBF885EADB49CCB770A4A926A2B21B59EEADF458A4DDF628A6B9 |
96EE2BB1712DC4B7B756D6D347A8CB25DF3B35FDB87F396D61375B4B892E5535 |
169BCEB78D11AEE413C5632CC04F35C3B1D2C4E9776D6E2ECDC4F2DE3ACCB717 |
1149268D0416F776E24768E2B789355372635BC9637592268834934570905CDF |
5AA5ADEC36D6F0EC10C96CD0B76D3AEA9B9D9F34E4A505522AA494AA547FBA72 |
84A4AD271538B87D97793F69CCD12D5ED7D3ADB4D12DF6F97FC03EAEFD9CFC25 |
6DF133C4FA2FC2CF1C278D35CF01B5C78D5BC35E1EF02F8ABC3DE22BBF06F887 |
C71E11D23C3DE2BF8A9A0FC23BAF13F84B51F14EB16FE19F0E782FC4F7E2C352 |
D020F184BF0EF47D0FC457ABA3389BC37F68FEDD7FB01EB7FB2E4FA269DE22F8 |
ADA178C3C4F7DF093C1B2E916971E24F0B7C36F1FF008274DF06FC31F82975AC |
5B78F3E1578CBC5D37C49B1D626373AD785BC05E058347B3BBF1D786B4EF0E7C |
4DF87BAEF88FC1BAB5868DA9FE78F80B51B7D5AEB56F136813F85BC232F857C1 |
DA8E8B2F835B56F1268DFF00092DBF88BC1FE2DD0B5DD6746BA93C6773A85EF8 |
A2E26BD4379A65A9D1BC1DA9BEACBA45EE896BE13BABAF0A6A7E87F137E236B7 |
F1A46A9AB7C49F887ADF86ACA1F825F06DBC3F61F14347F1F78A752F8A3E3DF0 |
0785BE187C369E1F0EF8AB5ABEF88DAAF84E6D7F4AFF0084BFC6FA778C6F7C41 |
A2F826FF004DF0B6A7E1DB4D1BC2FA5EA7A0F812C3D9A33C3D3C1B7ECDD4F6CA |
B284DCE9C63515E941395587B2F654E9547C8A725EDE292E582E5A5059494A53 |
5ADAD6BE97D7DEE9AEBDF5B3EEF53E4FB8B911429A79F2EF56C636699CAEA76B |
6B1A6D093D95CD9C70DADC248FA8476604E648EDE4B986D279A382EAE751925F |
A5BC6BFB5B7C47F88FFB377C1DFD947564F0B5CFC3BF833E32F1578B7C10B67F |
0F7C01A07885751F1BC9A0C5ABDACBE26B4F0FDF78866FED5974C49F5E12EBB6 |
7A6F88D74CF08A7892CB58FF00840FC1D1E99F2A486E049786FE6B9333C690CC |
4DCA493998AA4D0C57513CA659A3436EB15C21656B19844661E74296930B7B6E |
5A2F3B4FB72A91C114A202F0B5D2C325A96333486E04524B15BBA3CD64B67334 |
93C92C8F22992293C28E2EA41D58A9AA51A91F652528494FD945B87B3BDAA3BC |
609479AA2AB28A751464DF3425B38A767BD9DD6B757EFD3AF6B6BF85BF22748E |
52B0CD34B6F68C666B5B5F292D0CB14B63736F7E6DFC9BA8DA38213233DD1443 |
710DC892D2F2D6F64BE973AE9D0CB36CB25B3491A296188BDC3BC303465A3557 |
9A426459E392399E5743BC84783C985CC6DD0E8D069F757BE1E86EBC451E9573 |
AC6BF0C7AC5FEAF05DDCF87349D2AE2E61B21AB6B4FA5FDBF5BBAFB3F9DAB5C6 |
AF6169A2DE5CBE8ED13589BDB9BD92C94BFBFB4D193C4FE18D2C78735FD3EE75 |
1B6B587C5D1E977925DDEDB6877B7C62D4BC3971AED8E9BABE87A7F887CE8AE6 |
7B79F49D2F56934F834FB1D460B79935086E709A8BA69B92827CCDDF92A49CBD |
939D34AD7A8B9D4A309DDA8D3928B7CCE31517D7FE1D75B3F2F3FCBBBCBF10DF |
D9EABAFEB9AA69DA7C5A4E9FA96B1A95FD8E9502C49069967797B3DC5B69F0A4 |
11C302C56704896D1AC314512A460471A200A32551DC95456760AEE42A962123 |
469246200276A46ACEEDD15159988504D0EEF23BC92333C8ECCEEEEC59DDD896 |
66766259999892CC49249249CD36B9A52E69CA4FED49C9D928EEEEEC95D47C92 |
D1741855BB2B292FA49A38E5B484C369797ACD7B796D651B47656D2DD3C513DD |
4B12CF773AC461B3B384BDCDE5CBC56F6F1492C8AB5528A4AD757575D55ED7F9 |
D9D8028A29CEA15DD55D64556651220708E01203A8915240AC3E650E88F82372 |
AB6404036A6491222AEAAB2B343347224F10288F324D0868F1212ED1C6E93C52 |
B08CC77007EED9620F25E8A3D14E8F7D2CF79AA27881350D3934DB08B4CB4974 |
7B8D29E0D40EAD737DAB3EAD0DED9EA16D729A547A758C1A2DF5B5F4171A84B7 |
3A869F259DB437F9755AC6CF4BB4A4ACD3B6BD6CF47A6CFA34EDAA00A9ED5AD9 |
2E6DDEF619EE2CD6785AEE0B5B88ECEE67B65914CF0DBDDCB6B7D15ACF2441D2 |
1B896CAF238246595ED6E154C4F104728D205631AB2A33853B15DC3B22B36368 |
6758E42AA4E5823900856C755E08F08DC78E7C4BA7F862D75CF09F8726D416F1 |
9759F1BF8974BF08F86AD059D95C5EB0D435ED62682C6D1AE05BFD96CD247DF7 |
37B35BDB46A5E51821194A518C55E5269453B59B6ECBE2F76D7DDBF756B7D2E0 |
60D8DE7D8BED9246F7D15D4B6371676B71637DF62F2BEDBB2D6FD2F02DBCB25E |
D8DEE8F2EA5A6DC58C735979BF6D4926B896D62B8B0BDA6AEE84B23323157425 |
58A929223472292083B5E366475E8C8CCAC0A9229B452BBD35DB6B6967BDF4EB |
B6BBD925B256028A9E6B89278ED62758156CE06B788C36B6D6F23C6D7371765A |
EA58218E5BE9C4B752A2DD5EBDC5CA5B2DBD924CB67676904112A862417541B5 |
DB73872095466541B15DB748C046848081D94C8C91EE753AE9E5BD96BD7ADAD7 |
EB7DB576D8011DE37592366491195D1D18ABA3A90CACACA432B2B00558104100 |
839A6D6AEB7A16B7E19D5AFB41F1268FAAF87F5CD2E736DA968DADE9F77A56AD |
A75C055736F7DA75FC36F7969384756315C431C81595B6E0825BA5DAE9D772DD |
26A7AA7F64C5169BA9DD5B4DF629EFFED7A8DAD94D3E9DA5F976ECAD07F6A5E2 |
4363F6D90982CBCFFB4CEAD146C0D28C9CBD9FC32BB569C94126B75273718C5E |
96776B556DC3FAEFF915577450CACC91FF00A4C689109A290C863F3F7B5CDABE |
DF2C6C92D1ADA472FB8ACB2C488FFBD68B4603B2E162B53E54173F67BB8E2D42 |
F36E9F7496892CCD6D7864B6B286EB75E44D6D1B9115BC73A4B0879438B94D8B |
797C35ADB786F4C7D3ADBC2B258685AD5A6B1ADDB9D775D93C4FADF99AE6A5A2 |
5E4FA49BC7FECEBDB8F3F47F0B245A49B7D2A35B4B7D62EEC9E47D4BED3CF3DD |
4CB6F690CD2C732D9EF7B28144122DBB4EF6D74EF719B7962B98E60CE8D6D24C |
D245323A4E912A1866DE368253E78B82B28BA76E6724A12A94E5CEA3521170AF |
38F3724A13A90B479E109548ADFA7DFF003B3ECF54B4BA6976D9F49A72689240 |
EDAA69D68D70269110D9EAD636F1F9116234531C9AE40599591D566D8DF69884 |
770F35C4B2C9712DFF0023C27FF40CFF00CAE69BFF00CD0D60CB7D668C11BCCB |
731C70C41A5D234DD5DAE618E144B5B91717F1E9B2C51BD98B748615B48D4C31 |
A5CB969EE26631FDBECBFE7E7FF2D3D03FF92ABD18D6C3C22A0E961EA38E8E72 |
A781E695BACBDA724EFDF9A37BF592F79E6D49B6EF25E579E9F75D7DDF86C60B |
B46CB0848BCB648CACAFBD9BCE90CD2B89769E23C44F143B172A7CAF33EF48C0 |
3404D8C4B3799B942A85050A10FBD99F78656561185511B070CE4BA145591B45 |
78B7BEAD2D92DADB2B27A5B5EADF57ACAEDBBEA145145200AD29B55BB9F49B0D |
1645B1163A6DF6A7A85AB45A5E9906A0D73ABC3A641782F35882CE3D5F52B658 |
F48B2FB0D8EA37D7563A539BD974BB7B39754D51EF3368A69B5749B4A4AD249D |
AEAEA567DD7324ECFAA4F748028A28A4059170042B08863DA3CC321DF723ED12 |
1591209664171E579968257FB318E38D7E6613ACCAEEACC69DCA246A1625584C |
12188143709F687B906E7071332C850296180904031BA20D50D155CD2EFD3974 |
4969A69A25BDAEFBB6DBBB949B0FABFE2EFECB9E2AF85FFB3CFECC5FB4EDE6BF |
A15D7C37FDABC7C4D5F07E87673DF49E30D0B57F823E24B0F02FC4097C4DA59D |
1B4BF0EDAD8DEF8AAF351B9F04268FADEAD34BE1C36FFDB1FD95A834D6D5F2F0 |
D4F52097B18D42F847A9C50C1A920BB9C26A105BCF0DCDBC37ABE662EE282E6D |
ADEE218E7122453DBC32A059228D97F607F6C6FF0094447FC11BBFEC23FF0005 |
01FF00D689D3ABF1C2BB71D154674552BC155C2616BCD294ACE75F0EA552D76E |
D16E753DDD929CA2BDD76220F993BF49CD2F45276FC97DC14514570161451450 |
04D7103DBBAC6E54B3436D382A491B2EADE2B98C1C853B847328718C070C14B2 |
80C63677608ACCCCB1A948C3312110BBC855013855323BB955C0DEEED8DCC49B |
FAA7FC7CC5FF0060ED23FF004D36559D5A558A854A908DED19CE2BD232695FBE |
CBE625AA4FBA2412B08CC4047B5B7649861693E66898E2528655C18536ED71B1 |
4CAAB85B89C49A30EA28AD70268375AC96E228F4E4B8BF5B3F3124F321DC7EDC |
2611C533CD75B5DE75696495112169C5C5BE5514A35270774D76F79296966B95 |
F32778D9BBC1FB92D39A2EC867A4FC39D7B40F06F8F74FBBF18D9EA77FE17B61 |
ABE8FE2CD3BC38F64BAA6B7A45ED9DFD85FE9D6B71AC24B69683505996C66BC5 |
8639ADAC59EE2DA3FB6A8326E7C4EF885E1AF19D8F83A0D1B46D5ECB55F0F786 |
74BD275BD6F52BE49EDB5E9E2F0EF87AD0D8597871A4BD8340B1F0EEB4BE30FE |
CBD4A1D5EF66D76D754B2D567D1FC37AACBA8407CAF58FF90B6A9FF611BDFF00 |
D2996B3ABAE78BAF4A956C1424950F6D36D38A72F7651514A7BC6CE9A97B9CAD |
C9CF99B539272926D4BADBFAFEBD3B2268AE2584C6D1154789A478E411C7E623 |
C88A8584850C9B9028681B766DA5CCD6E629897223C0B2AB342D243B556489A6 |
C3B1318491E395114237985A5B70D1CA91111A4CB748AE25868AE3E6969ADD27 |
CC934A493D16CEEB54926AD66924D34914492B46CDFBA8BCA45DC14176924653 |
23BA995CED4691519622D145046CB1AB794AE5D99AEC5DDDD828676662111234 |
0589242C71AAC68B93F2A22AA28C2AA85005368A4DB7F3ED64B4F25640145145 |
20377C31A2FF00C249E25F0F7877ED3F62FEDED7749D17ED9E4FDA3EC9FDA97F |
6F63F69FB3F9B079FE479FE6F93E7C3E6ECD9E6C7BB783C51A2FFC237E25F117 |
877ED3F6DFEC1D7756D17ED9E4FD9FED7FD977F7163F69FB3F9B3F91E7F91E6F |
93E7CDE56FD9E6C9B779DCF861FF00252FE1E7FD8F3E12FF00D3FE9F47C4FF00 |
F9297F10FF00EC79F16FFE9FF50AEBF670FA8FB6E5FDE7D6FD9F35DFC1EC79B9 |
6D7E5F8B5BDAFD2F615FDEB74B5FF138A53088E50E9234A76792EB2AA471E1BF |
79E6C461769772E026C961F2DBE66F301DA23A28AE56EF6DB456D92EADEB6DDE |
BBBBBB596C924CB7657F7BA74934B63753DA49716979613BDBC8D1B4D65A85B4 |
B677D6B215237C1756B34B04D1B655E37208A69B92D671D9B471621B99AE6295 |
20B549F37314115C473DD2DB0BEBA8B1696CD6904D76D6B60FF6D92D6D926D46 |
EE592B514F9A56E5E67CBAFBB7D3DEB5F4DB5B26FCD27BA404CD03ADBC5724AF |
9734D7102804EF0F6E96D239618DA14ADD4614862490F90A02966CDE4F9D2FD9 |
FCCF23CC7F23CEDBE7793B8F97E6ECF93CCD9B77ECF977676F18ABB2FF00C826 |
CBFEC23AA7FE9369159D555128B515B385295DEF79528C9FC9B93D3C97612D7E |
F7F83B134B03C296D23152B750B4F18524908B71716C43E4001BCCB77202961B |
0A9CEE25561AD1BDFF008F6D23FEC1D2FF00E9DB54ACEA5522A32496CE14A5F3 |
9D3849FE327605AFDEFF000760A28A2A066A6B1A945AB5F1BD8B4BD3F470D69A |
6DB4969A63EA725B4B7161A6DA585D6A723EAFA8EAB7ADA86B7736D2EB3AB1FB |
67D90EAB7F79FD9B69A769BF64D3AD72E8A29CA4E5294A4EF293726F6BB6EEDE |
9A6FD802ACCF240F91143246ABB1610F2C2ECB1FEF1E513BC5696E6E24795C18 |
E5608D142A20225511B455A8A136935A59EFA26F4BF56AE96B7B276BA4F78C5A |
0BE2FDA279BECD6F691C124D24B1C53D9D9DF3C28E7E4885C5E5B4B332C68154 |
65802417DA19D8977F6A5CFF00CF2D3BFF0004FA4FFF0021567515A7B6ACB6AB |
38AD748C9C62AEEFA462D462BC92497442B2ECBE7A9FFFD9} |
end |
object Label1: TLabel |
Left = 88 |
Top = 0 |
Width = 172 |
Height = 29 |
AutoSize = False |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clRed |
Font.Height = -24 |
Font.Name = 'LcdD' |
Font.Style = [fsBold] |
ParentFont = False |
Transparent = True |
end |
object Label2: TLabel |
Left = 8 |
Top = 245 |
Width = 239 |
Height = 19 |
Caption = '(C)Copyright 2001 Daniel Marschall.' |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clYellow |
Font.Height = -16 |
Font.Name = 'LcdD' |
Font.Style = [] |
ParentFont = False |
Transparent = True |
end |
object Label3: TLabel |
Left = 8 |
Top = 266 |
Width = 160 |
Height = 19 |
Caption = 'Alle Rechte vorbehalten.' |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clYellow |
Font.Height = -16 |
Font.Name = 'LcdD' |
Font.Style = [] |
ParentFont = False |
Transparent = True |
end |
object Gauge1: TGauge |
Left = 8 |
Top = 200 |
Width = 337 |
Height = 28 |
BackColor = clTeal |
ForeColor = clMaroon |
Progress = 0 |
end |
object StatusBar1: TStatusBar |
Left = 0 |
Top = 294 |
Width = 353 |
Height = 19 |
Panels = < |
item |
Text = 'http://www.d-m-home.de' |
Width = 270 |
end> |
SimplePanel = False |
OnClick = StatusBar1Click |
end |
object load_button: TButton |
Left = 8 |
Top = 40 |
Width = 89 |
Height = 25 |
Caption = 'Datei &öffnen' |
TabOrder = 0 |
OnClick = load_buttonClick |
end |
object crypt_button: TButton |
Left = 104 |
Top = 72 |
Width = 241 |
Height = 25 |
Caption = '&Verschlüsseln / Entschlüsseln' |
Default = True |
Enabled = False |
TabOrder = 2 |
OnClick = crypt_buttonClick |
end |
object beenden_button: TButton |
Left = 256 |
Top = 40 |
Width = 89 |
Height = 25 |
Caption = '&Beenden' |
TabOrder = 3 |
OnClick = beenden_buttonClick |
end |
object FileName_Edit: TEdit |
Left = 104 |
Top = 40 |
Width = 142 |
Height = 21 |
TabStop = False |
ReadOnly = True |
TabOrder = 4 |
end |
object Panel1: TPanel |
Left = 8 |
Top = 112 |
Width = 337 |
Height = 73 |
BevelOuter = bvLowered |
TabOrder = 6 |
object Label4: TLabel |
Left = 8 |
Top = 6 |
Width = 168 |
Height = 19 |
Caption = 'Verschlüsselungsnummer:' |
Enabled = False |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clWindowText |
Font.Height = -16 |
Font.Name = 'LcdD' |
Font.Style = [] |
ParentFont = False |
Transparent = True |
end |
object Label5: TLabel |
Left = 297 |
Top = 6 |
Width = 8 |
Height = 19 |
BiDiMode = bdRightToLeft |
Caption = '1' |
Enabled = False |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clWindowText |
Font.Height = -16 |
Font.Name = 'LcdD' |
Font.Style = [] |
ParentBiDiMode = False |
ParentFont = False |
Transparent = True |
end |
object vk: TTrackBar |
Left = 8 |
Top = 32 |
Width = 321 |
Height = 33 |
Enabled = False |
Max = 256 |
Min = 1 |
Orientation = trHorizontal |
Frequency = 1 |
Position = 1 |
SelEnd = 0 |
SelStart = 0 |
TabOrder = 0 |
TickMarks = tmBottomRight |
TickStyle = tsAuto |
OnChange = vkChange |
end |
end |
object close_button: TButton |
Left = 8 |
Top = 72 |
Width = 89 |
Height = 25 |
Caption = 'Datei &schließen' |
Enabled = False |
TabOrder = 1 |
OnClick = close_buttonClick |
end |
object OpenDialog1: TOpenDialog |
Options = [ofHideReadOnly, ofPathMustExist, ofFileMustExist, ofEnableSizing] |
Left = 320 |
Top = 256 |
end |
object SaveDialog1: TSaveDialog |
Options = [ofHideReadOnly, ofPathMustExist, ofFileMustExist, ofEnableSizing] |
Left = 288 |
Top = 256 |
end |
end |
/trunk/History/Decoder22/Unit1.pas |
---|
0,0 → 1,126 |
unit Unit1; |
interface |
uses |
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, |
ComCtrls, ExtCtrls, StdCtrls, ShellAPI, jpeg, Gauges; |
type |
TForm1 = class(TForm) |
StatusBar1: TStatusBar; |
load_button: TButton; |
crypt_button: TButton; |
beenden_button: TButton; |
FileName_Edit: TEdit; |
Image1: TImage; |
Label1: TLabel; |
Label2: TLabel; |
OpenDialog1: TOpenDialog; |
Label3: TLabel; |
Panel1: TPanel; |
Label4: TLabel; |
vk: TTrackBar; |
Label5: TLabel; |
close_button: TButton; |
SaveDialog1: TSaveDialog; |
Gauge1: TGauge; |
procedure beenden_buttonClick(Sender: TObject); |
procedure load_buttonClick(Sender: TObject); |
procedure crypt_buttonClick(Sender: TObject); |
procedure StatusBar1Click(Sender: TObject); |
procedure vkChange(Sender: TObject); |
procedure close_buttonClick(Sender: TObject); |
procedure FormCreate(Sender: TObject); |
end; |
var |
Form1: TForm1; |
implementation |
{$R *.DFM} |
procedure TForm1.beenden_buttonClick(Sender: TObject); |
begin |
Form1.close; |
end; |
procedure TForm1.load_buttonClick(Sender: TObject); |
begin |
if Opendialog1.Execute then |
begin |
FileName_Edit.text := ExtractFileName(OpenDialog1.FileName); |
crypt_button.Enabled := true; |
vk.Enabled:=true; |
label4.Enabled:=true; |
label5.Enabled:=true; |
close_button.enabled := true; |
SaveDialog1.filename := Opendialog1.FileName; |
end; |
end; |
procedure TForm1.crypt_buttonClick(Sender: TObject); |
var |
mem: TMemoryStream; |
i: integer; |
a: byte; |
key: integer; |
begin |
if Savedialog1.Execute then |
begin |
if not fileexists(OpenDialog1.FileName) then |
begin |
MessageDLG('Datei nicht gefunden!', mtWarning, [mbOK], 0); |
exit; |
end; |
mem := TMemoryStream.Create; |
mem.LoadFromfile(OpenDialog1.FileName); |
gauge1.MaxValue := mem.size; |
key := vk.position; |
for i := 0 to mem.Size - 1 do |
begin |
mem.Position := i; |
mem.Read(a, 1); |
a := a xor key; |
inc(key); |
mem.Position := i; |
mem.write(a, 1); |
gauge1.Progress := gauge1.Progress + 1; |
end; |
mem.SaveToFile(SaveDialog1.FileName); |
mem.Free; |
MessageDLG('Datei wurde erfolgreich Verschlüsselt / Entschlüsselt!', mtInformation, [mbOK], 0); |
gauge1.Progress := gauge1.MinValue; |
end; |
end; |
procedure TForm1.StatusBar1Click(Sender: TObject); |
begin |
ShellExecute(Handle, 'open', 'http://www.d-m-home.de', '', '', 1); |
end; |
procedure TForm1.vkChange(Sender: TObject); |
begin |
label5.Caption:=inttostr(vk.Position); |
end; |
procedure TForm1.close_buttonClick(Sender: TObject); |
begin |
opendialog1.FileName := ''; |
filename_edit.text := ''; |
crypt_button.Enabled := false; |
vk.Enabled := false; |
label4.Enabled := false; |
label5.Enabled := false; |
close_button.enabled := false; |
end; |
procedure TForm1.FormCreate(Sender: TObject); |
begin |
label1.caption := application.title; |
form1.caption := application.title; |
end; |
end. |
/trunk/History/Decoder22/Windows V2.2.md5 |
---|
0,0 → 1,8 |
c1930a3119fdc982d5bf2e049184b3c8 *Coder.cfg |
75f60ee09605fb4979558d0637016653 *Coder.dof |
aa4fb140c49f564a714bfd8a9c25510f *Coder.dpr |
83997dec391adee066fba8a29eb8e65e *Coder.exe |
e3033d3056bbbe1f51669454fd0a4939 *Coder.res |
069468415a742d55cfe01a1489d85e18 *Unit1.dcu |
4ec0a682310e2fef71cf3933643c3e5d *Unit1.dfm |
455a1863856bb8973722fe2ed4fdaed0 *Unit1.pas |
/trunk/History/Decoder22/Windows V2.2.sfv |
---|
0,0 → 1,9 |
; Generated by ViaThinkSoft |
Coder.cfg C1D6C9A3 |
Coder.dof 5811B3B0 |
Coder.dpr 42BC642C |
Coder.exe D760FB9B |
Coder.res A4C538F9 |
Unit1.dcu 28CD427A |
Unit1.dfm 51654416 |
Unit1.pas F9E12EEB |
/trunk/History/Decoder22/test_in.txt |
---|
0,0 → 1,0 |
Hello World! This is a Test! |
/trunk/History/Decoder22/test_out_61.txt |
---|
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 |
/trunk/History/Decoder30/256zero_in.txt |
---|
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 |
/trunk/History/Decoder30/256zero_out_foobar.txt |
---|
0,0 → 1,0 |
foobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoob |
/trunk/History/Decoder30/Coder.cfg |
---|
0,0 → 1,35 |
-$A+ |
-$B- |
-$C- |
-$D- |
-$E- |
-$F- |
-$G+ |
-$H+ |
-$I+ |
-$J+ |
-$K- |
-$L- |
-$M- |
-$N+ |
-$O+ |
-$P+ |
-$Q- |
-$R- |
-$S- |
-$T- |
-$U- |
-$V+ |
-$W- |
-$X+ |
-$Y- |
-$Z1 |
-cg |
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; |
-H+ |
-W+ |
-M |
-$M16384,1048576 |
-K$00400000 |
-LE"c:\programme\borland\delphi5 enterprise\Projects\Bpl" |
-LN"c:\programme\borland\delphi5 enterprise\Projects\Bpl" |
/trunk/History/Decoder30/Coder.dof |
---|
0,0 → 1,85 |
[Compiler] |
A=1 |
B=0 |
C=0 |
D=0 |
E=0 |
F=0 |
G=1 |
H=1 |
I=1 |
J=1 |
K=0 |
L=0 |
M=0 |
N=1 |
O=1 |
P=1 |
Q=0 |
R=0 |
S=0 |
T=0 |
U=0 |
V=1 |
W=0 |
X=1 |
Y=0 |
Z=1 |
ShowHints=1 |
ShowWarnings=1 |
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; |
[Linker] |
MapFile=0 |
OutputObjs=0 |
ConsoleApp=1 |
DebugInfo=0 |
RemoteSymbols=0 |
MinStackSize=16384 |
MaxStackSize=1048576 |
ImageBase=4194304 |
ExeDescription=(De)Coder V3.0 VLL |
[Directories] |
OutputDir= |
UnitOutputDir= |
PackageDLLOutputDir= |
PackageDCPOutputDir= |
SearchPath= |
Packages=VCL50;VCLX50;VCLSMP50;VCLDB50;VCLADO50;ibevnt50;VCLBDE50;VCLDBX50;QRPT50;TEEUI50;TEEDB50;TEE50;DSS50;TEEQR50;VCLIB50;VCLMID50;VCLIE50;INETDB50;INET50;NMFAST50;WEBMID50;dclocx50;dclaxserver50;DelphiX_for5 |
Conditionals= |
DebugSourceDirs= |
UsePackages=0 |
[Parameters] |
RunParams= |
HostApplication= |
[Language] |
ActiveLang= |
ProjectLang=$00000407 |
RootDir= |
[Version Info] |
IncludeVerInfo=1 |
AutoIncBuild=0 |
MajorVer=3 |
MinorVer=0 |
Release=0 |
Build=0 |
Debug=0 |
PreRelease=0 |
Special=0 |
Private=0 |
DLL=0 |
Locale=1031 |
CodePage=1252 |
[Version Info Keys] |
CompanyName=Daniel Marschall Computersoftware |
FileDescription=Ein Verschlüsselungsprogramm... |
FileVersion=3.0.0.0 |
InternalName=(De)Coder V3.0 VLL |
LegalCopyright=(C)Copyright 2001-2002 Daniel Marschall. |
LegalTrademarks=Keine |
OriginalFilename=CODER.EXE |
ProductName=(De)Coder V3.0 |
ProductVersion=3.0.0.0 |
Homepage=http://www.d-m-home.de |
[HistoryLists\hlUnitAliases] |
Count=1 |
Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; |
/trunk/History/Decoder30/Coder.dpr |
---|
0,0 → 1,17 |
program Coder; |
{$Description '(De)Coder V3.0 VLL'} |
uses |
Forms, |
Unit1 in 'Unit1.pas' {Form1}; |
{$R *.RES} |
begin |
Application.Initialize; |
Application.Title := '(De)Coder V3.0'; |
Application.CreateForm(TForm1, Form1); |
Application.Run; |
end. |
/trunk/History/Decoder30/Coder.dproj |
---|
0,0 → 1,142 |
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
<PropertyGroup> |
<ProjectGuid>{D199AF92-8ACF-41D4-82FA-020951634EEF}</ProjectGuid> |
<MainSource>Coder.dpr</MainSource> |
<Base>True</Base> |
<Config Condition="'$(Config)'==''">Debug</Config> |
<TargetedPlatforms>1</TargetedPlatforms> |
<AppType>Application</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="('$(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)'!=''"> |
<DCC_E>false</DCC_E> |
<DCC_F>false</DCC_F> |
<DCC_K>false</DCC_K> |
<DCC_N>true</DCC_N> |
<DCC_S>false</DCC_S> |
<DCC_ImageBase>00400000</DCC_ImageBase> |
<DCC_Alignment>1</DCC_Alignment> |
<DCC_AssertionsAtRuntime>false</DCC_AssertionsAtRuntime> |
<DCC_DebugInformation>0</DCC_DebugInformation> |
<DCC_WriteableConstants>true</DCC_WriteableConstants> |
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols> |
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo> |
<DCC_Description>(De)Coder V3.0 VLL</DCC_Description> |
<DCC_UsePackage>VCL50;VCLX50;VCLSMP50;VCLDB50;VCLADO50;ibevnt50;VCLBDE50;VCLDBX50;QRPT50;TEEUI50;TEEDB50;TEE50;DSS50;TEEQR50;VCLIB50;VCLMID50;VCLIE50;INETDB50;INET50;NMFAST50;WEBMID50;dclocx50;dclaxserver50;DelphiX_for5;$(DCC_UsePackage)</DCC_UsePackage> |
<SanitizedProjectName>Coder</SanitizedProjectName> |
<DCC_Namespace>Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace)</DCC_Namespace> |
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo> |
<VerInfo_MajorVer>3</VerInfo_MajorVer> |
<VerInfo_Locale>1031</VerInfo_Locale> |
<VerInfo_Keys>CompanyName=Daniel Marschall Computersoftware;FileDescription=Ein Verschlüsselungsprogramm...;FileVersion=3.0.0.0;InternalName=(De)Coder V3.0 VLL;LegalCopyright=(C)Copyright 2001-2002 Daniel Marschall.;LegalTrademarks=Keine;OriginalFilename=CODER.EXE;ProductName=(De)Coder V3.0;ProductVersion=3.0.0.0;Homepage=http://www.d-m-home.de</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> |
<Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File> |
<Icon_MainIcon>Coder_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="'$(Base_Win64)'!=''"> |
<Icon_MainIcon>Coder_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)'!=''"> |
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define> |
</PropertyGroup> |
<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''"> |
<AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode> |
</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)'!=''"> |
<AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode> |
</PropertyGroup> |
<ItemGroup> |
<DelphiCompile Include="$(MainSource)"> |
<MainSource>MainSource</MainSource> |
</DelphiCompile> |
<DCCReference Include="Unit1.pas"> |
<Form>Form1</Form> |
</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> |
<ProjectExtensions> |
<Borland.Personality>Delphi.Personality.12</Borland.Personality> |
<Borland.ProjectType/> |
<BorlandProject> |
<Delphi.Personality> |
<Source> |
<Source Name="MainSource">Coder.dpr</Source> |
</Source> |
<Language> |
<Language Name="ProjectLang">$00000407</Language> |
</Language> |
</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> |
/trunk/History/Decoder30/Coder.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 |
/trunk/History/Decoder30/Coder.identcache |
---|
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 |
/trunk/History/Decoder30/Coder.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 |
/trunk/History/Decoder30/Coder_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 |
/trunk/History/Decoder30/Hilfe.txt |
---|
0,0 → 1,95 |
(De)Coder V3.0 |
============== |
Der (De)Coder verschlüsselt Ihre Daten und kann sie |
anschließend wieder entschlüsseln. Die Bedienung ist |
sehr einfach. Sie können ein Passwort in beliebiger |
Länge eingeben und anschließend alles wieder mit dem |
selben Passwort entschlüsseln. Die Dateien sind von |
keinem Hacker mehr zu lesen bzw. zu benutzen. Sie |
können eine Anwendung verschlüsseln, Texte, Bilder, |
Videos, HTML-Seiten u.s.w. Das gute an dem (De)Coder |
ist, dass das Programm automatisch erkennt, ob die |
Datei eine verschlüsselt ist. Die Verschlüsselungs und |
Entschlüsselungsfunktion ist also zusammengefasst |
worden. |
Bedienung: |
---------- |
Datei öffnen: |
Öffnet eine zu verschlüsselnte Datei. |
Datei schließen: |
Schließt die Datei wieder. |
Beenden: |
Beendet das Programm. |
Verschlüsseln / Entschlüsseln: |
Verschlüsselt die Datei und fordert dazu auf, |
die Zieldatei auszuwählen. Wenn die Datei |
bereits verschlüsselt ist, wird sie wieder |
entschlüsselt. |
Verschlüsselungspasswort: |
Ein Textfeld, indem Sie Ihr geheimes Passwort |
eintragen müssen. |
Geschichte: |
----------- |
Version 1.0: |
Die Dateien werden über ein DOS-Programm |
verschlüsselt. Es werden nur die Buchstaben |
mit anderen ersetzt! |
Version 2.0: |
Es verschlüsselt als Windowsprogramm. |
Version 2.1: |
Es kann eine Zahl von 1 - 255 zum |
verschlüsseln ausgesucht werden. |
Version 2.2: |
Es kann eine Zahl von 1 - 256 zum |
verschlüsseln ausgesucht werden. |
Version 3.0: |
Nun kann auch ein Passwort eingegeben |
werden! |
Systemanforderungen: |
-------------------- |
Pentium 1 Prozessor mit 133 MHz > |
Windows 95 > |
32 MB RAM > |
Probleme: |
--------- |
In dieser Version kann es zu keinen Problemen |
bei der verschlüsselung kommen. |
Folgendes könnte aber die Verschlüsselung |
verhindern: |
* Systemanforderungen nicht erfüllt |
* Nicht genügend Arbeitsspeicher |
* Nicht genügend Festplattenspeicher |
* Kein Passwort eingegeben |
* Geöffnete Datei wurde vor dem |
verschlüsseln gelöscht... |
Der Programmierer: |
------------------ |
Dieses Programm wurde am 30. Januar 2002 von |
Daniel Marschall programmiert. Der Programmierer |
haftet nicht für sein Programm. Das Programm darf |
vervielfältigt werden, solange es unverändert |
bleibt! Das Programm ist Freeware!!! |
Homepage: http://www.d-m-home.de |
E-Mail: daniel.marschall@d-m-home.de |
/trunk/History/Decoder30/Setup/DISK1.ID |
---|
0,0 → 1,0 |
DML |
/trunk/History/Decoder30/Setup/SETUP.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 |
/trunk/History/Decoder30/Setup/SETUP.INI |
---|
0,0 → 1,2 |
[Startup] |
AppName=(De)Coder 3.1 |
/trunk/History/Decoder30/Setup/SETUP.INS |
---|
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 |
/trunk/History/Decoder30/Setup/SETUP.PKG |
---|
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 |
/trunk/History/Decoder30/Setup/Setup.md5 |
---|
0,0 → 1,10 |
340e005400788d45972d355b27ebaa00 *DISK1.ID |
dc38a8baa941f7f7529b2ee1e2714921 *SETUP.EXE |
6f5eaa522c08e9115e757a26009ac078 *SETUP.INI |
5029e0c2fc5e4fb638e467618221063e *SETUP.INS |
9cdd13b0da32a910c91ec99faacb3c18 *SETUP.PKG |
9dfd3bd8793516fa6aca58fb009a9660 *_INST32I.EX_ |
c3200e3277aef0e5d150d797aa62d55f *_ISDEL.EXE |
82c07d65f55a8f59344a0c06300c456b *_SETUP.1 |
7eb41c1410064fb4acd55d179e4b02d2 *_SETUP.DLL |
5c510955df4c83374c571157817b60b6 *_SETUP.LIB |
/trunk/History/Decoder30/Setup/Setup.sfv |
---|
0,0 → 1,11 |
; Generated by ViaThinkSoft |
DISK1.ID 2ED46A83 |
SETUP.EXE E70EA4F7 |
SETUP.INI 6DC3E8A7 |
SETUP.INS 01854A5A |
SETUP.PKG 62FEC022 |
_INST32I.EX_ 0146C919 |
_ISDEL.EXE DB6FF40D |
_SETUP.1 D365159A |
_SETUP.DLL 456DD37A |
_SETUP.LIB 4C985E0A |
/trunk/History/Decoder30/Setup/_INST32I.EX_ |
---|
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 |
/trunk/History/Decoder30/Setup/_ISDEL.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 |
/trunk/History/Decoder30/Setup/_SETUP.1 |
---|
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 |
/trunk/History/Decoder30/Setup/_SETUP.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 |
/trunk/History/Decoder30/Setup/_SETUP.LIB |
---|
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 |
/trunk/History/Decoder30/Unit1.dfm |
---|
0,0 → 1,851 |
object Form1: TForm1 |
Left = 305 |
Top = 137 |
BorderIcons = [biSystemMenu, biMinimize] |
BorderStyle = bsSingle |
ClientHeight = 340 |
ClientWidth = 353 |
Color = clBtnFace |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clWindowText |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
OldCreateOrder = False |
Position = poDesktopCenter |
OnCreate = FormCreate |
PixelsPerInch = 96 |
TextHeight = 13 |
object Image1: TImage |
Left = 0 |
Top = 0 |
Width = 353 |
Height = 321 |
Align = alClient |
Picture.Data = { |
0A544A504547496D616765974C0000FFD8FFE000104A46494600010101006000 |
600000FFDB004300080606070605080707070909080A0C140D0C0B0B0C191213 |
0F141D1A1F1E1D1A1C1C20242E2720222C231C1C2837292C30313434341F2739 |
3D38323C2E333432FFDB0043010909090C0B0C180D0D1832211C213232323232 |
3232323232323232323232323232323232323232323232323232323232323232 |
32323232323232323232323232FFC00011080141016103012200021101031101 |
FFC4001F0000010501010101010100000000000000000102030405060708090A |
0BFFC400B5100002010303020403050504040000017D01020300041105122131 |
410613516107227114328191A1082342B1C11552D1F02433627282090A161718 |
191A25262728292A3435363738393A434445464748494A535455565758595A63 |
6465666768696A737475767778797A838485868788898A92939495969798999A |
A2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6 |
D7D8D9DAE1E2E3E4E5E6E7E8E9EAF1F2F3F4F5F6F7F8F9FAFFC4001F01000301 |
01010101010101010000000000000102030405060708090A0BFFC400B5110002 |
0102040403040705040400010277000102031104052131061241510761711322 |
328108144291A1B1C109233352F0156272D10A162434E125F11718191A262728 |
292A35363738393A434445464748494A535455565758595A636465666768696A |
737475767778797A82838485868788898A92939495969798999AA2A3A4A5A6A7 |
A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE2E3 |
E4E5E6E7E8E9EAF2F3F4F5F6F7F8F9FAFFDA000C03010002110311003F00F9FE |
8A28A000F5E29C8556452EBB94104AE7191E94DCF18A28003D78A28A2801C1CA |
A3280B86C672A09FC0F6A40A58E1412719E28182464E07AD276A002940CE78CF |
1EB476C67E94A3E6273DFBE6801B4019381521423F84E71BB9E38FFF005734B2 |
4AEE91A3B6563055173F74649FE64D3B0111EB52096456C9209C01F3007818C7 |
5FA0A0103099186209240E298173DFEB4009453F90080A32DC74CF7ED4B0426E |
278E20E89BD82EE73855CF73ED4806280580242827A9ED494ACBB58A920E0E32 |
0E45201938140125C471C57324714CB3C6AC42CAA080E3D4038233EF4C048208 |
EA293B52B294241C67A70723F0A0072234AC40C7AF3C0A6558B6C02DCF1C0FAD |
174ED34CCF85E807CAA00E3D8555B4B815F1C6697A9001F61522C6A55C3C8A8C |
172A083F31C818F6EFD7D2936E015E091CF03A52B011D07AD2B020F3D69F1C8D |
04E93478CA38652464641CF434808E83D6AC5EDCCD7B792DDCE14493B190ED40 |
AA493CE00E319AAF40051451400FF30F9023CF1BB711B47A7AF5FC299451400E |
DDFBB298182739C73F9D260ED2DC601C75A4A3AD0028C67E6240C7619A4A28A0 |
0283D78A28CF18A0072155914BAEE50412B9C647A534F5E28A2800A7072A8CA0 |
2E1B19CA827F03DA9B4A3048C9C0F5A000296385049C678A4A3B52F6C67E9400 |
9453BCC7FEF37E7450037BD14E9183C8CCA8114924282485F6E79A6F6A00528C |
103907692403EB8A4A5C0DA0E4673D3D292801EAE3C968F62925836E3D4601E0 |
7D73FA0AB10DA2CB697136F25A28F7E003D77AAE0FE049FCAA1B789259763C81 |
1704EE20E077EC3F0AED7C3BA568F776D7A64BC8898A20254489D90C7B9373EE |
2BF274619C139230A4038B8C6E0712647589A12176EEDC7E519C8E3AF5C7B74A |
8EB4350B62B752B49730B329C1548DC631818C151D3FF653ED9A53446195A366 |
462A704A3061F811C1A96AC03477CFA53831504E474C522856382C17BE4D3CC4 |
CB6E93975C3B32050E0B0C05CE47503E6E0F7C1F43400A0638DAD8CE369E3269 |
1B685C7CC5777A7F9E6839C2E3A0CE07A639A6B11B157B81EB4C09170D3ECF31 |
40621771071E992473EFC526D538241C13C007AF6A42C43EEDBF99F6A56998E4 |
10381DF9A003CB0C011C0CF7E3B6680A0C7D79C1C807FCFA53D5728060EEE7DB |
B76FCE90A050DF37393C11D7F1A7610DDA4A8CA84207039193EBFE7D2A3E5403 |
CE3F23563CB1BC020718E7B9A31F3E180DD8E077EF4728C81503311CF1E9CFE3 |
4ECF9843ED55DA0280BC64814F2AA1B0DF30E9C1E9CD3E24C12760F4C37A7E1D |
E8511134B2ACB696FF00B98E268232BB917E693249CB73DB381EC07D6AB450B4 |
B911AB3950490BE9824FE82AF40507985C02361182393C8E9E87DEAB796C9971 |
B973C8C0E48E47F88AA7102B31DB868F851DFD4D3DF2DB99828C92481EB9EDE9 |
49B8B138033D460672690643E48249E4EDFE95031873B403DFDF348D82C4AA90 |
A4F009CE3F1A73EE5628CB8607041ED4C3C9C9A4C028A28A40490426E2E22855 |
911A47081A470AA3271924F007B9A632ED62A483838C83914878A2800A28A280 |
0A294924F349400F531F94E195CC848DA436001DF231CF6EE299DE8A748C1E46 |
65408A492141242FB73CD003694A3040E41DA4900FAE293B52E06D072339E9E9 |
40094F0E3C968F62925836E3D4601E07D73FA0A654B6F124B2EC79022E09DC73 |
81DFB0FC29A02686D565B4B89B79DD147BF001EBBD5707F024FE550191D62684 |
85DBBB71F9467238EBD71EDD2BB6F0EE95A3DDDB5E992F222628809512276431 |
EE4DCFB8AFC9D186704E48C2900E395D42D8ADD4AD25CC2CCA705523718C6063 |
05474FFD94FB669C6C8467D28EF9F4A74D1186568D9918A9C128C187E0470691 |
42B120B05EF935031B4514530178DA783BB3C1CD2EC7F2FCCDADB33B77638CFA |
669B45200A29C85448A5C65723231DBF3146D0CE154F5C0F9B039A0072B01217 |
D89B7390A738FA56C41792DA19E598007ECEA628890001B93A0249195C9E39EF |
D2B34ADC190DAA9123C8C1B0064BB63239EFD78EB9CF1D69ADB15655909DE406 |
4DAB8049C1F6C0C67F4ED569D8049248E5123BAB19589390C154648FE103FDEE |
98EA3A63982A5405559CAB0888285B0704E32075F5C1A8AA580538F076AB6E04 |
0E9FCA9B45201D1C8F13168DD90904654E3823047E553D95A4FA85E416B6CA5A |
6958246A01FBC4F03F5AAD5346EC855C1030DC0079C8FD69A027D46C2E34DBD9 |
2CEE50ADC40C639177676B7231C1C7E54D8E35C1523383914C0E6E2469267667 |
272CC7924F5C926A62A15B0AC7683CFA63F1AB4BA8874D128976C526F41FC457 |
00F0338CF38EBFE03A54241550791CF2491CFE753703AF6E7269BB0B6483818C |
63D3E9F97F2AA680466CC618025B90C3A0C7AFF9F4A4DA0B739CF5E4F434E0AA |
189EA69E400A3E7C3752ACA4718C8FCE8B00D54DA7EFEF00F0474C52F5A32704 |
81CFA5203C6EEE7A0CD3113282DBE4CA8DBF3723827D31D3F0A5994306DCFBBC |
B608B9EBC1EE09C8E3DA9AA23775565C7079EB96E707A8C76FE7CF4A58A4D916 |
D8DD9549DAF8C7B8E077E334C0ADF2A2838C81C823FCFF009C5321792D6549D7 |
63488C1C074571907B820823D8F1D69C4071D0E48E0E29AFD029DA08EDEBF97E |
359B18CB8B896EE779E790BCAEC599D8E598924924F5273DCD434F65218F1DBB |
D348C77A8631297712A1727683903B525396474575562038DAC01EA320E0FE20 |
7E5480748268D562943A81F3AA36463701C81EE00E7E952C76334BA7CD7A0C7E |
4C2EB1B66401B2D9C617393D0F4A8659A59DF7CD23C8FB55773B1270A00039EC |
00007B0A6F634C0722AB326F902A96C31C13B47AFF009F4A470AB23046DCA090 |
1B18C8F5A69E69401B49DC011DBB9A402E38C0C67A9E453683462800A5E369E0 |
EECF0734A1D846501F949048F719C7F334DA0076C7F2FCCDADB33B77638CFA66 |
9B45390A8914B8CAE46463B7E62801B522B0121936215CE429CE3E94DDA19C2A |
9EB81F36073560ADC190DAA9123C8C1B0064BB638E7BF5E3AE73C75A680D282F |
25B433CB3000FD9D4C511200037274049232B93C73DFA565492472891DD58CAC |
49C860AA3247F081FEF74C751D31CAB6C0B2AC84EF20326D5C024E0FB60609FD |
3B5310155672AC2220A16C1C138C81D7D7069B77022A28A2A4028A28A600064E |
0528C1232703D6928A4014F5188F73464A9380DD39C74F4EE3FF00AD488A18F2 |
70A39278CE3D877FA50EA15C80EAE07F12E707F3A0098CEABFBC400CAC7966CE |
47033C7439E739CE7D053E425A0803294818B6D24739CF5CF7C6467006718ED5 |
0C0C8049E63606D254040496E8073D3AE7F0F5C5246C0703682D9566600800FE |
1C7D453015562675259A38CEEC9C863C7238E3D85353805801B948232463F23D |
7B7EB4CA919F76198213C8DA1718F7E31EBFA7A5000CA82143F3890924E47CA5 |
78C11F8EEFC85091B394408C5E420273807A8FE7FC8D286512158DCA237F130E |
4718C6476E4FD7D29234694151B7E505F9EBD3F33D3FCF3400D6C6F395DA33F7 |
476F6A7001C6EC807201DCDFAD4C8D1EEF25E2DC48080C7D55B3D473F367FAF1 |
8A42A88A0EDF93AE4360B76C8CFB83C63B9FC1808990C4065C7407FC2AC00FE4 |
897690858A86C12338CE33FAD56917ECF2C91654904838CF638C7F9F5AB31452 |
3A7CA8410A5BEEF00633FC883F8D5C443911649147439EA064D48F1C5260C68C |
4229CFA93EBDF03047F8E692094464E172E0EE5E327823F4C0FF003CD3989584 |
332FCC59943818078E4020E0F5E98F4EDC5588258CC236B4479E43B2907FCF41 |
DEAB91D3BE2AC6DDD108D594FCBBD8804608CFF4C7E5ED9A644FE5E49F9B2369 |
520608FF00F581D3F4A004450222DB380C0123A9079EA7A74F4EE69840762480 |
07DE19E31F9D4ACCA636C6DE70318208EFF4233EB9E949BC0418C87C609E9C63 |
1DBD7BFF00F5E8B00CDACC5063248C617BF3EDDE95F6F961411C12A186471F97 |
E5DEA458893B523977B9D88807507B7BF0718C77A6B295667552AAAE07CE0647 |
5E08FC295864633B02E7201E39E83D3F3A85DF0C597E5753C1CE39EC7FCFBD58 |
91B73EF24F41907FA540E0962738207047149811CF3CD732C971348F2C923169 |
1E4392C49CE4FA93EB4C50A4392181C7CB8F5EF9F6C67F4A7B00C06080C4E7FC |
FE9F9D0A570C020932A31DB6F2391EFC63BF5359D864246091E9495318253009 |
42929B82B13D98E71F9E0FE54D9209628E279236559937C648FBCBB8AE47E2A4 |
7E069340474A719E3D29314E50BB5B7EE076FCB8E99CF7FC334806D2AF5E4F14 |
F450F8CBE0F4E4718EE7F0E3B52C4371236E495C2E5B0324E33FAD3B00145321 |
48F7B93C26460E78EDCFBFE94D58F700772A8CF24B74E9DBAF7FF38A9E28F939 |
05D4283C9DA30481D49E3AF5E688E251890302A707D42924819F5E474C1C8CD3 |
B010BC5B013BD1B070429FF39EFD3D3E998C0C9C0A98E599D0B7CE4FCCC581DC |
D9FEF761CFBF4FCA1A4028C1232703D6928A722863C9C28E49E338F61DFE9480 |
55184DCD192A4E0374E71D3D3B8FFEB54A6755FDE2006563CB36723819E3A1CF |
39CE73E82A1750AE4075703F897383F9D3E168C093CC6C0DA4A808092D8C01CF |
4EB9FC3D714C09A425A0803294818B6D24739CF5CF538C8CE00CE31DAA155899 |
C12CD1C6777390C78E471C7B0A48D80E06D05B2ACCC01001FC38FA8A8E801E9C |
02C00DCA4119231F91EBDBF5A565410A1F9C48492723E52BC608FC777E42867D |
D866084F23685C63DF8C7AFE9E94A194485637288DFC4C391C63191DB93F5F4A |
008A8A28A4014514E8CA8910B0CA861918CF1F9D000CFB820DAA368C640C679C |
F3F9D3683D78A2800A723BC6E1D19958742A70691599183292181C823B1A0B12 |
00249006067B5002514E8CA890164DEBDD738CD3CB2A42D13438943E77924100 |
6415C74FFF0055004552ABEE475DABB881F31C0C003A7D4F1EFC7BD454E2548C |
E30780001C7B9EB400FC044CED1200F82D838FA678EBCFBF1F5A923D91AE2655 |
6451BB03866DC0631C76EBE9F98AAD564C8ED66A81B862776E039DA0630DE98C |
7CB9EC3DA9A01E110AED630A04C7CC8492C71CE39E4FE991C119E6796770807C |
A5DB2CC4A8E4124E481C6707F418EB551181793CA50A8401863DB23F3271522B |
33ED40B975DCA36E1B3FE3F5F71E956988996460E1C9CB15DC0B8CEFFCF83DE8 |
72B92A54ABEEE99C607A63AD44CD24AC10B123809E61C1C76FA7041A038DC431 |
195F41FE7FC9AAB816AD6259E5C64A606EDC1B183D771F4031F9F719A743209E |
E372C209FF009670A0C839C9C007F018F7F5AA871C82A08EE067FCFBD396404A |
C60640208DC0658FA13C6075FF003CD3B8165962591FCBDAD876C679F979E3DF |
A751D3D7D184089B648460361801C8E99E4D24171E594C231270A0B38CAB0232 |
791C0C13F89CF6A818A2BAAB286C1DA5947079EC7BFD4D1702D988899C977055 |
44BB99704E7073C9F7CFBD35098C6E00B01C9C8CA9E9C11ED9FD68204F27EEA0 |
0A5CE701C601CF03D8F07EB4C00C526495CAE08C3673F88A6211B7BCA41F99C9 |
C71CE4FE1D6966F2C48071302A3049E9C633EBC7F850DC80045B0A0C3607E1F8 |
7F89A0B90C4BA9CBAE0E7AF23AF39FAD00412C6CA7AA83C9C8607DBAD451C61A |
5F2E47D8BB8658FDD5F73FFD6ABF2CA92EE202ED32EE2A0638FA927DFDF9EF54 |
9D50BAB9E147DE2064E2A24BA8CEEF4DF0DE9B71E1F9755499679E39E322D564 |
D918625C2E4C8B9656F948032701B2464570B3246667C10B11525446A5803838 |
1F363F3F73F4AB136A090B4D1C1BE689AE1668A4B8552FB577050DC1EA181201 |
C7D78C53014AA36D704A9DCC587273C11C71DBFC79E149A60440156E70083EB4 |
E2849091FCC3923819C7BFE03F0E6955B0AF98D5F72E0120FCBDF23B7AFEB484 |
7EF0ED248C8C64727F9D40C9A340638E40CA187187518CE7EBEFDF0294024A43 |
1BA9DA7272000719C1E78239EFEB50024657B9C7CDCE401FE454AA9B80320D8B |
1FCA768C163C91CF4CFBFA0EF4C099D25862F3562C02CBB25233BBAF6239CE33 |
CF6FAD400BA44FF36C756524124302320607E27E98A5370DE4EC8F28371380E7 |
033FFD6E3D7AD4734AD3499609CF4DA3000F4FA7D7A50D80F0C1E109FBA40BC6 |
F2064E48F419ED9CFD477C557A538CFCA0818EE734948029CCFB820DAA368C64 |
0C679CF3F9D1195122161950C32319E3F3A69EBC5200A28A5566460CA4860720 |
8EC680151DE370E8CCAC3A153834DA52C480092401819ED4B1951202C9BD7BAE |
719A006D152965485A26871287CEF248200C82B8E9FF00EAA8A800A28A298051 |
452962502F180491C52000010496008E80F7A58D955F2E9BD7B8CE2902920900 |
90064E3B5250014EC282C3EF7A15E9F5E9E94DED4500296240049200C0CF6A19 |
8B316624B13924F534945001455DD2E2D3E6BD55D52E66B7B5DADB9E18F7B670 |
718191DF154D8838C0031DFD6980952C6088A571222E0052A7AB03E83F0CFE55 |
66FF004C6B0B7B299AE6DA61770F9C16193718F9236B8ECDC74AA228D80B16D3 |
A44CE240E51D48211829FCF078F6A159BCCEB81EBFAD40A7073D7DAAC4B1496B |
72F14C9B654628D8C1C30EBD38A6980BE62B49BB6AAE4EE2070B83FE1D2853BC |
827EF0EE33FCB14D0D8192A5933CE3FCFF004A4DFD4EEE18F4F5AAB889136E79 |
75032396E40F7A596425C1DE4EC552087C918F4CF4FC28F955BE70C06E241C06 |
1EBD3FC7AFE150A33C4C1D77095705191B041CF07FC286C0733808B9D8C1876C |
FC8727F0E9E99EA3F077CD23B1707764F39E739EBFAD47896799CFCD33B65DDB |
3963C124FE84934D392017C10074EF8A9B8CB0A4ABB29760A7B28CF6E0E3F4FC |
6A6699259CC8FCEF0A5B24924E064E4E7927B9F5ED55C157DC7208E30064F5C7 |
1CFA64F5F4EB5240CC126C3A02539CE327B707F1ED569889959644DAA855C924 |
2E339F41CF3EBC77C0A74CA88877B3128C13181900673F971FCBB53119432860 |
51D4F2A4EDF6C93D4723F53D291635775DAC55890BB719CFBF4FAF1FCEA80946 |
E98870A4498063D87A81ED9CFA0CFB77C547BA1100C97330C96C8C051DBEBDF3 |
F852193073F3E7950C4F6C6053DB91B77165552A4603639CF5E98C9C67FC7140 |
14E4879C8418F41DCD35DD44602AAA1C6D2149C9E49C9CF7E40FC2A7995BCB1B |
5D3E61CFB738E7F9FE3EB51CEE19CB7078E830147E02A1A0206F9813D4F7E681 |
8C9E4E31D40F6E296439909C631D467BD21DB8F948191CF5A8192094C9216739 |
07058E338FA0FE949B43BE5223B99B2107E98F5FCA9B90139248ECB406014E7E |
F7FBDDFF00CF14C069C10318A4E3D2819278F4FF00EBD2548051451400528008 |
24B0047407BD058940BC6012471405241201200C9C76A0058D955F2E9BD7B8CE |
29B451DA801D850587DEF42BD3EBD3D290B1200249006067B5251400ACC598B3 |
12589C927A9A4A2AEE97169F35EAAEA97335BDAED6DCF0C7BDB3838C0C8EF8A0 |
0A5453F09FDE6FFBE7FF00AF453B00CA5182464E07AD252F1B7DF34800310857 |
8C1209E28C1A4A7177708198B0418504F00649C0FC49FCE801B452B80AECA183 |
007008EF49400514529C60601CE39C9EB40094514A411D46280151DE3759118A |
BA9CAB29C1047714A177233725811FD7348CCCEC0B1C92319273ED56AFA1B5B7 |
B955B2B9371118A325CA6DF9CA82EB83D831233DF19EF4C0AE89D0839E71D2A4 |
0AC5B6C40B1CF039E3D06290290A54E063FBBCD4B1C2C54BAEE2A1496DB9C273 |
8C9CF4EDF98AA484319B70E3871DBBE69114B1250E3D81E83F2F7A90332B4918 |
94918DAC41C0619CFF0041F955D8DECA0F395765D86468E3277218CFCA43E01C |
13F7860E7B9F4AA4AE0558ADE37DAB33153824FCE000303BFE7C7B8C02783005 |
C2F983EEE30C76F00E7A7071C8A98A761C63A13FE7E9524C84245B0280DF7558 |
8EC7D73F9E40E9C71472815C893CA69A42FB99F0A719527AB739EA3238FF006B |
F376F7478E594B3145DC81BE65C6490003C632791EE6ACCF07D9677F2DD02452 |
E539CEE5CE4306C00C0607E7C0EB8AF044B24DB26DD1B020161C151C0C638E7E |
B8E86958061E0798C771E0677F2063A1EFC640FC3BD483608C33AA96C70A467A |
F4C63BFB1C7EB524D686DD16369BF784091500C8008EBF5E3F1E08C8C1A88856 |
00121492724E7F3F6C629A403CEF8E41D032F4611E0E01233EB9EBCF5FC6945C |
9480C233B01DC0150474C120F6FF00F57A0A43B163D9E8370EBDFB7B1E9F975E |
82872C572A172482DC60E4F5C0F4CFF914C0511F3B18633962C4E38E3AFAF1E9 |
EBDEA468A44897A329CB06073D81391DB14BBF3018C48A5700F3918CE3A7D3A6 |
7AE0FA746B930DCAB19177F52CC77007B861CF7E08239A60424E54E081F4C9A8 |
E48962C012A480A0625548009009539C1C82707B647191CD582E49C96FBABB40 |
DA0FF9FF00EBE7AD453200FB15839EB93D0F152D0103232B0CED191C0183FA7E |
1485519108383B7E6C7D4FD3DA9E41287CC2DB973D08EF4C752A428660A73B49 |
18C8CE33FA54318D18078C93CE0707E94CED4E6254E01C6707839F7A43924E7A |
F7A403B7ED3FBB2CA31EBED83FD6994A09008E3918E4525200A28A2801460919 |
381EB406210AF182413C51C6DF7CD25002E0D2538BBB840CC5820C282780324E |
07E24FE748E02BB2860C01C023BD00251451400514A718180738E727AD250014 |
5145002B29562AC08607041EA292A71039848D8DBC49B7040073C0C0EE4F4E3B |
7E349F3160DF2A803CC0590004FA01DC64631D3E9CD3B010D14F8C02D9383819 |
00F438EC791DB34A03444654E5949055BA8231FF00EBFC452023A50A4A16C8C0 |
20633CD0CBB40E464F51E952342CA59763160C40201C71D78C7D3E9401151DE9 |
4B1200249006067B53E105B7A0DB9653CB30038E7BFD3FCF4A00601904FE94E5 |
0A77124A71F2F1C1A4EABD401E94E5C7041231D4FF009FF3C5340211D47A75E3 |
9C71526D62005C67D41FC69A8FD570183763DB9F6A9155CB6E009E3AF1FE7B53 |
405AB5B70D70AC51D95833110A6F60AA09276820E00193D3804F6A89F280F3D1 |
41C33609E871EFDBF2CFBD69E92F66AD3A5CFDA4CA6178EDD6DD17E690A301BF |
8C907E55DA393BCB6E18C1A17B79717F7735E4CEAD24AC59DF9E4F73DEAC4564 |
7F98ABE187AB76E7AFB54E212660BD1B3B4EE3B71F89200FC695DE031B461094 |
590BC6CD8DDB7D1B8E7B7EBEB4D322A6241B860FCA4F51F9535E6048636500B0 |
C2162A1FA8C8C6791D7A8FCE8590C6AE548DD8C60AE73F874FCFFF00AE356EAF |
6F6469E69E7B7F3A550D88A289548740588DA000C4100E39F5E49AC72A1860F2 |
2A8458BA311F2DEDA790E514C819000B211860B83CAF1D703AE3DCD400A7627D |
F1FE7DEA799EDC943017C145DC180E1B1CF42723209CF1501604654753EBD6A4 |
6287658C80AAC0E3AA0278F43D57FF00AD48725005076E38C1E83DA903700E09 |
6033C03834F0C0647CB9033D680248C21E6543B738C8FE47D738E991DE91C22B |
6CFE0E483804B7E5DB8F7A6AE390D9C30C70071C8CD2B05563185552876928DB |
8123BE72453004381F2BB6471D3AF1FE7F3A72904303F2F1D7FBDE83F3A124DA |
E59977E41187E40E303F2EA293270464E0F38A6200A5C600FBB962738E3DE936 |
891860162E48751C0209E831F9FD7B52E78038E3DA9AC7785DEA80F03EB498C4 |
C7557439C0080640518C9FA6783F89F6A86EB385263DA727258E598F1927BFF9 |
FAD5A690247248373FCC074C023DC0FA74FAD453C972D0B031048870C8BC8539 |
EA475073EBFCAA656B01576B4859D9F2792C4E4FE24FB938A578581E57661724 |
6D6E3071CFD48FA64F6A91A34E7648A17602C5D81C6790077F40703AE7B52299 |
85C2808BE667850029C839C71820E47B1EC2B3190282CC146324E3938A56777C |
6F666DA368C9CE07A54B388966014295D80FEED8919233DFD09C63DBF1A82900 |
52B29562AC08607041EA292A71039871B1B78936E0800E78181DC9E9C76FC680 |
20A2A6F98B06F95401E602C80027D00EE32318E9F4E6991805B270703201E871 |
D8F23B668019454803444654E5949055BA8231FF00EBFC453197681C8C9EA3D2 |
8000A4A16C8C020633CD254AD0B2965D8C5831008071C75E31F4FA5465890012 |
4803033DA8013BD281904FE94F8416DE836E594F2CC00E39EFF4FF003D29BD57 |
A803D2800DCBFDC5FD7FC68A6D14C09DB73C433329007209C741C7B93CE3A7E3 |
8E8FFB3EE5605E3DF8054F0A197A641240F5CF7C8FAE212513217961C6EEA0F5 |
E808FA7F9E8A5155A4CEE655254118E4F6C9E47A9EFD3F1A00B6E9E6416EAD7A |
AF94DBB580FDD73D0927FDDE476CFA1155DCA085654880F30B2B291F28C63A72 |
4E79CE7F0F5A0C8F8842FCAC470EC30739E0863E9803B6307DF28B123CD1C64B |
20638C8425883C8247BE474FFF005B011D83CA8C55155902F2720606DC9C73DB |
3FE34D60AA806C6E46558F19FF0011C11FE714D0DF2152AA7D0E391D3FC29D28 |
50576BAB9C73B5700638FE401FC6900CC1DA5B8C038EB49DAAE985A7B196E049 |
6CA2194208B79DE77671B41EAA307E99E7A8AA8C102A6D662C47CC0AE3073DB9 |
E78C7A50D000C8E4671EBD297839047BF1E9481CEDD849DB9CE3B0F538F5A94A |
23CECA1891BB8665C719EAC0138FA0CD08053B4804ECC023A2E38F4F7A5DF202 |
0283B1781CE40E79A4036E4160D86C6ECF1DF9CD280BB76827701ED5421CB961 |
BBE5DABC1008CFBE29F10D9212C88871B90B29E4FA7423FF00D5510550983920 |
8E303193DB38EA295519E578D158B052C769CF00673CFA0E7F0A605DB5B586FE |
5487CC304800DCBB4326D009739CE77600217F88920638067D6ECAD6C2F4C567 |
756F7D6EF12C90CB123A80B9C721957E6C03903201246720D502CF657212649E |
DEE23721F7A9DCBB78C60E39C8607355925627E73C7F2A2E80BB185440D244E1 |
3CBCE73DC83B48F6E3DF23350C4D05C4EFE64A605546642C09C91C853819191C |
67A6719C0C91A1AAEB725D5A0B58A08ADAD55DE48E089D9847BC26E192C4ED26 |
356C13C1CE3158F190372B9DA3A938E73D87AFD686FA012663C3170CC48F9769 |
EBC8EB4A572C543E723385F7EBF8D40A006C039CF7F6AB211400D9521D7206E0 |
71CE39F4E9DF9A4B5014281F74E4FD474EF4DE8C086EC3E5A95EE8359C711822 |
591339940259C123AE4E38E46401D4F278A698D122539FDE36195783C0CF5E72 |
0E474C73F4AA0028773A952A77739EBC628030701B81DA9D2CCF70DBE69DA47D |
8B18727380A30A33EC001F8518C1240193FAD300C8EB9E0F4A7C723C52092376 |
475390CA7047E34D1F36D0ACB96E9CF4FAD24DFB999E0954ABA9DACA477E98A7 |
71133C2D104126D53200E33D541CE323DFAFD307BD55790070A73CFBE05390FC |
A00E0FA1ED514E46F652E781C63919F4FCBBF34A4F4191B4BB94FC830401EC0F |
AFF9FF00F52C5218D1C1546438539C123FDDCF4E9D7FFAD509A76F7DE1F736E1 |
8C1CF231D2B2B8C91A4DC91166F30AF04367803A0EBD3E98EFED4E6895EE9E3D |
C1768DAB8420B91C018F53FE350B3BBEDDECCDB46D1939C0F4A7EF081A3C2B2E |
30580E4F5C1C9191F8638A0059564B7630B7C8F8C48809CE73D1BDFA71FD7350 |
D48EA4BEC122B851C1C9031D78CE3DE9A586085180719CE09CFD68011B1B8ED0 |
42E7804E6A66DCF10CCCA401C8271D071EE4F38E9F8E3A42CC598B312589C927 |
A9A7928990BCB0E377507AF4047D3FCF4009BECFB958178F7E0153C2865E9904 |
903D73DF23EB899D3CC82DD5AF55F29B76B01FBAE7A124FF00BBC8ED9F422AA1 |
4556933B995495046393DB2791EA7BF4FC69E647C4217E5623876183D78218FA |
600ED8C1F7CB00728215952203CC2CACA47CA318E9C939E739FC3D69AEC1E546 |
2A8AAC81793903036E4E39ED9FF1A55891E78E324A0638C8425883C8247BE474 |
FF00F5C41BE42A554FA1C723A7F85201CC15500D8DC8CAB1E33FE23823FCE299 |
83B4B718071D69F2850576BAB9C73B5700638FE401FC6AC985A7B096E0496CA2 |
194208B79DE77671B41EAA307E99E7A8A2C052ED4E191C8CE3D7A50C102A6D66 |
2C47CC0AE3073DB9E78C7A501CECD849DB9CE3B0F538F5A403B3FEDC7FF7CFFF |
005A8AD0DB65FF003F97DFF8049FFC728AA0334ED2A3008207393D69B4529C12 |
48E067A5480AAC36B292D83E87033EA7D7BFE74AC0453108EB2056E180E1B1DF |
0474FA8A651400B9191C7E54E670C8A3600C0F2C3B8C00063F03F9D301C1C8A5 |
7464728E0AB03820F6A0015991832B1561C820E08A140270582F079349450019 |
A9591E155DCA76C8BB972319192323D79069B1140E4B8246D6C63D7071FAE29A |
36F7CF4FD69812AA9C7C8320739240CE39EF4F05F01A30D9C60E0E01FF003CD4 |
4396DC3939CFBD6ACBABDBC9E1A834AFECFB51347334A6E806F35B200C672463 |
8E9C0E3A6492690142044795434AAAB9C977E8BEA4E39A9609228A79DA42598C |
2EA98000248C739ED824F4CF4FAD552D95207DECE49CD68C113DED85D116A19E |
DAD89DD1C7CA8F354962547A311963D0F5C605084678469107CDF2A03C93D067 |
B7E7D3EB4F89961B94708926DC1DAE3E538E79E95248B3471A5BCA582C6CC3CB |
E01539E4919E0F1DFD3DAA2DDF286DC31C6703A71F5A2C326BE36FF6B91ADE07 |
8A3E3F772481994ED19048C77CF18C8E879AAF8221538520658608C8EDCFE59A |
41818CB63A72075FF0C51950772E38E01F7EB9C5201A32ABB81C03D8F434A372 |
8DD961C638A404A7E3D47A8A70081872480D8C0EF400E2FBA32C71BB6F383F85 |
0BE407E373820F1D307B751C8FCA9E6D264B586E5D9238E4DFE5B16C96DBD471 |
9C75EF8EB4C826FB34E240AAC0065F9D030E78FA679A2E03E49CCAE656C64E00 |
08A14703D071E9FAD3963794A2EE033C12DC01EF55B71542B9F94E0950783FE7 |
FAD6869C649AE51638E462837BF94BC8451F3138E7000393F5AA4EFB88867B43 |
0420F9CA5CF58FBAFE3D077E2A07085549DD9C631E95A372D085B9528667720C |
7207C05EE7231CFE98ACD6E09C051C672783449580154EDDC1B9C939C6781519 |
CF43DA972061B1939CF348462A18C4A28CD14805033DE928A33400F58D9B0307 |
2C3E5183F3738E3FCF6A029751CA61463A807B9FC7FF00D43D2911B6B83F363A |
1DA7048EE3348318390738E307A5002538ED2A3008207393D69B450014E56015 |
9496C1F43819F53EBDFF003A4382491C0CF4A4A007B0114C423AC815B860386C |
77C11D3EA29B9191C7E5494038391400F670C8A3600C0F2C3B8C00063F03F9D3 |
55991832B1561C820E08A1D191CA382AC0E083DA92801540270582F0793499A2 |
9F11457CB8246D6C63D7071FAE28017CB5FEF7F2FF001A2A3A29801EB45398B3 |
00CC49EC093E9DA9091B40C0CF73FE7FCF348073AAAAA1122B16192003F29CF4 |
39FCF8F5A675A5762EE588032738030292800A294E3B53E18BCE9563DE899FE2 |
73803F1A008E83C9C9A28A003A5598916EA68A28D12362B825E50AAC4739258E |
0556A3A5004BB890B217C9CE081D40FF0039A6657078E7D734831DF3F514719C |
FE5DE9DC09A13189C19959D318C29C1271C6383DEBB2F0FCFA535BEB26FAC2FC |
91A7A7926270F284F323C83F2E1415E03F18563C36571C3E7D063E957566860B |
794238779E10388F1B183A9C7E4A7919EBF95458896FA4822692D145C88E177D |
B1BCF95563B4121760C676F3D0F0B9FBB83477961B5470BCF04E291E57964DEE |
CCCD80325BB01803F2029198163DC76F5A5718BB9412C01CFE78A67A9079EFCD |
04FB51934804A539C019E9DA928A404B0C12DC1648519C852EC07600726A3605 |
58AF1C7070722928A005DC718F5F6A556C1CF23DC5369FBDB3D40C8DBC0038A6 |
03DE77662C7E563D80C0FCA9ACE1972477E7DEAC8D3AE0E907537D82D849E429 |
DE0B17C671B739C632738C718AA79E3A73EB436C0914073FBC7C0543838CF6E0 |
7E7DE9730C9E5AED10ED4219C65B71E4838EDD871511231D29763F97E66D6D99 |
DBBB1C67D33400DA788A431197637961B6EFC1C6719C67D78A653CB8F2826C50 |
43125B9C9E9C7A71FD4D20194A49200E3818E0525140054D05B9B832012449B1 |
0BFEF1C2E71D867A9F6A868A00283D69C8864758D465D98051EB43166019893D |
8127D3B500369EEAAAA8448AC5864800FCA73D0E7F3E3D69A48DA06067B9FF00 |
3FE79A1D8BB96200C9CE00C0A004EB4514A71DA80128A9218BCE9563DE899FE2 |
73803F1A8E8003C9C9A3A5145001451453B8051451DB348096D6349AEA289CB0 |
5760A4AF5E6AE6B1A5AE9374B6FF006959E4DA198A00540232304120F07EA0E4 |
1C115411DA3915D0E194820FBD3EE2E66BB97CD9DF7BE00CE00E0703A53D2C04 |
6319F981231D8E285C6E1B890B9E4819A080188DC081DC77A4A4014A4E6928A0 |
028AB32DDB49616F6A766D859D862300FCD8EAC396E9DFA76EB55A802C5B35BE |
D956E9A7DA236310888C799C6339EDEB8E6ABD2B6DCFCA08181D7D7BD2500145 |
14E75D8C06E56E01CA9CF519A0045567385524F5C014678C629C1F6AAEC055C1 |
39707A823A7F3FCE915432B92EAA5464039CB73D071F8F3E9400842ED5C31248 |
E463A5251450014A0807900F1DE929C8159B0CC147A919A006D1453A490CAE5D |
82827AED000FC8500368A9AE2EA5BA72F2ECDC428CAC6ABC2AED1D00EDD7D7A9 |
E6A1A009ED16D5A722F1E548B639CC4A18EEDA768E7B6EC67DA9C6EC1D396CFE |
CD6E0894C9E7ED3E69E31B739FBBDF18EA6ABF1B4727767918A4A6014A401D18 |
1E9D2928A402EE2542E4ED072076A060119191E9494AA40392A187A5002514AA |
4060480C01E87BD21EB400529C64E3A76CD0719E062928017181920E0F4A4A28 |
A002A5B58D26BA8A272C15D8292BD79A8BB669C8ED1C8AE870CA4107DE802FEB |
1A5AE9374B6FF6959E4DA198A00540232304120F07EA0E41C1159E319F981231 |
D8E2A4B8B99AEE5F3677DEF8037600E0703A546400C46E040EE3BD37BE800B8D |
C3712173C903349451480527349455996EDA4B0B7B53B36C2CEC311807E6C756 |
1CB74EFD3B75A00AD45145001452B6371DA085CF009CD04000720E476ED40094 |
538BB32AA92485E00F4A6D003812AA72A0EE18048E9F4A45215B25430C1E0D39 |
A42D1221662149C02DC0CFA0ED4CA0072A6E563B80DA3383DF9C607E74DA28E9 |
400AC0062010C01EA3BD253E28A499F6451BC8F8276A0C9C0E4D3280158966C9 |
C67A7000FE5498E334AA327149400514539519CE00FF00EB5002B6C2A81376FC |
7CD9E99CF18FC314CA7BA98A4C03F461C645329B00EF4F531F94E195CC848DA4 |
36001DF231CF6EE296010176F3DA455D8DB4C6A09DD83B41C91C6719F419EBD2 |
98B8DC3712173C90334804A7091C46D1863B18862B9E0919C1FD4FE74DA2800A |
50AC41214F03278E828562AC19490C0E411D450599B24B13C01C9ED40094A719 |
F941031DCE68032714A23731990236C04296C7009CE067F03F95002062A180C7 |
CC3078A4A2948F98E00FC280128A53EB8E2860558A9C641C707340094A401D08 |
3F4A56777C6F666DA368C9CE07A5496D6B35DCC91428497754CF6058E064F6E6 |
802134E0EEA8C81982B63700783F5A546F2A50C5558A9CED61907EB4D032719C |
7D680018079E7DBD6929C58B1007A600156AF74F96C62B7333207994BF943EFA |
0EDBBEBD45302A0C67E6048C7638A4A518CFCC4818EC334948028A560558A9C6 |
41C70734AEDBDCB10067B28C0A006D2AB6D0C3683918E7B5253E5732C85C9C92 |
067E50BDBD0500354856C950C307834A5088D5F1F2B1201F718CFF00314DA280 |
1402C7031D33C9C5251DA8A0028A28A00283D69F23AB84DB1AA6D5C12A4FCC7D |
4E4F5FA532800A28C5140051454B6D14735CC71CD3AC11B300D2BA92107A9001 |
27F0140115145140162D2EEEAC65371693BC120053746FB5B0C0823E98CD4038 |
E4F4E6929CBC1CED0DC1183F4EB400814919A936EEC2E7A74E339A60E5474383 |
8039A972CA7E473BB181EA060F1F95524024AB1EEC465F6851C3800E7033FAE7 |
F21525B48F03B00ECBBC6C6C1EA3D0FB74A8A31C05201DDD2A49A2304ED1301E |
629C1D873C8241E47F4A6BB80D9B0EF95048C63A7435081BBA9038EF5A2F3CA9 |
A7C96A98F29E4595959413B802339C640E4F1D3EB8AA7B8C79456C2C980E3E87 |
DFE94496A0440648039268C138E3AD3F6FCDC2F000CE39E69A1770CE73EBED53 |
601F6D1C72DC46934C21899B0D2152DB47AE075A8CA9040F5A90FDC6084107EF |
7033FE7E9ED4E6080ED04673CF1DBF0A760232C5882C72471CFA630290001864 |
F19EB8E2A42A11477E483CF7CD3E344DCACD948C9C3305DC403D4E091D28B010 |
9248DAFB8951800F61FE79FCE943304EB804E704707FA52AB6490DB880395FF3 |
D295390B95EBC039E334009B31C363039C838C8A63039E98C019E29FDB785E3E |
B8C1F6FF003DA98DCF7E9D46318A4C069A518C8CE7AF341E58E280327AE3DE90 |
0639E01E7A56DD9584CBA4CF3C2E37BAA100B6181F302F03BF51CF6FC6B31259 |
57C9CC9B8459DAAE37AA7249E0F18F6EF5D5E99AE5BDAE81AB593ADB491491A6 |
2336FB1DFE7424E4023E5EC0919EFD00AD2084CE425044F202C24218FCD9CEEF |
C6A2C559BA996E65DCB1246A06D508BB475EA476A89D591C875DA48E9D38F5A8 |
68648ACB04B1CB110ECAA18E470ADFD7069CD7CF25CB5D4A0BDC1E4393FC5EA7 |
D6A039C02368C63A75A741E52CEAD3EE310392146777B53B80C28C1031521492 |
01F5C537AD5ABBBD6BC9959D76C4BC2C6A718155E42864631860993B431C903B |
64D260368A28A40145145001454B140D2C33481E3510A86219C02D9207CA0F2C |
79E83B64F6A8A800AB71DF5C41A74D6402082E19646CC6371DB9C61B1903AF4A |
A9450014514500145295200241008C8CF7A4A00334538F4C641C743CD3A1F2BC |
D5F3F7F97DF6633FAD00474638CD2E06DC8CE7B8C700558BAB58EDE2B674BB86 |
73347BD963CE6239236B6475E33C7AD0041E5B88C4854842480D8E0918C8FD47 |
E749B4850D83B49C03DAA586D66B88E79228CB2409E64A47F0AEE0B9FCD80FC6 |
A37478C80EACA700E08C704641FC4106801B45145004F6D0CF732EC823323846 |
7200CFCAAA4B1FA000D34025B0BC30E00CF4F6A582E66B59525B69648DD183AB |
23105581E0F1D08A5C701CB64AF3826A90006604019DBD31EFE9C7F3AB11C395 |
F302F991AE371278FF003D69AA411D00008F947383FE73568A793B01DC8DB738 |
3C10C33839206013DB9AD1210971209672E18B640E4FD07D2AB3AB17DCD86FEF |
718FD054EDB55B3149B948E1871F51FCEA3031C76A6D5C4401327E61B78031DA |
9CA773920F0393E9DEA431A16C92C3FDDEE699B719DAA01EA0F22A6D618D2842 |
371C019E47F9FF002690A29E39E339DDD29E1BE4C63E7272C41EDDBDFBFF002A |
6AA654671C1E4E79FE9458049321491D412370A8FCD7E4E78EBCD5C85635DDE6 |
976F94ED6539C371D47A718EBC75E7A18654070300003E82934F7021C31DDC06 |
F5FAD341CA60000E476CE6B4744D21B5BBE166971040EEACFBE6708A3682719F |
5E3FFAF59F22794ECBEF8EA0D4DBA8C59236859E390157562AC8C30411EBEF43 |
448B6F1CBE682ECCC0C583B9400B86CE31839207FBA7DB31753522C648CB6543 |
0F9491C1E7FF00D7480746C8B26176B2E7FE5A0C03F5E78A7DAA452DC431CF30 |
8E26900676070833C93804F4E7804D3A2B59DECE69BCA2608986F21412A4838C |
F70091FCBDAA6D260B492676BD95E38C292BB57258E0903A1C648033DB39E718 |
349010CC8219E58D9D182FF146720FB8FF0039E6A6B69DE2692E60F2E1D8235D |
84121F9040C73924AEEF4E0FB0AB565A2CBACDFCE74D81DADA33BB0E7779685B |
00BB00001D32DC01C9E80E2ACEF32DB1B37F396089B7792EC711BF0A4E08F949 |
EFF976A761104CAAB2EC8D8953CE08DA4E7F3156754D5AEF58BB5B9D42633BAC |
491A1070AAABC018038E3278C7249EF55C9036B80393CE5F238FF23F2FC9870C |
0854E3B15F5C73430224254890107611804512BBCB233B9CB31C9CFAF7A7348E |
E1436DC28C0206303FCF7EB4BB925959A53B01EE883F40302A064345078A2900 |
52E4E31DA80327141E7914009454889198A466936BAE36A6DCEEF5E7B5224664 |
952356525C800938009F527A500328ED9A9EF2D65B1BC9AD27DBE6C2E51B6386 |
1907B11C1A648267459A412153F22BB6483B401807D8638EDC50047452962C72 |
C4938C734940051451400A58900124803033DA90F5A9A3891B01A460C4162026 |
7007FF005B27D3A73D70C31FDC0194963EE3D3A93C7FFA8D3B00CA53B7036927 |
8E723183520D8092F19C6DE36B639F5E41F7A8D81C93CF5EF40094A69314A318 |
391DB8A4025079A28A0029718EBC7B50149FD69ED8DC0A2019006339E4019FCF |
AFE340125BDACD73318E089E57C16C2264E00C938F6033EC052A7EF176863CF3 |
CD46B900152493C6454D1B1DC176F6E7DAAE221E0118251B606C120FF5ED9A95 |
983040E7249FBE49F979EFF8F3C7AD30A6E5031955078038C67BD394831843C0 |
2493C019F42493FF00EAAD00591D4993CB8C2A96CAE70481E9918FE43A545904 |
6E4C13D334F219158312A770CA9EBFE7B7E34B8314A46D076FCB8238FCA80185 |
B9C0C13F5A77CA53E4DCC47396C00476FC7AD3E40764609CE573CF27DBF403FC |
9A8F695E18609E68018421273E9CFF009FC694285390DBBD71DBDBFCFAD5901A |
4872DB42AE76E085C903D3BF51DB3C0A7045473018816660301B054FA679EE7F |
4E68B0157209EC71E879A408A33BC13D48239A7B60642E48E71C60D3641B6247 |
2C02B311D41231EC391D78A1815DCEC71B060F1D7B7E3519395E1F20E7E5C74A |
91B97DACF8ED803A7FF5A98DB554100316193C118E6B26323AD28E092E678621 |
31C9C22EF7C003B73DAAA5A2A9BA40CC114E79619E2B6ECF4FB6BA491E4D4628 |
4A825212AC65931E800207E27F0355042667CD6A6DE46B7675251B9319C8FCEA |
ED94124D18674BA7855C041106E5BD070466AAFD9D91497460EE76A81C1FC475 |
F4F4EA29A246518562A3041C13CE7FCFE95A2D043A44B9B4966B794C904884A3 |
A4830C83392A46383F80E6A399182226F0C070140E8BD41C91D0E7EBC7414E76 |
9DCB4CD1B156246F55C03C0CFB7719FAD430C58466DE1501F9491F7B91C0FF00 |
23F9548CB9A969F1E9CEB0349BA7DA3CD84A30789B18656C8C641CF4CF6F7033 |
4924AB22AA8519C1391E9D0F5F5A9EE2EA4995797C2A2E096247031C67B7F8E2 |
ABC892AA24AD1C8B0C9908ECBC30079C1EFCD4C9A01BB8B0E4F3D46718E2984E |
7F2A7961B082A77E7AE7B7A629BC6480739E3D2A18C6D39DDA5919D8E5989627 |
1DE9B52F91D409622410B8DDDFEBD3D79E9C7D32808A971D39A704F9B952CAA0 |
336D23A71DFB75A02A6CCEE6DE4E00DA31D3D734C06B00188043007A8EF467A6 |
7A52514800F5A952EAE234891279156273246A18E11CE32C0763F2AF3EC3D2A3 |
E368F5CD250014514F8C2EF52FBB667E6DBD71DF1F8500328A7796DEABFF007D |
0A29D809623BE58D159948236B649653E83EA4FF00F5FBD49E5C60AC8428DF82 |
ABC9520920FB8C631EBDEA37998C2B179A5931BB073C1C63FA0FC294066F2FC9 |
6CB22E7701B76F39EBEB9EFF004FA5301648C34A4315524024E78C9009CE076C |
F4C714C906E70ECBB11B04955FCC81F5CFB55CF26648229246544FBA09387DDB |
8F38EB9078EFC76E38AE8C14F95E69015F2AEA4E075C1F5F4E7A8E78A6D0103E |
31C67AFCC73904D0FB59B28B8180319CE4E3AFE352C813CAF95896620B13818E |
3D31EA7AE7F0A6018CA3B67693850D919F5EE3B0FCAA4088D18A705DDD2B66DA |
2825F2A2FDF0B5965124BB152565DA48519032BC16EA003C1C600C095C0C7500 |
26EEE1873523B6F61B80CB2851B0000E38FE83FAD753A8F83F51B3D2ECEE0ECB |
9B6642914B6A8CE1DF3210A4100838009CF20303CF4AE5447B9800E33B4E48ED |
CF6FF3DEA9AB0870036606723209C76FF38A96353CB264A81938FF003EB4E8A2 |
240391D095C8273D738FCAA68B6CA64DEA0391F2851C67D7D318073E99AB4806 |
C45958B26EDC47519C8FF229F142CF244A02B1947CA19B6F3C8E49E3AD362675 |
906C6DAD9E3DCF61F9E295B19DCF939E490D924F19CFA77ED5420DA180648C64 |
29DDF375C77C75F7A6EFFDDEDC60F720E323AE3F3FE95285852472C77A2206E1 |
C0DDD33D79EFF5A644DE6B051265C72AA791C638FD31D3D280144A155403F301 |
F7760007A71DF8CD35CB4CDBF0C49201E49E7B0A9E323CD52A4170CC03B6002C |
41C6E2781C81DC8EFEB51F9EAB745D4811B121CE3763390704F3D0FE7CFA5002 |
3940863DF9DB8D8540C639CFF3EDFE14E5958471BA308F0CDC820648F60338E7 |
1CF1D7DE9971E5A4EC91ECDA318DA49FC8FBF5EF4C47231E5AA865CFCDD3D7D7 |
FA51718E919A560801F91718CE71C7273DFA7F9C532E209132AA0370482A7218 |
77C7AFFF0058FA1A1B7C8924A03BA29196C7393FFD7EF40999E070EC4E0E5CAB |
6D2C391D71FED1CE7B63B0CD4B60558F648FFBC7C6D048C8EB804F5FAE3F3A7A |
F96FC1D9B49E8BC104F3C13F4C64E7193F8BDDD13F77B818F0182BC7824E738F |
5191DC7B7E0D94BBE5C7DD51E704D9C2962B9183DBA7AF18F7ACC649048B3B48 |
EE1115141D8842F1D3383F78F3EB9E4F6E46A836B69A73CA22667972114CA707 |
AF2D823A7A563400797B9D09544662C801DA3A0C81823E623927B8E0F42EF3A5 |
91E3326F98AED8D016241C741571959089E19045BA666085948DA85830F607FF |
00D7EF9E94C9639229584AA223C300F9E32323DFA7F9EB4B25CC4B751B4C0398 |
F25963002E7B28F6F5FF00398EE2E269A32D2615376E2A0639C019FAF1FA9A77 |
0259EF5A568408E311C6AAACB18DA1C0EE7D49C75AA78DA194E412739F514D04 |
E492A71D0E4F4A591D8F270CA3FCFF004A8BDC047DAA0AF1907A1FF3FE14F9AE |
6E1ADE1B59267682125A28CB6426EC138F4CE067E951CE636998C4A56327E507 |
AE2A3A96C639C2A9C2B06181C814D3CD3848C2368C1F9588247A919C7F334DA4 |
03A35CB72DB40C12723239EDEB53467CC0FD006FBCA4800B64E31C703FA67919 |
A8A3C6F077AAE083F30C8EBE983523B97711E52303119DBD08F52475E99CF34D |
01224004C13EFBB9C004E194EEDBC8CF5EF8CFE94C8D32CAEC0953D549C1C1E3 |
AFAF34AEF279B2BAE3058EF6FBC012738CF3E9D7BD4F716D22F980C2212492AA |
71CA83DBDC63D727231C55014946EEA40C2F19EFFE7FA528F2FCD556663103C9 |
00038FF1C54E4F9FF3191324618B2FA9EA3B9FE7CFA5452C786544CB109B8E07 |
E3C7272295808B078E3AF4A4A90F2B92402401800631F87E1DBD688914BFCE48 |
500F206EE7048E33FE7DFA52B011D4D19DB2212AB20E0946380707A1EFF956AA |
E92D7D3BD9C2615BA823DAA8E0C6F3B6EDC49DE700E091EFB40C64F26BDA45CE |
9B7D7115CDBADBCAB2B2880F5501981C63B0231CF5E319AA516065EC8BFDAFFB |
E968AB7E41FF009F98BFF1EFFE268A2C0670239040E78C9ED4F8E57404093682 |
08C7AE411FC89A8E973ED5004CB3ED550551BFDE1F873CFF00FAB0314AF809B2 |
390F94FF0031048C8C678FD4FA67D2A25C860A319278C9C7EBE9522B796C1B60 |
24673823A74C0E3AF5E79AA01A15D8FDD3F20CF4ED9EE7F1EB4DE0677648C1E3 |
814A59D72727A6030E3A8E7F4A4620123040EC33938ED4807C8EF2BEF6DB9C05 |
F940000031DBD854D04DF64BD8AE00DBB250E003C8008231907A7E3F8D56FE1E |
073EA074E2A5573E5E02AE0904EE418E338E7A8E0FE34D01B979ACDDEBB158DB |
CF7892986D5A32F75205D815A47501B039DBC0C93927AF3819106E24029BCEEC |
608EBF953510A46C4F1C0271D78AB2C5648951222AE1B99338520F407DF82739 |
AD15FA887248563030CDF2306C8040078F4E99E7EBD3079A697797CC93AF1924 |
9CF1903A9FC29EE3C9DFB506D5F96451CB1E7E9EF8E38C8CFA524616458E353F |
BC61CAEFC02DCE3AFE007E3EB9AA0115DD14A284E7924E3A75C7E838A218BCF9 |
02230C95DD920F6193D33C0F5F4A46971B55115F693CB73918EDDC0EBF9FB546 |
D26C32AB29C91B7E64008C10471D8F1D41F5F7A4D813890C1FC311DC30BC11B9 |
795E3D3A7B1FCEA0B794BB28276AEEDDBB9C7193C81CFE3DB9A876ABC8CC0900 |
839E7B76E7A5349C9C8DBB7AB63B71EBDFAD4B605AF39EE1918AC65C95542727 |
6E31CFBEE3D47A93C5303349191B1DE241C0249DA49F5CE3A8351C2B25D36C89 |
1A49988DB1C71E4B000E7A739FC3B9E78E52378F2C1D801B4721724723A7F9FF |
001A4981207CF391CE4E06307E94808964D818807A9238E69858121B27A75C7F |
9FF0A0928C0630339271D7F5A770000B100FCC0F62C1793C7D0F241FF39A73BB |
9254B60172C49C9E7AFF009FA9CD3564646CAE54B67E603EF03C7F234C0C1242 |
4ED20763CFE148025DD0CAC922862571F30208E3DF907A7FFAA9666616F1C4EE |
CDB1884CB1C2AF07E507A03927A7A7BD32798CB296D9E58FE140C4851E83249C |
73EB492ED25584A64661B9C91821BB8F7FAD4318D5200208E3AF5A91CAFDD550 |
A463248C8FF39FF0A646A5DC202A0B10016200FCCF03EA6A4668CA2887720C0D |
EAEDB833773D06073D39C73CD08063A1D81B690A795F4C7FFAEA59198200D92C |
C3A629C3F75F2864DBC8F95C65B920E7F0FD3F3A6961B37643381C1C8F4AA102 |
1DA846FE1B25B9C8E320546ECA395055F3CE0F4A8CB1E40E98C529DA5B91B401 |
FC3CF38FAF734AE31092C7269295480C0901803D0F7A1D8BB96200C9CE00C0A9 |
01636092AB91900E71FF00EBCD37B52B6D046D24F1CE4639A4ED9A002978DBD0 |
E47539ED4945004E279045B4150B9E31C1C7208FC73CE7AE07A548F2A4EEC252 |
431006F2C4E08F5CF2474F7E323D2AAF5E83F5A7A8DC0E10B6064E3B74E49AA4 |
C07B8914ED2A10C795385C12739E7FCF41519F9831000079006702A452AA080B |
CB636B11DFB81CF4F7F61D29A252CBB0B36D24B600CF38C7FF00AFFF00AD400B |
1B08DC3B20930D9D841DAC3BE718FD3DFA5220F9B073C8381D3E9D7DE99D48F5 |
27A629C1F66307A60F5A00D3D27579F4994CB1952C881A259543AE7703D09C0E |
87F3F7C8D3F126B1A96B773A85D6F965B48A7119756FDD04258C69B3240036B6 |
00240C63DEB9D6DAE142A29DBD5D7393CE727DF9C71E952C6814C61C0C0C8207 |
7FF3CD52BEC22AEE5FEE2FEBFE34568EE8FF00E7827FDF6FFF00C5514F940CBA |
01C1C8A28AC863DD1E262AC0820E3047714315230001F87A7F8D34100302A0E4 |
707D2850CCC02F5ED8A60398A919C60F71DA8C85070727B1C51C64165C679E49 |
E7352602465406525979FC0F7E3DA980C43B77602F3DF1D2A58E409BC06DACEA |
54904E483EB4D0A486933C8E082093FE78FD6A54489D1CB3C8180FDD0550431C |
8C83C8C0C13EBC8031DC3404918C45F3392FC6063B739E7F2EDDCD48C46D6DC5 |
806E9B8E40C0E391D783F871DB22A2E5573CED5C678E9D7D3E9FA54FE4FCA43B |
80C8C414519624633D3B62B44223460EEA1902863D9B919FAFA7F934E540AA8C |
10FCEDB773A92A48C700773D33D7AF4A6BC6C06E2A362E4A903EF741C67934D7 |
9E4930240CD85DB966CF539381F89FCCD000F22B298D005EA482DC0FA67FDDFA |
D3266DF20DB297C2AAE7278F6FE629F9728C4C8E558E092C3E738C8EBD7FCFA8 |
CB5DC489B9392793C633EA00E9C7D7B8A96044C7392016C2648DB9C74073E9F5 |
EBD3A537CA91919D0315561B8007009CE07D700FE46A40CC8B1CE8DB2404942A |
0E77020F5ED8CF6F4E94DF2F7B3B4402B646141C9C9E30075A918C681D6468DB |
E665C8CA9C8E3DC70471D7D280DB6456236152090A707EA0F6A7B26123954152 |
46D20B024907B0EA0631D7A9071E81CAAAACAEE18A311D3BAF7CE3FC452B0070 |
C32154019FA9FC3A7AFE66A30E55B76D24E705493CFA7BD4F2C51312B114C06F |
BD9621871D3207A67B75EDD2A1742872393CF3CF7FF26A9A620C31EDCFA2FE9D |
29624795D88748BE56705CE33819C67B938C0F534F31C8B888232B9031BB8C02 |
320F3EA0F5F715185C361B93DB0001E9CD20203D4F18F6A548DE591638D59DD8 |
E15546493EC295946D0DC927BD0E02ED00738E79CE79A9B0CB70DA59BE8F7575 |
25FAC7771488B15AF9649954E7736EE83181F9D57B57852E22FB4C6D25BF98A6 |
5442159941E406C1C719A882B3025413819381D07AD250058BE6B47BE99EC639 |
22B567262491B732AE7804F7E2AB9EBC5145200A28A2800ED4514EF2DCC6D205 |
2514852C07009CE3F91FCA801194A919C7233C1CD1B9B685DC76839C678CD2EE |
2C543B310381CF41ED4DA0028A28A0055CE78EB4A84061B871DF0707148AC54E |
5490718E294905413B8BE4E493DBB7F5A005DC0367A8EF83D4D2B7DE187CE070 |
7A7029A0F278E3BE074A5555638C9C9C63A53003B71C6391DBFF00AF4F56C201 |
B79071907EB8C521DA026D2080B96E32739FA71DBFCF14E542A149DA73D0839F |
5FF0A6809037EE9514AE43646EC13D318CFA55855C14390CC4670AB9C1C90060 |
FE1EBD7F0A8044AA8922CC859890630A72A06304F6C1C9EFFC272071991796C0 |
C67AF1DF1D7F9569110987FEF2FF00DF3FFD7A29D4555846753823B2338562AB |
8DC40E07D69B4AA0160090A09EA7B57394058B1CB124E31CD033DA8552CC1541 |
2C4E001D4D4BE5E049B594F4C676F23AFAF0781D3E9F500646BBC919E833D09F |
AFE993F853A24DE0FCACC067E50467A13903F0E69AE8AA485627BF41D3B74279 |
F6ED56A18E516C032031BB12370C6318E41FF3D3E95496A046C84A829F22E725 |
B271923FFD7C54B184F9C3F0C06E523B93C8FD3FCF14FDA4C8331AA8DB860700 |
30C8E7DB8C74E78CD22B051C7DF2492CA7190474C74C55A5A887A48639B7AC92 |
A9273B8312C30739CFAF7A48D51C38760871951B7A8EB9FCB3DF9A0AEDF906DC |
29C82BDE95F8202A90879048E7FF00AFD2A80748F8428ECE0851DB18230307D7 |
03F5A877148B0586EDBF4C73C83EBC13F9D29191C2B36393F9FE9DA9E9222B92 |
FF00EAD4E4066E87F2E7A73C639A00666370548C01839DBCF3D7F0C76F6ED9A6 |
FF0006318F9B04800119F7C7B714F970400AA150E405DDF87E7C0F4E9D2A3C30 |
519DB9E8334809E082D2642CF2B0F2F1BC33637E4F453FFD62724718C91072B3 |
2F95F2ED19247CA4F7FD08E3E838A71791C2EF7762A02805B2540E703B01C9FC |
E9BB4B11BB83EA0D2B01661B74007992055557C97538593040000393FC3CE383 |
D72072C5522D8863C9206D3C1030482063DFAE7A71D2A4864860B49B225FB4BA |
81148B26D11F396C8C72480307381E87B445C48EACCCC72016381FE4FF009FA9 |
AB00C0983C807F0EF566E6EEDAEE59259E3F2DCAE0A5BC4A8830AA14E3F024F1 |
CF5EF4A9653BB2ABC6C819990EE52482A016C8009E011DAAA2AAE4B7191924E4 |
71430181559F0C58A633B979C919A74D01524900BB6080086E08CF5EDDBF3A89 |
9D9E4DC3903A6063B7F9F7AB96D034921D913CCB1A79ACB1AE0ED5E58F238C0C |
9CE08E3D39A95A8149865B686C1EC0F5FF00EB54B6BF62F22ECDE2CC6531016C |
508C093729CBFF00B3B7774E7247BD4D796C6DEE678DC08E5491A231EE0E4609 |
1F787040F51D7F2AA9B70A5720ED1D875152D010E73939E4D183CFB75A785390 |
0E7A678F4A46DB9CA290B8C7CDEBDEA46329723691819CF5F4A520023D3BE3B5 |
34F148028A5DA4A96C1DA0E09ED430002E181C8C9C76F6A0054DBBBE6240C1ED |
9E71C7EB4D3D68A5652AC55810C0E083D4500252F181EB494500145145002A92 |
AC186320E7919A4A7EE7740A5C9541900B74C9EC29110BB051D4F4182727D38A |
0040580E09033DA9C33B77E40393CEEE7FCF34E10B322617EF721B6B7279007E |
8718FF00F530E42950F95382403C671FD3269812AA03B4B9719E17E5EA391EBE |
DF8F34E21DB2063628C7247A54CBFEAD73170002DB49DADC719C77EBFAF7A50A |
4E5955B6A13E531CE54718CFD33D3D4D5A421502ECDEAF8C92A5700F6EBFE7EA |
334A256489977AF00819033CF6071C7E1EFEA728B18388A304E40E0E339E7A1F |
F3D7BD39482EA73B071820743EBEB56057DD17F717FF001DFF001A2A6A28B019 |
D45145603015AC9F766FFAE49FFA21E8A2A80A177FEB97FEB947FF00A00AD293 |
FD5CBF58BFF45D145543713196FF00EB0FFB8FFF00A09A6DBFFA99FF00DDFF00 |
D9C51455F501CDFF001EB1FF00D746FE4B515145310FBAFF008FF93FDE7FE755 |
8FFAB87EAB4514BA8CB337FAE3FEEA7FE80B4CA28A04463F87FDF3FD688FB7FB |
8BFD68A2818E93FD5B7D0D3A8A2803D46CFF00E3E7C51FF6059FFF00415AF2EA |
28A6C44F27FC806CFF00EBE24FE51549A27FC7D5C7FD784BFF00A09A28A95B8C |
B9ABFDEB9FFAEF37FE8F15CF37DD93EA7F98A28A99000E907D4FF3A828A2A18C |
737DD4FA7F5352DDFF00AE5FFAE51FFE8028A28020A28A2900514514D013D97F |
C7FDBFFD755FE62A7B6FF8F68FFEDBFF00E8B1451420207FF8F087FEBABFF24A |
828A290054F07FA9BAFF00AE43FF00435A28A68083B5489FF2CFFDFF00F0A28A |
606E5C7FC8647FBE9FD2B325FE0FF7C51456BD04393EEFE27F9D3BB5145311D4 |
D1451401FFD9} |
end |
object Ueberschrift2: TLabel |
Left = 88 |
Top = 0 |
Width = 172 |
Height = 29 |
AutoSize = False |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clMaroon |
Font.Height = -24 |
Font.Name = 'LcdD' |
Font.Style = [fsBold] |
ParentFont = False |
Transparent = True |
end |
object Label2: TLabel |
Left = 8 |
Top = 277 |
Width = 252 |
Height = 18 |
Caption = '(C)Copyright 2001 Daniel Marschall.' |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clYellow |
Font.Height = -16 |
Font.Name = 'LcdD' |
Font.Style = [] |
ParentFont = False |
Transparent = True |
end |
object Label3: TLabel |
Left = 8 |
Top = 298 |
Width = 167 |
Height = 18 |
Caption = 'Alle Rechte vorbehalten.' |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clYellow |
Font.Height = -16 |
Font.Name = 'LcdD' |
Font.Style = [] |
ParentFont = False |
Transparent = True |
end |
object Gauge1: TGauge |
Left = 8 |
Top = 200 |
Width = 337 |
Height = 28 |
BackColor = clTeal |
ForeColor = clMaroon |
Progress = 0 |
end |
object Ueberschrift1: TLabel |
Left = 90 |
Top = 2 |
Width = 172 |
Height = 29 |
AutoSize = False |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clRed |
Font.Height = -24 |
Font.Name = 'LcdD' |
Font.Style = [fsBold] |
ParentFont = False |
Transparent = True |
end |
object Label1: TLabel |
Left = 8 |
Top = 237 |
Width = 48 |
Height = 18 |
Caption = 'Status:' |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clLime |
Font.Height = -16 |
Font.Name = 'LcdD' |
Font.Style = [] |
ParentFont = False |
Transparent = True |
end |
object Status: TLabel |
Left = 136 |
Top = 237 |
Width = 4 |
Height = 18 |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clLime |
Font.Height = -16 |
Font.Name = 'LcdD' |
Font.Style = [] |
ParentFont = False |
Transparent = True |
end |
object Bevel1: TBevel |
Left = 8 |
Top = 264 |
Width = 337 |
Height = 2 |
Shape = bsBottomLine |
end |
object StatusBar1: TStatusBar |
Left = 0 |
Top = 321 |
Width = 353 |
Height = 19 |
Panels = < |
item |
Text = 'http://www.d-m-home.de' |
Width = 270 |
end> |
SimplePanel = False |
OnClick = StatusBar1Click |
end |
object load_button: TButton |
Left = 8 |
Top = 40 |
Width = 89 |
Height = 25 |
Caption = 'Datei &öffnen' |
TabOrder = 0 |
OnClick = load_buttonClick |
end |
object crypt_button: TButton |
Left = 104 |
Top = 72 |
Width = 241 |
Height = 25 |
Caption = '&Verschlüsseln / Entschlüsseln' |
Default = True |
Enabled = False |
TabOrder = 2 |
OnClick = crypt_buttonClick |
end |
object beenden_button: TButton |
Left = 256 |
Top = 40 |
Width = 89 |
Height = 25 |
Caption = '&Beenden' |
TabOrder = 3 |
OnClick = beenden_buttonClick |
end |
object FileName_Edit: TEdit |
Left = 104 |
Top = 40 |
Width = 142 |
Height = 21 |
TabStop = False |
ReadOnly = True |
TabOrder = 4 |
end |
object Panel1: TPanel |
Left = 8 |
Top = 112 |
Width = 337 |
Height = 73 |
BevelOuter = bvLowered |
TabOrder = 6 |
object Label4: TLabel |
Left = 8 |
Top = 6 |
Width = 188 |
Height = 18 |
Caption = 'Verschlüsselungspasswort:' |
Enabled = False |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clWindowText |
Font.Height = -16 |
Font.Name = 'LcdD' |
Font.Style = [] |
ParentFont = False |
Transparent = True |
end |
object Edit1: TEdit |
Left = 16 |
Top = 40 |
Width = 305 |
Height = 21 |
Enabled = False |
TabOrder = 0 |
end |
end |
object close_button: TButton |
Left = 8 |
Top = 72 |
Width = 89 |
Height = 25 |
Caption = 'Datei &schließen' |
Enabled = False |
TabOrder = 1 |
OnClick = close_buttonClick |
end |
object OpenDialog1: TOpenDialog |
Filter = 'Alle Dateien (*.*)|*.*' |
Options = [ofHideReadOnly, ofPathMustExist, ofFileMustExist, ofEnableSizing] |
Left = 320 |
Top = 288 |
end |
object SaveDialog1: TSaveDialog |
Filter = 'Alle Dateien (*.*)|*.*' |
Options = [ofHideReadOnly, ofPathMustExist, ofFileMustExist, ofEnableSizing] |
Left = 288 |
Top = 288 |
end |
object Timer1: TTimer |
Enabled = False |
Interval = 750 |
OnTimer = Timer1Timer |
Left = 256 |
Top = 288 |
end |
end |
/trunk/History/Decoder30/Unit1.pas |
---|
0,0 → 1,150 |
unit Unit1; |
interface |
uses |
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, |
ComCtrls, ExtCtrls, StdCtrls, ShellAPI, jpeg, Gauges; |
type |
TForm1 = class(TForm) |
StatusBar1: TStatusBar; |
load_button: TButton; |
crypt_button: TButton; |
beenden_button: TButton; |
FileName_Edit: TEdit; |
Image1: TImage; |
Ueberschrift2: TLabel; |
Label2: TLabel; |
OpenDialog1: TOpenDialog; |
Label3: TLabel; |
Panel1: TPanel; |
Label4: TLabel; |
close_button: TButton; |
SaveDialog1: TSaveDialog; |
Gauge1: TGauge; |
Edit1: TEdit; |
Ueberschrift1: TLabel; |
Timer1: TTimer; |
Label1: TLabel; |
Status: TLabel; |
Bevel1: TBevel; |
procedure beenden_buttonClick(Sender: TObject); |
procedure load_buttonClick(Sender: TObject); |
procedure crypt_buttonClick(Sender: TObject); |
procedure StatusBar1Click(Sender: TObject); |
procedure close_buttonClick(Sender: TObject); |
procedure FormCreate(Sender: TObject); |
procedure Timer1Timer(Sender: TObject); |
end; |
var |
Form1: TForm1; |
implementation |
{$R *.DFM} |
var |
mem: TMemoryStream; |
a, b: char; |
j: integer; |
procedure TForm1.beenden_buttonClick(Sender: TObject); |
begin |
Form1.close; |
end; |
procedure TForm1.load_buttonClick(Sender: TObject); |
begin |
if Opendialog1.Execute then |
begin |
FileName_Edit.text := ExtractFileName(OpenDialog1.FileName); |
crypt_button.Enabled := true; |
Gauge1.enabled := false; |
Edit1.Enabled:=true; |
label4.Enabled:=true; |
close_button.enabled := true; |
SaveDialog1.filename := Opendialog1.FileName; |
end; |
end; |
procedure TForm1.crypt_buttonClick(Sender: TObject); |
begin |
if not fileexists(opendialog1.filename) then |
begin |
MessageDLG('Datei ist gelöscht worden. Bitte öffnen Sie eine neue Datei!', mtInformation, [mbOK], 0); |
end |
else |
begin |
if Edit1.Text = '' then |
begin |
MessageDLG('Sie müssen ein Passwort zum Verschlüsseln / Entschlüsseln eingeben!', mtInformation, [mbOK], 0); |
end |
else |
begin |
if Savedialog1.Execute then |
begin |
Status.caption := 'Programm arbeitet...'; |
Timer1.enabled := true; |
end; |
end; |
end; |
end; |
procedure TForm1.StatusBar1Click(Sender: TObject); |
begin |
ShellExecute(Handle, 'open', 'http://www.d-m-home.de', '', '', 1); |
end; |
procedure TForm1.close_buttonClick(Sender: TObject); |
begin |
filename_edit.text := ''; |
crypt_button.Enabled := false; |
Edit1.Enabled := false; |
label4.Enabled := false; |
Gauge1.enabled := false; |
close_button.enabled := false; |
end; |
procedure TForm1.FormCreate(Sender: TObject); |
begin |
Ueberschrift1.caption := application.title; |
Ueberschrift2.caption := application.title; |
form1.caption := application.title; |
Status.caption := 'Programm bereit!'; |
end; |
procedure TForm1.Timer1Timer(Sender: TObject); |
var |
i, temp: integer; |
begin |
Timer1.enabled := false; |
mem := TMemoryStream.Create; |
mem.LoadFromfile(OpenDialog1.FileName); |
gauge1.MaxValue := mem.size; |
for i := 0 to mem.Size - 1 do |
begin |
mem.Position := i; |
mem.Read(a, 1); |
j := j + 1; |
if j > length(edit1.text) then j := 1; |
for temp := 0 to 255 do |
begin |
if copy(edit1.text, j, 1) = chr(temp) then b := chr(temp); |
end; |
a := CHR(byte(b) xor byte(a)); |
mem.Position := i; |
mem.write(a, 1); |
gauge1.Progress := gauge1.Progress + 1; |
end; |
j := 0; |
mem.SaveToFile(SaveDialog1.FileName); |
mem.Free; |
MessageDLG('Datei wurde erfolgreich Verschlüsselt / Entschlüsselt!', mtInformation, [mbOK], 0); |
gauge1.Progress := gauge1.MinValue; |
Status.caption := 'Programm bereit!'; |
end; |
end. |
/trunk/History/Decoder30/Unit1.~dfm |
---|
0,0 → 1,851 |
object Form1: TForm1 |
Left = 305 |
Top = 137 |
BorderIcons = [biSystemMenu, biMinimize] |
BorderStyle = bsSingle |
ClientHeight = 340 |
ClientWidth = 353 |
Color = clBtnFace |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clWindowText |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
OldCreateOrder = False |
Position = poDesktopCenter |
OnCreate = FormCreate |
PixelsPerInch = 96 |
TextHeight = 13 |
object Image1: TImage |
Left = 0 |
Top = 0 |
Width = 353 |
Height = 321 |
Align = alClient |
Picture.Data = { |
0A544A504547496D616765974C0000FFD8FFE000104A46494600010101006000 |
600000FFDB004300080606070605080707070909080A0C140D0C0B0B0C191213 |
0F141D1A1F1E1D1A1C1C20242E2720222C231C1C2837292C30313434341F2739 |
3D38323C2E333432FFDB0043010909090C0B0C180D0D1832211C213232323232 |
3232323232323232323232323232323232323232323232323232323232323232 |
32323232323232323232323232FFC00011080141016103012200021101031101 |
FFC4001F0000010501010101010100000000000000000102030405060708090A |
0BFFC400B5100002010303020403050504040000017D01020300041105122131 |
410613516107227114328191A1082342B1C11552D1F02433627282090A161718 |
191A25262728292A3435363738393A434445464748494A535455565758595A63 |
6465666768696A737475767778797A838485868788898A92939495969798999A |
A2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6 |
D7D8D9DAE1E2E3E4E5E6E7E8E9EAF1F2F3F4F5F6F7F8F9FAFFC4001F01000301 |
01010101010101010000000000000102030405060708090A0BFFC400B5110002 |
0102040403040705040400010277000102031104052131061241510761711322 |
328108144291A1B1C109233352F0156272D10A162434E125F11718191A262728 |
292A35363738393A434445464748494A535455565758595A636465666768696A |
737475767778797A82838485868788898A92939495969798999AA2A3A4A5A6A7 |
A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE2E3 |
E4E5E6E7E8E9EAF2F3F4F5F6F7F8F9FAFFDA000C03010002110311003F00F9FE |
8A28A000F5E29C8556452EBB94104AE7191E94DCF18A28003D78A28A2801C1CA |
A3280B86C672A09FC0F6A40A58E1412719E28182464E07AD276A002940CE78CF |
1EB476C67E94A3E6273DFBE6801B4019381521423F84E71BB9E38FFF005734B2 |
4AEE91A3B6563055173F74649FE64D3B0111EB52096456C9209C01F3007818C7 |
5FA0A0103099186209240E298173DFEB4009453F90080A32DC74CF7ED4B0426E |
278E20E89BD82EE73855CF73ED4806280580242827A9ED494ACBB58A920E0E32 |
0E45201938140125C471C57324714CB3C6AC42CAA080E3D4038233EF4C048208 |
EA293B52B294241C67A70723F0A0072234AC40C7AF3C0A6558B6C02DCF1C0FAD |
174ED34CCF85E807CAA00E3D8555B4B815F1C6697A9001F61522C6A55C3C8A8C |
172A083F31C818F6EFD7D2936E015E091CF03A52B011D07AD2B020F3D69F1C8D |
04E93478CA38652464641CF434808E83D6AC5EDCCD7B792DDCE14493B190ED40 |
AA493CE00E319AAF40051451400FF30F9023CF1BB711B47A7AF5FC299451400E |
DDFBB298182739C73F9D260ED2DC601C75A4A3AD0028C67E6240C7619A4A28A0 |
0283D78A28CF18A0072155914BAEE50412B9C647A534F5E28A2800A7072A8CA0 |
2E1B19CA827F03DA9B4A3048C9C0F5A000296385049C678A4A3B52F6C67E9400 |
9453BCC7FEF37E7450037BD14E9183C8CCA8114924282485F6E79A6F6A00528C |
103907692403EB8A4A5C0DA0E4673D3D292801EAE3C968F62925836E3D4601E0 |
7D73FA0AB10DA2CB697136F25A28F7E003D77AAE0FE049FCAA1B789259763C81 |
1704EE20E077EC3F0AED7C3BA568F776D7A64BC8898A20254489D90C7B9373EE |
2BF274619C139230A4038B8C6E0712647589A12176EEDC7E519C8E3AF5C7B74A |
8EB4350B62B752B49730B329C1548DC631818C151D3FF653ED9A53446195A366 |
462A704A3061F811C1A96AC03477CFA53831504E474C522856382C17BE4D3CC4 |
CB6E93975C3B32050E0B0C05CE47503E6E0F7C1F43400A0638DAD8CE369E3269 |
1B685C7CC5777A7F9E6839C2E3A0CE07A639A6B11B157B81EB4C09170D3ECF31 |
40621771071E992473EFC526D538241C13C007AF6A42C43EEDBF99F6A56998E4 |
10381DF9A003CB0C011C0CF7E3B6680A0C7D79C1C807FCFA53D5728060EEE7DB |
B76FCE90A050DF37393C11D7F1A7610DDA4A8CA84207039193EBFE7D2A3E5403 |
CE3F23563CB1BC020718E7B9A31F3E180DD8E077EF4728C81503311CF1E9CFE3 |
4ECF9843ED55DA0280BC64814F2AA1B0DF30E9C1E9CD3E24C12760F4C37A7E1D |
E8511134B2ACB696FF00B98E268232BB917E693249CB73DB381EC07D6AB450B4 |
B911AB3950490BE9824FE82AF40507985C02361182393C8E9E87DEAB796C9971 |
B973C8C0E48E47F88AA7102B31DB868F851DFD4D3DF2DB99828C92481EB9EDE9 |
49B8B138033D460672690643E48249E4EDFE95031873B403DFDF348D82C4AA90 |
A4F009CE3F1A73EE5628CB8607041ED4C3C9C9A4C028A28A40490426E2E22855 |
911A47081A470AA3271924F007B9A632ED62A483838C83914878A2800A28A280 |
0A294924F349400F531F94E195CC848DA436001DF231CF6EE299DE8A748C1E46 |
65408A492141242FB73CD003694A3040E41DA4900FAE293B52E06D072339E9E9 |
40094F0E3C968F62925836E3D4601E07D73FA0A654B6F124B2EC79022E09DC73 |
81DFB0FC29A02686D565B4B89B79DD147BF001EBBD5707F024FE550191D62684 |
85DBBB71F9467238EBD71EDD2BB6F0EE95A3DDDB5E992F222628809512276431 |
EE4DCFB8AFC9D186704E48C2900E395D42D8ADD4AD25CC2CCA705523718C6063 |
05474FFD94FB669C6C8467D28EF9F4A74D1186568D9918A9C128C187E0470691 |
42B120B05EF935031B4514530178DA783BB3C1CD2EC7F2FCCDADB33B77638CFA |
669B45200A29C85448A5C65723231DBF3146D0CE154F5C0F9B039A0072B01217 |
D89B7390A738FA56C41792DA19E598007ECEA628890001B93A0249195C9E39EF |
D2B34ADC190DAA9123C8C1B0064BB63239EFD78EB9CF1D69ADB15655909DE406 |
4DAB8049C1F6C0C67F4ED569D8049248E5123BAB19589390C154648FE103FDEE |
98EA3A63982A5405559CAB0888285B0704E32075F5C1A8AA580538F076AB6E04 |
0E9FCA9B45201D1C8F13168DD90904654E3823047E553D95A4FA85E416B6CA5A |
6958246A01FBC4F03F5AAD5346EC855C1030DC0079C8FD69A027D46C2E34DBD9 |
2CEE50ADC40C639177676B7231C1C7E54D8E35C1523383914C0E6E2469267667 |
272CC7924F5C926A62A15B0AC7683CFA63F1AB4BA8874D128976C526F41FC457 |
00F0338CF38EBFE03A54241550791CF2491CFE753703AF6E7269BB0B6483818C |
63D3E9F97F2AA680466CC618025B90C3A0C7AFF9F4A4DA0B739CF5E4F434E0AA |
189EA69E400A3E7C3752ACA4718C8FCE8B00D54DA7EFEF00F0474C52F5A32704 |
81CFA5203C6EEE7A0CD3113282DBE4CA8DBF3723827D31D3F0A5994306DCFBBC |
B608B9EBC1EE09C8E3DA9AA23775565C7079EB96E707A8C76FE7CF4A58A4D916 |
D8DD9549DAF8C7B8E077E334C0ADF2A2838C81C823FCFF009C5321792D6549D7 |
63488C1C074571907B820823D8F1D69C4071D0E48E0E29AFD029DA08EDEBF97E |
359B18CB8B896EE779E790BCAEC599D8E598924924F5273DCD434F65218F1DBB |
D348C77A8631297712A1727683903B525396474575562038DAC01EA320E0FE20 |
7E5480748268D562943A81F3AA36463701C81EE00E7E952C76334BA7CD7A0C7E |
4C2EB1B66401B2D9C617393D0F4A8659A59DF7CD23C8FB55773B1270A00039EC |
00007B0A6F634C0722AB326F902A96C31C13B47AFF009F4A470AB23046DCA090 |
1B18C8F5A69E69401B49DC011DBB9A402E38C0C67A9E453683462800A5E369E0 |
EECF0734A1D846501F949048F719C7F334DA0076C7F2FCCDADB33B77638CFA66 |
9B45390A8914B8CAE46463B7E62801B522B0121936215CE429CE3E94DDA19C2A |
9EB81F36073560ADC190DAA9123C8C1B0064BB638E7BF5E3AE73C75A680D282F |
25B433CB3000FD9D4C511200037274049232B93C73DFA565492472891DD58CAC |
49C860AA3247F081FEF74C751D31CAB6C0B2AC84EF20326D5C024E0FB60609FD |
3B5310155672AC2220A16C1C138C81D7D7069B77022A28A2A4028A28A600064E |
0528C1232703D6928A4014F5188F73464A9380DD39C74F4EE3FF00AD488A18F2 |
70A39278CE3D877FA50EA15C80EAE07F12E707F3A0098CEABFBC400CAC7966CE |
47033C7439E739CE7D053E425A0803294818B6D24739CF5CF7C6467006718ED5 |
0C0C8049E63606D254040496E8073D3AE7F0F5C5246C0703682D9566600800FE |
1C7D453015562675259A38CEEC9C863C7238E3D85353805801B948232463F23D |
7B7EB4CA919F76198213C8DA1718F7E31EBFA7A5000CA82143F3890924E47CA5 |
78C11F8EEFC85091B394408C5E420273807A8FE7FC8D286512158DCA237F130E |
4718C6476E4FD7D29234694151B7E505F9EBD3F33D3FCF3400D6C6F395DA33F7 |
476F6A7001C6EC807201DCDFAD4C8D1EEF25E2DC48080C7D55B3D473F367FAF1 |
8A42A88A0EDF93AE4360B76C8CFB83C63B9FC1808990C4065C7407FC2AC00FE4 |
897690858A86C12338CE33FAD56917ECF2C91654904838CF638C7F9F5AB31452 |
3A7CA8410A5BEEF00633FC883F8D5C443911649147439EA064D48F1C5260C68C |
4229CFA93EBDF03047F8E692094464E172E0EE5E327823F4C0FF003CD3989584 |
332FCC59943818078E4020E0F5E98F4EDC5588258CC236B4479E43B2907FCF41 |
DEAB91D3BE2AC6DDD108D594FCBBD8804608CFF4C7E5ED9A644FE5E49F9B2369 |
520608FF00F581D3F4A004450222DB380C0123A9079EA7A74F4EE69840762480 |
07DE19E31F9D4ACCA636C6DE70318208EFF4233EB9E949BC0418C87C609E9C63 |
1DBD7BFF00F5E8B00CDACC5063248C617BF3EDDE95F6F961411C12A186471F97 |
E5DEA458893B523977B9D88807507B7BF0718C77A6B295667552AAAE07CE0647 |
5E08FC295864633B02E7201E39E83D3F3A85DF0C597E5753C1CE39EC7FCFBD58 |
91B73EF24F41907FA540E0962738207047149811CF3CD732C971348F2C923169 |
1E4392C49CE4FA93EB4C50A4392181C7CB8F5EF9F6C67F4A7B00C06080C4E7FC |
FE9F9D0A570C020932A31DB6F2391EFC63BF5359D864246091E9495318253009 |
42929B82B13D98E71F9E0FE54D9209628E279236559937C648FBCBB8AE47E2A4 |
7E069340474A719E3D29314E50BB5B7EE076FCB8E99CF7FC334806D2AF5E4F14 |
F450F8CBE0F4E4718EE7F0E3B52C4371236E495C2E5B0324E33FAD3B00145321 |
48F7B93C26460E78EDCFBFE94D58F700772A8CF24B74E9DBAF7FF38A9E28F939 |
05D4283C9DA30481D49E3AF5E688E251890302A707D42924819F5E474C1C8CD3 |
B010BC5B013BD1B070429FF39EFD3D3E998C0C9C0A98E599D0B7CE4FCCC581DC |
D9FEF761CFBF4FCA1A4028C1232703D6928A722863C9C28E49E338F61DFE9480 |
55184DCD192A4E0374E71D3D3B8FFEB54A6755FDE2006563CB36723819E3A1CF |
39CE73E82A1750AE4075703F897383F9D3E168C093CC6C0DA4A808092D8C01CF |
4EB9FC3D714C09A425A0803294818B6D24739CF5CF538C8CE00CE31DAA155899 |
C12CD1C6777390C78E471C7B0A48D80E06D05B2ACCC01001FC38FA8A8E801E9C |
02C00DCA4119231F91EBDBF5A565410A1F9C48492723E52BC608FC777E42867D |
D866084F23685C63DF8C7AFE9E94A194485637288DFC4C391C63191DB93F5F4A |
008A8A28A4014514E8CA8910B0CA861918CF1F9D000CFB820DAA368C640C679C |
F3F9D3683D78A2800A723BC6E1D19958742A70691599183292181C823B1A0B12 |
00249006067B5002514E8CA890164DEBDD738CD3CB2A42D13438943E77924100 |
6415C74FFF0055004552ABEE475DABB881F31C0C003A7D4F1EFC7BD454E2548C |
E30780001C7B9EB400FC044CED1200F82D838FA678EBCFBF1F5A923D91AE2655 |
6451BB03866DC0631C76EBE9F98AAD564C8ED66A81B862776E039DA0630DE98C |
7CB9EC3DA9A01E110AED630A04C7CC8492C71CE39E4FE991C119E6796770807C |
A5DB2CC4A8E4124E481C6707F418EB551181793CA50A8401863DB23F3271522B |
33ED40B975DCA36E1B3FE3F5F71E956988996460E1C9CB15DC0B8CEFFCF83DE8 |
72B92A54ABEEE99C607A63AD44CD24AC10B123809E61C1C76FA7041A038DC431 |
195F41FE7FC9AAB816AD6259E5C64A606EDC1B183D771F4031F9F719A743209E |
E372C209FF009670A0C839C9C007F018F7F5AA871C82A08EE067FCFBD396404A |
C60640208DC0658FA13C6075FF003CD3B8165962591FCBDAD876C679F979E3DF |
A751D3D7D184089B648460361801C8E99E4D24171E594C231270A0B38CAB0232 |
791C0C13F89CF6A818A2BAAB286C1DA5947079EC7BFD4D1702D988899C977055 |
44BB99704E7073C9F7CFBD35098C6E00B01C9C8CA9E9C11ED9FD68204F27EEA0 |
0A5CE701C601CF03D8F07EB4C00C526495CAE08C3673F88A6211B7BCA41F99C9 |
C71CE4FE1D6966F2C48071302A3049E9C633EBC7F850DC80045B0A0C3607E1F8 |
7F89A0B90C4BA9CBAE0E7AF23AF39FAD00412C6CA7AA83C9C8607DBAD451C61A |
5F2E47D8BB8658FDD5F73FFD6ABF2CA92EE202ED32EE2A0638FA927DFDF9EF54 |
9D50BAB9E147DE2064E2A24BA8CEEF4DF0DE9B71E1F9755499679E39E322D564 |
D918625C2E4C8B9656F948032701B2464570B3246667C10B11525446A5803838 |
1F363F3F73F4AB136A090B4D1C1BE689AE1668A4B8552FB577050DC1EA181201 |
C7D78C53014AA36D704A9DCC587273C11C71DBFC79E149A60440156E70083EB4 |
E2849091FCC3923819C7BFE03F0E6955B0AF98D5F72E0120FCBDF23B7AFEB484 |
7EF0ED248C8C64727F9D40C9A340638E40CA187187518CE7EBEFDF0294024A43 |
1BA9DA7272000719C1E78239EFEB50024657B9C7CDCE401FE454AA9B80320D8B |
1FCA768C163C91CF4CFBFA0EF4C099D25862F3562C02CBB25233BBAF6239CE33 |
CF6FAD400BA44FF36C756524124302320607E27E98A5370DE4EC8F28371380E7 |
033FFD6E3D7AD4734AD3499609CF4DA3000F4FA7D7A50D80F0C1E109FBA40BC6 |
F2064E48F419ED9CFD477C557A538CFCA0818EE734948029CCFB820DAA368C64 |
0C679CF3F9D1195122161950C32319E3F3A69EBC5200A28A5566460CA4860720 |
8EC680151DE370E8CCAC3A153834DA52C480092401819ED4B1951202C9BD7BAE |
719A006D152965485A26871287CEF248200C82B8E9FF00EAA8A800A28A298051 |
452962502F180491C52000010496008E80F7A58D955F2E9BD7B8CE2902920900 |
90064E3B5250014EC282C3EF7A15E9F5E9E94DED4500296240049200C0CF6A19 |
8B316624B13924F534945001455DD2E2D3E6BD55D52E66B7B5DADB9E18F7B670 |
718191DF154D8838C0031DFD6980952C6088A571222E0052A7AB03E83F0CFE55 |
66FF004C6B0B7B299AE6DA61770F9C16193718F9236B8ECDC74AA228D80B16D3 |
A44CE240E51D48211829FCF078F6A159BCCEB81EBFAD40A7073D7DAAC4B1496B |
72F14C9B654628D8C1C30EBD38A6980BE62B49BB6AAE4EE2070B83FE1D2853BC |
827EF0EE33FCB14D0D8192A5933CE3FCFF004A4DFD4EEE18F4F5AAB889136E79 |
75032396E40F7A596425C1DE4EC552087C918F4CF4FC28F955BE70C06E241C06 |
1EBD3FC7AFE150A33C4C1D77095705191B041CF07FC286C0733808B9D8C1876C |
FC8727F0E9E99EA3F077CD23B1707764F39E739EBFAD47896799CFCD33B65DDB |
3963C124FE84934D392017C10074EF8A9B8CB0A4ABB29760A7B28CF6E0E3F4FC |
6A6699259CC8FCEF0A5B24924E064E4E7927B9F5ED55C157DC7208E30064F5C7 |
1CFA64F5F4EB5240CC126C3A02539CE327B707F1ED569889959644DAA855C924 |
2E339F41CF3EBC77C0A74CA88877B3128C13181900673F971FCBB53119432860 |
51D4F2A4EDF6C93D4723F53D291635775DAC55890BB719CFBF4FAF1FCEA80946 |
E98870A4498063D87A81ED9CFA0CFB77C547BA1100C97330C96C8C051DBEBDF3 |
F852193073F3E7950C4F6C6053DB91B77165552A4603639CF5E98C9C67FC7140 |
14E4879C8418F41DCD35DD44602AAA1C6D2149C9E49C9CF7E40FC2A7995BCB1B |
5D3E61CFB738E7F9FE3EB51CEE19CB7078E830147E02A1A0206F9813D4F7E681 |
8C9E4E31D40F6E296439909C631D467BD21DB8F948191CF5A8192094C9216739 |
07058E338FA0FE949B43BE5223B99B2107E98F5FCA9B90139248ECB406014E7E |
F7FBDDFF00CF14C069C10318A4E3D2819278F4FF00EBD2548051451400528008 |
24B0047407BD058940BC6012471405241201200C9C76A0058D955F2E9BD7B8CE |
29B451DA801D850587DEF42BD3EBD3D290B1200249006067B5251400ACC598B3 |
12589C927A9A4A2AEE97169F35EAAEA97335BDAED6DCF0C7BDB3838C0C8EF8A0 |
0A5453F09FDE6FFBE7FF00AF453B00CA5182464E07AD252F1B7DF34800310857 |
8C1209E28C1A4A7177708198B0418504F00649C0FC49FCE801B452B80AECA183 |
007008EF49400514529C60601CE39C9EB40094514A411D46280151DE3759118A |
BA9CAB29C1047714A177233725811FD7348CCCEC0B1C92319273ED56AFA1B5B7 |
B955B2B9371118A325CA6DF9CA82EB83D831233DF19EF4C0AE89D0839E71D2A4 |
0AC5B6C40B1CF039E3D06290290A54E063FBBCD4B1C2C54BAEE2A1496DB9C273 |
8C9CF4EDF98AA484319B70E3871DBBE69114B1250E3D81E83F2F7A90332B4918 |
94918DAC41C0619CFF0041F955D8DECA0F395765D86468E3277218CFCA43E01C |
13F7860E7B9F4AA4AE0558ADE37DAB33153824FCE000303BFE7C7B8C02783005 |
C2F983EEE30C76F00E7A7071C8A98A761C63A13FE7E9524C84245B0280DF7558 |
8EC7D73F9E40E9C71472815C893CA69A42FB99F0A719527AB739EA3238FF006B |
F376F7478E594B3145DC81BE65C6490003C632791EE6ACCF07D9677F2DD02452 |
E539CEE5CE4306C00C0607E7C0EB8AF044B24DB26DD1B020161C151C0C638E7E |
B8E86958061E0798C771E0677F2063A1EFC640FC3BD483608C33AA96C70A467A |
F4C63BFB1C7EB524D686DD16369BF784091500C8008EBF5E3F1E08C8C1A88856 |
00121492724E7F3F6C629A403CEF8E41D032F4611E0E01233EB9EBCF5FC6945C |
9480C233B01DC0150474C120F6FF00F57A0A43B163D9E8370EBDFB7B1E9F975E |
82872C572A172482DC60E4F5C0F4CFF914C0511F3B18633962C4E38E3AFAF1E9 |
EBDEA468A44897A329CB06073D81391DB14BBF3018C48A5700F3918CE3A7D3A6 |
7AE0FA746B930DCAB19177F52CC77007B861CF7E08239A60424E54E081F4C9A8 |
E48962C012A480A0625548009009539C1C82707B647191CD582E49C96FBABB40 |
DA0FF9FF00EBE7AD453200FB15839EB93D0F152D0103232B0CED191C0183FA7E |
1485519108383B7E6C7D4FD3DA9E41287CC2DB973D08EF4C752A428660A73B49 |
18C8CE33FA54318D18078C93CE0707E94CED4E6254E01C6707839F7A43924E7A |
F7A403B7ED3FBB2CA31EBED83FD6994A09008E3918E4525200A28A2801460919 |
381EB406210AF182413C51C6DF7CD25002E0D2538BBB840CC5820C282780324E |
07E24FE748E02BB2860C01C023BD00251451400514A718180738E727AD250014 |
5145002B29562AC08607041EA292A71039848D8DBC49B7040073C0C0EE4F4E3B |
7E349F3160DF2A803CC0590004FA01DC64631D3E9CD3B010D14F8C02D9383819 |
00F438EC791DB34A03444654E5949055BA8231FF00EBFC452023A50A4A16C8C0 |
20633CD0CBB40E464F51E952342CA59763160C40201C71D78C7D3E9401151DE9 |
4B1200249006067B53E105B7A0DB9653CB30038E7BFD3FCF4A00601904FE94E5 |
0A77124A71F2F1C1A4EABD401E94E5C7041231D4FF009FF3C5340211D47A75E3 |
9C71526D62005C67D41FC69A8FD570183763DB9F6A9155CB6E009E3AF1FE7B53 |
405AB5B70D70AC51D95833110A6F60AA09276820E00193D3804F6A89F280F3D1 |
41C33609E871EFDBF2CFBD69E92F66AD3A5CFDA4CA6178EDD6DD17E690A301BF |
8C907E55DA393BCB6E18C1A17B79717F7735E4CEAD24AC59DF9E4F73DEAC4564 |
7F98ABE187AB76E7AFB54E212660BD1B3B4EE3B71F89200FC695DE031B461094 |
590BC6CD8DDB7D1B8E7B7EBEB4D322A6241B860FCA4F51F9535E6048636500B0 |
C2162A1FA8C8C6791D7A8FCE8590C6AE548DD8C60AE73F874FCFFF00AE356EAF |
6F6469E69E7B7F3A550D88A289548740588DA000C4100E39F5E49AC72A1860F2 |
2A8458BA311F2DEDA790E514C819000B211860B83CAF1D703AE3DCD400A7627D |
F1FE7DEA799EDC943017C145DC180E1B1CF42723209CF1501604654753EBD6A4 |
6287658C80AAC0E3AA0278F43D57FF00AD48725005076E38C1E83DA903700E09 |
6033C03834F0C0647CB9033D680248C21E6543B738C8FE47D738E991DE91C22B |
6CFE0E483804B7E5DB8F7A6AE390D9C30C70071C8CD2B05563185552876928DB |
8123BE72453004381F2BB6471D3AF1FE7F3A72904303F2F1D7FBDE83F3A124DA |
E59977E41187E40E303F2EA293270464E0F38A6200A5C600FBB962738E3DE936 |
891860162E48751C0209E831F9FD7B52E78038E3DA9AC7785DEA80F03EB498C4 |
C7557439C0080640518C9FA6783F89F6A86EB385263DA727258E598F1927BFF9 |
FAD5A690247248373FCC074C023DC0FA74FAD453C972D0B031048870C8BC8539 |
EA475073EBFCAA656B01576B4859D9F2792C4E4FE24FB938A578581E57661724 |
6D6E3071CFD48FA64F6A91A34E7648A17602C5D81C6790077F40703AE7B52299 |
85C2808BE667850029C839C71820E47B1EC2B3190282CC146324E3938A56777C |
6F666DA368C9CE07A54B388966014295D80FEED8919233DFD09C63DBF1A82900 |
52B29562AC08607041EA292A71039871B1B78936E0800E78181DC9E9C76FC680 |
20A2A6F98B06F95401E602C80027D00EE32318E9F4E6991805B270703201E871 |
D8F23B668019454803444654E5949055BA8231FF00EBFC453197681C8C9EA3D2 |
8000A4A16C8C020633CD254AD0B2965D8C5831008071C75E31F4FA5465890012 |
4803033DA8013BD281904FE94F8416DE836E594F2CC00E39EFF4FF003D29BD57 |
A803D2800DCBFDC5FD7FC68A6D14C09DB73C433329007209C741C7B93CE3A7E3 |
8E8FFB3EE5605E3DF8054F0A197A641240F5CF7C8FAE212513217961C6EEA0F5 |
E808FA7F9E8A5155A4CEE655254118E4F6C9E47A9EFD3F1A00B6E9E6416EAD7A |
AF94DBB580FDD73D0927FDDE476CFA1155DCA085654880F30B2B291F28C63A72 |
4E79CE7F0F5A0C8F8842FCAC470EC30739E0863E9803B6307DF28B123CD1C64B |
20638C8425883C8247BE474FFF005B011D83CA8C55155902F2720606DC9C73DB |
3FE34D60AA806C6E46558F19FF0011C11FE714D0DF2152AA7D0E391D3FC29D28 |
50576BAB9C73B5700638FE401FC6900CC1DA5B8C038EB49DAAE985A7B196E049 |
6CA2194208B79DE77671B41EAA307E99E7A8AA8C102A6D662C47CC0AE3073DB9 |
E78C7A50D000C8E4671EBD297839047BF1E9481CEDD849DB9CE3B0F538F5A94A |
23CECA1891BB8665C719EAC0138FA0CD08053B4804ECC023A2E38F4F7A5DF202 |
0283B1781CE40E79A4036E4160D86C6ECF1DF9CD280BB76827701ED5421CB961 |
BBE5DABC1008CFBE29F10D9212C88871B90B29E4FA7423FF00D5510550983920 |
8E303193DB38EA295519E578D158B052C769CF00673CFA0E7F0A605DB5B586FE |
5487CC304800DCBB4326D009739CE77600217F88920638067D6ECAD6C2F4C567 |
756F7D6EF12C90CB123A80B9C721957E6C03903201246720D502CF657212649E |
DEE23721F7A9DCBB78C60E39C8607355925627E73C7F2A2E80BB185440D244E1 |
3CBCE73DC83B48F6E3DF23350C4D05C4EFE64A605546642C09C91C853819191C |
67A6719C0C91A1AAEB725D5A0B58A08ADAD55DE48E089D9847BC26E192C4ED26 |
356C13C1CE3158F190372B9DA3A938E73D87AFD686FA012663C3170CC48F9769 |
EBC8EB4A572C543E723385F7EBF8D40A006C039CF7F6AB211400D9521D7206E0 |
71CE39F4E9DF9A4B5014281F74E4FD474EF4DE8C086EC3E5A95EE8359C711822 |
591339940259C123AE4E38E46401D4F278A698D122539FDE36195783C0CF5E72 |
0E474C73F4AA0028773A952A77739EBC628030701B81DA9D2CCF70DBE69DA47D |
8B18727380A30A33EC001F8518C1240193FAD300C8EB9E0F4A7C723C52092376 |
475390CA7047E34D1F36D0ACB96E9CF4FAD24DFB999E0954ABA9DACA477E98A7 |
71133C2D104126D53200E33D541CE323DFAFD307BD55790070A73CFBE05390FC |
A00E0FA1ED514E46F652E781C63919F4FCBBF34A4F4191B4BB94FC830401EC0F |
AFF9FF00F52C5218D1C1546438539C123FDDCF4E9D7FFAD509A76F7DE1F736E1 |
8C1CF231D2B2B8C91A4DC91166F30AF04367803A0EBD3E98EFED4E6895EE9E3D |
C1768DAB8420B91C018F53FE350B3BBEDDECCDB46D1939C0F4A7EF081A3C2B2E |
30580E4F5C1C9191F8638A0059564B7630B7C8F8C48809CE73D1BDFA71FD7350 |
D48EA4BEC122B851C1C9031D78CE3DE9A586085180719CE09CFD68011B1B8ED0 |
42E7804E6A66DCF10CCCA401C8271D071EE4F38E9F8E3A42CC598B312589C927 |
A9A7928990BCB0E377507AF4047D3FCF4009BECFB958178F7E0153C2865E9904 |
903D73DF23EB899D3CC82DD5AF55F29B76B01FBAE7A124FF00BBC8ED9F422AA1 |
4556933B995495046393DB2791EA7BF4FC69E647C4217E5623876183D78218FA |
600ED8C1F7CB00728215952203CC2CACA47CA318E9C939E739FC3D69AEC1E546 |
2A8AAC81793903036E4E39ED9FF1A55891E78E324A0638C8425883C8247BE474 |
FF00F5C41BE42A554FA1C723A7F85201CC15500D8DC8CAB1E33FE23823FCE299 |
83B4B718071D69F2850576BAB9C73B5700638FE401FC6AC985A7B096E0496CA2 |
194208B79DE77671B41EAA307E99E7A8A2C052ED4E191C8CE3D7A50C102A6D66 |
2C47CC0AE3073DB9E78C7A501CECD849DB9CE3B0F538F5A403B3FEDC7FF7CFFF |
005A8AD0DB65FF003F97DFF8049FFC728AA0334ED2A3008207393D69B4529C12 |
48E067A5480AAC36B292D83E87033EA7D7BFE74AC0453108EB2056E180E1B1DF |
0474FA8A651400B9191C7E54E670C8A3600C0F2C3B8C00063F03F9D301C1C8A5 |
7464728E0AB03820F6A0015991832B1561C820E08A140270582F079349450019 |
A9591E155DCA76C8BB972319192323D79069B1140E4B8246D6C63D7071FAE29A |
36F7CF4FD69812AA9C7C8320739240CE39EF4F05F01A30D9C60E0E01FF003CD4 |
4396DC3939CFBD6ACBABDBC9E1A834AFECFB51347334A6E806F35B200C672463 |
8E9C0E3A6492690142044795434AAAB9C977E8BEA4E39A9609228A79DA42598C |
2EA98000248C739ED824F4CF4FAD552D95207DECE49CD68C113DED85D116A19E |
DAD89DD1C7CA8F354962547A311963D0F5C605084678469107CDF2A03C93D067 |
B7E7D3EB4F89961B94708926DC1DAE3E538E79E95248B3471A5BCA582C6CC3CB |
E01539E4919E0F1DFD3DAA2DDF286DC31C6703A71F5A2C326BE36FF6B91ADE07 |
8A3E3F772481994ED19048C77CF18C8E879AAF8221538520658608C8EDCFE59A |
41818CB63A72075FF0C51950772E38E01F7EB9C5201A32ABB81C03D8F434A372 |
8DD961C638A404A7E3D47A8A70081872480D8C0EF400E2FBA32C71BB6F383F85 |
0BE407E373820F1D307B751C8FCA9E6D264B586E5D9238E4DFE5B16C96DBD471 |
9C75EF8EB4C826FB34E240AAC0065F9D030E78FA679A2E03E49CCAE656C64E00 |
08A14703D071E9FAD3963794A2EE033C12DC01EF55B71542B9F94E0950783FE7 |
FAD6869C649AE51638E462837BF94BC8451F3138E7000393F5AA4EFB88867B43 |
0420F9CA5CF58FBAFE3D077E2A07085549DD9C631E95A372D085B9528667720C |
7207C05EE7231CFE98ACD6E09C051C672783449580154EDDC1B9C939C6781519 |
CF43DA972061B1939CF348462A18C4A28CD14805033DE928A33400F58D9B0307 |
2C3E5183F3738E3FCF6A029751CA61463A807B9FC7FF00D43D2911B6B83F363A |
1DA7048EE3348318390738E307A5002538ED2A3008207393D69B450014E56015 |
9496C1F43819F53EBDFF003A4382491C0CF4A4A007B0114C423AC815B860386C |
77C11D3EA29B9191C7E5494038391400F670C8A3600C0F2C3B8C00063F03F9D3 |
55991832B1561C820E08A1D191CA382AC0E083DA92801540270582F0793499A2 |
9F11457CB8246D6C63D7071FAE28017CB5FEF7F2FF001A2A3A29801EB45398B3 |
00CC49EC093E9DA9091B40C0CF73FE7FCF348073AAAAA1122B16192003F29CF4 |
39FCF8F5A675A5762EE588032738030292800A294E3B53E18BCE9563DE899FE2 |
73803F1A008E83C9C9A28A003A5598916EA68A28D12362B825E50AAC4739258E |
0556A3A5004BB890B217C9CE081D40FF0039A6657078E7D734831DF3F514719C |
FE5DE9DC09A13189C19959D318C29C1271C6383DEBB2F0FCFA535BEB26FAC2FC |
91A7A7926270F284F323C83F2E1415E03F18563C36571C3E7D063E957566860B |
794238779E10388F1B183A9C7E4A7919EBF95458896FA4822692D145C88E177D |
B1BCF95563B4121760C676F3D0F0B9FBB83477961B5470BCF04E291E57964DEE |
CCCD80325BB01803F2029198163DC76F5A5718BB9412C01CFE78A67A9079EFCD |
04FB51934804A539C019E9DA928A404B0C12DC1648519C852EC07600726A3605 |
58AF1C7070722928A005DC718F5F6A556C1CF23DC5369FBDB3D40C8DBC0038A6 |
03DE77662C7E563D80C0FCA9ACE1972477E7DEAC8D3AE0E907537D82D849E429 |
DE0B17C671B739C632738C718AA79E3A73EB436C0914073FBC7C0543838CF6E0 |
7E7DE9730C9E5AED10ED4219C65B71E4838EDD871511231D29763F97E66D6D99 |
DBBB1C67D33400DA788A431197637961B6EFC1C6719C67D78A653CB8F2826C50 |
43125B9C9E9C7A71FD4D20194A49200E3818E0525140054D05B9B832012449B1 |
0BFEF1C2E71D867A9F6A868A00283D69C8864758D465D98051EB43166019893D |
8127D3B500369EEAAAA8448AC5864800FCA73D0E7F3E3D69A48DA06067B9FF00 |
3FE79A1D8BB96200C9CE00C0A004EB4514A71DA80128A9218BCE9563DE899FE2 |
73803F1A8E8003C9C9A3A5145001451453B8051451DB348096D6349AEA289CB0 |
5760A4AF5E6AE6B1A5AE9374B6FF006959E4DA198A00540232304120F07EA0E4 |
1C115411DA3915D0E194820FBD3EE2E66BB97CD9DF7BE00CE00E0703A53D2C04 |
6319F981231D8E285C6E1B890B9E4819A080188DC081DC77A4A4014A4E6928A0 |
028AB32DDB49616F6A766D859D862300FCD8EAC396E9DFA76EB55A802C5B35BE |
D956E9A7DA236310888C799C6339EDEB8E6ABD2B6DCFCA08181D7D7BD2500145 |
14E75D8C06E56E01CA9CF519A0045567385524F5C014678C629C1F6AAEC055C1 |
39707A823A7F3FCE915432B92EAA5464039CB73D071F8F3E9400842ED5C31248 |
E463A5251450014A0807900F1DE929C8159B0CC147A919A006D1453A490CAE5D |
82827AED000FC8500368A9AE2EA5BA72F2ECDC428CAC6ABC2AED1D00EDD7D7A9 |
E6A1A009ED16D5A722F1E548B639CC4A18EEDA768E7B6EC67DA9C6EC1D396CFE |
CD6E0894C9E7ED3E69E31B739FBBDF18EA6ABF1B4727767918A4A6014A401D18 |
1E9D2928A402EE2542E4ED072076A060119191E9494AA40392A187A5002514AA |
4060480C01E87BD21EB400529C64E3A76CD0719E062928017181920E0F4A4A28 |
A002A5B58D26BA8A272C15D8292BD79A8BB669C8ED1C8AE870CA4107DE802FEB |
1A5AE9374B6FF6959E4DA198A00540232304120F07EA0E41C1159E319F981231 |
D8E2A4B8B99AEE5F3677DEF8037600E0703A546400C46E040EE3BD37BE800B8D |
C3712173C903349451480527349455996EDA4B0B7B53B36C2CEC311807E6C756 |
1CB74EFD3B75A00AD45145001452B6371DA085CF009CD04000720E476ED40094 |
538BB32AA92485E00F4A6D003812AA72A0EE18048E9F4A45215B25430C1E0D39 |
A42D1221662149C02DC0CFA0ED4CA0072A6E563B80DA3383DF9C607E74DA28E9 |
400AC0062010C01EA3BD253E28A499F6451BC8F8276A0C9C0E4D3280158966C9 |
C67A7000FE5498E334AA327149400514539519CE00FF00EB5002B6C2A81376FC |
7CD9E99CF18FC314CA7BA98A4C03F461C645329B00EF4F531F94E195CC848DA4 |
36001DF231CF6EE296010176F3DA455D8DB4C6A09DD83B41C91C6719F419EBD2 |
98B8DC3712173C90334804A7091C46D1863B18862B9E0919C1FD4FE74DA2800A |
50AC41214F03278E828562AC19490C0E411D450599B24B13C01C9ED40094A719 |
F941031DCE68032714A23731990236C04296C7009CE067F03F95002062A180C7 |
CC3078A4A2948F98E00FC280128A53EB8E2860558A9C641C707340094A401D08 |
3F4A56777C6F666DA368C9CE07A5496D6B35DCC91428497754CF6058E064F6E6 |
802134E0EEA8C81982B63700783F5A546F2A50C5558A9CED61907EB4D032719C |
7D680018079E7DBD6929C58B1007A600156AF74F96C62B7333207994BF943EFA |
0EDBBEBD45302A0C67E6048C7638A4A518CFCC4818EC334948028A560558A9C6 |
41C70734AEDBDCB10067B28C0A006D2AB6D0C3683918E7B5253E5732C85C9C92 |
067E50BDBD0500354856C950C307834A5088D5F1F2B1201F718CFF00314DA280 |
1402C7031D33C9C5251DA8A0028A28A00283D69F23AB84DB1AA6D5C12A4FCC7D |
4E4F5FA532800A28C5140051454B6D14735CC71CD3AC11B300D2BA92107A9001 |
27F0140115145140162D2EEEAC65371693BC120053746FB5B0C0823E98CD4038 |
E4F4E6929CBC1CED0DC1183F4EB400814919A936EEC2E7A74E339A60E5474383 |
8039A972CA7E473BB181EA060F1F95524024AB1EEC465F6851C3800E7033FAE7 |
F21525B48F03B00ECBBC6C6C1EA3D0FB74A8A31C05201DDD2A49A2304ED1301E |
629C1D873C8241E47F4A6BB80D9B0EF95048C63A7435081BBA9038EF5A2F3CA9 |
A7C96A98F29E4595959413B802339C640E4F1D3EB8AA7B8C79456C2C980E3E87 |
DFE94496A0440648039268C138E3AD3F6FCDC2F000CE39E69A1770CE73EBED53 |
601F6D1C72DC46934C21899B0D2152DB47AE075A8CA9040F5A90FDC6084107EF |
7033FE7E9ED4E6080ED04673CF1DBF0A760232C5882C72471CFA630290001864 |
F19EB8E2A42A11477E483CF7CD3E344DCACD948C9C3305DC403D4E091D28B010 |
9248DAFB8951800F61FE79FCE943304EB804E704707FA52AB6490DB880395FF3 |
D295390B95EBC039E334009B31C363039C838C8A63039E98C019E29FDB785E3E |
B8C1F6FF003DA98DCF7E9D46318A4C069A518C8CE7AF341E58E280327AE3DE90 |
0639E01E7A56DD9584CBA4CF3C2E37BAA100B6181F302F03BF51CF6FC6B31259 |
57C9CC9B8459DAAE37AA7249E0F18F6EF5D5E99AE5BDAE81AB593ADB491491A6 |
2336FB1DFE7424E4023E5EC0919EFD00AD2084CE425044F202C24218FCD9CEEF |
C6A2C559BA996E65DCB1246A06D508BB475EA476A89D591C875DA48E9D38F5A8 |
68648ACB04B1CB110ECAA18E470ADFD7069CD7CF25CB5D4A0BDC1E4393FC5EA7 |
D6A039C02368C63A75A741E52CEAD3EE310392146777B53B80C28C1031521492 |
01F5C537AD5ABBBD6BC9959D76C4BC2C6A718155E42864631860993B431C903B |
64D260368A28A40145145001454B140D2C33481E3510A86219C02D9207CA0F2C |
79E83B64F6A8A800AB71DF5C41A74D6402082E19646CC6371DB9C61B1903AF4A |
A9450014514500145295200241008C8CF7A4A00334538F4C641C743CD3A1F2BC |
D5F3F7F97DF6633FAD00474638CD2E06DC8CE7B8C700558BAB58EDE2B674BB86 |
73347BD963CE6239236B6475E33C7AD0041E5B88C4854842480D8E0918C8FD47 |
E749B4850D83B49C03DAA586D66B88E79228CB2409E64A47F0AEE0B9FCD80FC6 |
A37478C80EACA700E08C704641FC4106801B45145004F6D0CF732EC823323846 |
7200CFCAAA4B1FA000D34025B0BC30E00CF4F6A582E66B59525B69648DD183AB |
23105581E0F1D08A5C701CB64AF3826A90006604019DBD31EFE9C7F3AB11C395 |
F302F991AE371278FF003D69AA411D00008F947383FE73568A793B01DC8DB738 |
3C10C33839206013DB9AD1210971209672E18B640E4FD07D2AB3AB17DCD86FEF |
718FD054EDB55B3149B948E1871F51FCEA3031C76A6D5C4401327E61B78031DA |
9CA773920F0393E9DEA431A16C92C3FDDEE699B719DAA01EA0F22A6D618D2842 |
371C019E47F9FF002690A29E39E339DDD29E1BE4C63E7272C41EDDBDFBFF002A |
6AA654671C1E4E79FE9458049321491D412370A8FCD7E4E78EBCD5C85635DDE6 |
976F94ED6539C371D47A718EBC75E7A18654070300003E82934F7021C31DDC06 |
F5FAD341CA60000E476CE6B4744D21B5BBE166971040EEACFBE6708A3682719F |
5E3FFAF59F22794ECBEF8EA0D4DBA8C59236859E390157562AC8C30411EBEF43 |
448B6F1CBE682ECCC0C583B9400B86CE31839207FBA7DB31753522C648CB6543 |
0F9491C1E7FF00D7480746C8B26176B2E7FE5A0C03F5E78A7DAA452DC431CF30 |
8E26900676070833C93804F4E7804D3A2B59DECE69BCA2608986F21412A4838C |
F70091FCBDAA6D260B492676BD95E38C292BB57258E0903A1C648033DB39E718 |
349010CC8219E58D9D182FF146720FB8FF0039E6A6B69DE2692E60F2E1D8235D |
84121F9040C73924AEEF4E0FB0AB565A2CBACDFCE74D81DADA33BB0E7779685B |
00BB00001D32DC01C9E80E2ACEF32DB1B37F396089B7792EC711BF0A4E08F949 |
EFF976A761104CAAB2EC8D8953CE08DA4E7F3156754D5AEF58BB5B9D42633BAC |
491A1070AAABC018038E3278C7249EF55C9036B80393CE5F238FF23F2FC9870C |
0854E3B15F5C73430224254890107611804512BBCB233B9CB31C9CFAF7A7348E |
E1436DC28C0206303FCF7EB4BB925959A53B01EE883F40302A064345078A2900 |
52E4E31DA80327141E7914009454889198A466936BAE36A6DCEEF5E7B5224664 |
952356525C800938009F527A500328ED9A9EF2D65B1BC9AD27DBE6C2E51B6386 |
1907B11C1A648267459A412153F22BB6483B401807D8638EDC50047452962C72 |
C4938C734940051451400A58900124803033DA90F5A9A3891B01A460C4162026 |
7007FF005B27D3A73D70C31FDC0194963EE3D3A93C7FFA8D3B00CA53B7036927 |
8E723183520D8092F19C6DE36B639F5E41F7A8D81C93CF5EF40094A69314A318 |
391DB8A4025079A28A0029718EBC7B50149FD69ED8DC0A2019006339E4019FCF |
AFE340125BDACD73318E089E57C16C2264E00C938F6033EC052A7EF176863CF3 |
CD46B900152493C6454D1B1DC176F6E7DAAE221E0118251B606C120FF5ED9A95 |
983040E7249FBE49F979EFF8F3C7AD30A6E5031955078038C67BD394831843C0 |
2493C019F42493FF00EAAD00591D4993CB8C2A96CAE70481E9918FE43A545904 |
6E4C13D334F219158312A770CA9EBFE7B7E34B8314A46D076FCB8238FCA80185 |
B9C0C13F5A77CA53E4DCC47396C00476FC7AD3E40764609CE573CF27DBF403FC |
9A8F695E18609E68018421273E9CFF009FC694285390DBBD71DBDBFCFAD5901A |
4872DB42AE76E085C903D3BF51DB3C0A7045473018816660301B054FA679EE7F |
4E68B0157209EC71E879A408A33BC13D48239A7B60642E48E71C60D3641B6247 |
2C02B311D41231EC391D78A1815DCEC71B060F1D7B7E3519395E1F20E7E5C74A |
91B97DACF8ED803A7FF5A98DB554100316193C118E6B26323AD28E092E678621 |
31C9C22EF7C003B73DAAA5A2A9BA40CC114E79619E2B6ECF4FB6BA491E4D4628 |
4A825212AC65931E800207E27F0355042667CD6A6DE46B7675251B9319C8FCEA |
ED94124D18674BA7855C041106E5BD070466AAFD9D91497460EE76A81C1FC475 |
F4F4EA29A246518562A3041C13CE7FCFE95A2D043A44B9B4966B794C904884A3 |
A4830C83392A46383F80E6A399182226F0C070140E8BD41C91D0E7EBC7414E76 |
9DCB4CD1B156246F55C03C0CFB7719FAD430C58466DE1501F9491F7B91C0FF00 |
23F9548CB9A969F1E9CEB0349BA7DA3CD84A30789B18656C8C641CF4CF6F7033 |
4924AB22AA8519C1391E9D0F5F5A9EE2EA4995797C2A2E096247031C67B7F8E2 |
ABC892AA24AD1C8B0C9908ECBC30079C1EFCD4C9A01BB8B0E4F3D46718E2984E |
7F2A7961B082A77E7AE7B7A629BC6480739E3D2A18C6D39DDA5919D8E5989627 |
1DE9B52F91D409622410B8DDDFEBD3D79E9C7D32808A971D39A704F9B952CAA0 |
336D23A71DFB75A02A6CCEE6DE4E00DA31D3D734C06B00188043007A8EF467A6 |
7A52514800F5A952EAE234891279156273246A18E11CE32C0763F2AF3EC3D2A3 |
E368F5CD250014514F8C2EF52FBB667E6DBD71DF1F8500328A7796DEABFF007D |
0A29D809623BE58D159948236B649653E83EA4FF00F5FBD49E5C60AC8428DF82 |
ABC9520920FB8C631EBDEA37998C2B179A5931BB073C1C63FA0FC294066F2FC9 |
6CB22E7701B76F39EBEB9EFF004FA5301648C34A4315524024E78C9009CE076C |
F4C714C906E70ECBB11B04955FCC81F5CFB55CF26648229246544FBA09387DDB |
8F38EB9078EFC76E38AE8C14F95E69015F2AEA4E075C1F5F4E7A8E78A6D0103E |
31C67AFCC73904D0FB59B28B8180319CE4E3AFE352C813CAF95896620B13818E |
3D31EA7AE7F0A6018CA3B67693850D919F5EE3B0FCAA4088D18A705DDD2B66DA |
2825F2A2FDF0B5965124BB152565DA48519032BC16EA003C1C600C095C0C7500 |
26EEE1873523B6F61B80CB2851B0000E38FE83FAD753A8F83F51B3D2ECEE0ECB |
9B6642914B6A8CE1DF3210A4100838009CF20303CF4AE5447B9800E33B4E48ED |
CF6FF3DEA9AB0870036606723209C76FF38A96353CB264A81938FF003EB4E8A2 |
240391D095C8273D738FCAA68B6CA64DEA0391F2851C67D7D318073E99AB4806 |
C45958B26EDC47519C8FF229F142CF244A02B1947CA19B6F3C8E49E3AD362675 |
906C6DAD9E3DCF61F9E295B19DCF939E490D924F19CFA77ED5420DA180648C64 |
29DDF375C77C75F7A6EFFDDEDC60F720E323AE3F3FE95285852472C77A2206E1 |
C0DDD33D79EFF5A644DE6B051265C72AA791C638FD31D3D280144A155403F301 |
F7760007A71DF8CD35CB4CDBF0C49201E49E7B0A9E323CD52A4170CC03B6002C |
41C6E2781C81DC8EFEB51F9EAB745D4811B121CE3763390704F3D0FE7CFA5002 |
3940863DF9DB8D8540C639CFF3EDFE14E5958471BA308F0CDC820648F60338E7 |
1CF1D7DE9971E5A4EC91ECDA318DA49FC8FBF5EF4C47231E5AA865CFCDD3D7D7 |
FA51718E919A560801F91718CE71C7273DFA7F9C532E209132AA0370482A7218 |
77C7AFFF0058FA1A1B7C8924A03BA29196C7393FFD7EF40999E070EC4E0E5CAB |
6D2C391D71FED1CE7B63B0CD4B60558F648FFBC7C6D048C8EB804F5FAE3F3A7A |
F96FC1D9B49E8BC104F3C13F4C64E7193F8BDDD13F77B818F0182BC7824E738F |
5191DC7B7E0D94BBE5C7DD51E704D9C2962B9183DBA7AF18F7ACC649048B3B48 |
EE1115141D8842F1D3383F78F3EB9E4F6E46A836B69A73CA22667972114CA707 |
AF2D823A7A563400797B9D09544662C801DA3A0C81823E623927B8E0F42EF3A5 |
91E3326F98AED8D016241C741571959089E19045BA666085948DA85830F607FF |
00D7EF9E94C9639229584AA223C300F9E32323DFA7F9EB4B25CC4B751B4C0398 |
F25963002E7B28F6F5FF00398EE2E269A32D2615376E2A0639C019FAF1FA9A77 |
0259EF5A568408E311C6AAACB18DA1C0EE7D49C75AA78DA194E412739F514D04 |
E492A71D0E4F4A591D8F270CA3FCFF004A8BDC047DAA0AF1907A1FF3FE14F9AE |
6E1ADE1B59267682125A28CB6426EC138F4CE067E951CE636998C4A56327E507 |
AE2A3A96C639C2A9C2B06181C814D3CD3848C2368C1F9588247A919C7F334DA4 |
03A35CB72DB40C12723239EDEB53467CC0FD006FBCA4800B64E31C703FA67919 |
A8A3C6F077AAE083F30C8EBE983523B97711E52303119DBD08F52475E99CF34D |
01224004C13EFBB9C004E194EEDBC8CF5EF8CFE94C8D32CAEC0953D549C1C1E3 |
AFAF34AEF279B2BAE3058EF6FBC012738CF3E9D7BD4F716D22F980C2212492AA |
71CA83DBDC63D727231C55014946EEA40C2F19EFFE7FA528F2FCD556663103C9 |
00038FF1C54E4F9FF3191324618B2FA9EA3B9FE7CFA5452C786544CB109B8E07 |
E3C7272295808B078E3AF4A4A90F2B92402401800631F87E1DBD688914BFCE48 |
500F206EE7048E33FE7DFA52B011D4D19DB2212AB20E0946380707A1EFF956AA |
E92D7D3BD9C2615BA823DAA8E0C6F3B6EDC49DE700E091EFB40C64F26BDA45CE |
9B7D7115CDBADBCAB2B2880F5501981C63B0231CF5E319AA516065EC8BFDAFFB |
E968AB7E41FF009F98BFF1EFFE268A2C0670239040E78C9ED4F8E57404093682 |
08C7AE411FC89A8E973ED5004CB3ED550551BFDE1F873CFF00FAB0314AF809B2 |
390F94FF0031048C8C678FD4FA67D2A25C860A319278C9C7EBE9522B796C1B60 |
24673823A74C0E3AF5E79AA01A15D8FDD3F20CF4ED9EE7F1EB4DE0677648C1E3 |
814A59D72727A6030E3A8E7F4A4620123040EC33938ED4807C8EF2BEF6DB9C05 |
F940000031DBD854D04DF64BD8AE00DBB250E003C8008231907A7E3F8D56FE1E |
073EA074E2A5573E5E02AE0904EE418E338E7A8E0FE34D01B979ACDDEBB158DB |
CF7892986D5A32F75205D815A47501B039DBC0C93927AF3819106E24029BCEEC |
608EBF953510A46C4F1C0271D78AB2C5648951222AE1B99338520F407DF82739 |
AD15FA887248563030CDF2306C8040078F4E99E7EBD3079A697797CC93AF1924 |
9CF1903A9FC29EE3C9DFB506D5F96451CB1E7E9EF8E38C8CFA524616458E353F |
BC61CAEFC02DCE3AFE007E3EB9AA0115DD14A284E7924E3A75C7E838A218BCF9 |
02230C95DD920F6193D33C0F5F4A46971B55115F693CB73918EDDC0EBF9FB546 |
D26C32AB29C91B7E64008C10471D8F1D41F5F7A4D813890C1FC311DC30BC11B9 |
795E3D3A7B1FCEA0B794BB28276AEEDDBB9C7193C81CFE3DB9A876ABC8CC0900 |
839E7B76E7A5349C9C8DBB7AB63B71EBDFAD4B605AF39EE1918AC65C95542727 |
6E31CFBEE3D47A93C5303349191B1DE241C0249DA49F5CE3A8351C2B25D36C89 |
1A49988DB1C71E4B000E7A739FC3B9E78E52378F2C1D801B4721724723A7F9FF |
001A4981207CF391CE4E06307E94808964D818807A9238E69858121B27A75C7F |
9FF0A0928C0630339271D7F5A770000B100FCC0F62C1793C7D0F241FF39A73BB |
9254B60172C49C9E7AFF009FA9CD3564646CAE54B67E603EF03C7F234C0C1242 |
4ED20763CFE148025DD0CAC922862571F30208E3DF907A7FFAA9666616F1C4EE |
CDB1884CB1C2AF07E507A03927A7A7BD32798CB296D9E58FE140C4851E83249C |
73EB492ED25584A64661B9C91821BB8F7FAD4318D5200208E3AF5A91CAFDD550 |
A463248C8FF39FF0A646A5DC202A0B10016200FCCF03EA6A4668CA2887720C0D |
EAEDB833773D06073D39C73CD08063A1D81B690A795F4C7FFAEA59198200D92C |
C3A629C3F75F2864DBC8F95C65B920E7F0FD3F3A6961B37643381C1C8F4AA102 |
1DA846FE1B25B9C8E320546ECA395055F3CE0F4A8CB1E40E98C529DA5B91B401 |
FC3CF38FAF734AE31092C7269295480C0901803D0F7A1D8BB96200C9CE00C0A9 |
01636092AB91900E71FF00EBCD37B52B6D046D24F1CE4639A4ED9A002978DBD0 |
E47539ED4945004E279045B4150B9E31C1C7208FC73CE7AE07A548F2A4EEC252 |
431006F2C4E08F5CF2474F7E323D2AAF5E83F5A7A8DC0E10B6064E3B74E49AA4 |
C07B8914ED2A10C795385C12739E7FCF41519F9831000079006702A452AA080B |
CB636B11DFB81CF4F7F61D29A252CBB0B36D24B600CF38C7FF00AFFF00AD400B |
1B08DC3B20930D9D841DAC3BE718FD3DFA5220F9B073C8381D3E9D7DE99D48F5 |
27A629C1F66307A60F5A00D3D27579F4994CB1952C881A259543AE7703D09C0E |
87F3F7C8D3F126B1A96B773A85D6F965B48A7119756FDD04258C69B3240036B6 |
00240C63DEB9D6DAE142A29DBD5D7393CE727DF9C71E952C6814C61C0C0C8207 |
7FF3CD52BEC22AEE5FEE2FEBFE34568EE8FF00E7827FDF6FFF00C5514F940CBA |
01C1C8A28AC863DD1E262AC0820E3047714315230001F87A7F8D34100302A0E4 |
707D2850CCC02F5ED8A60398A919C60F71DA8C85070727B1C51C64165C679E49 |
E7352602465406525979FC0F7E3DA980C43B77602F3DF1D2A58E409BC06DACEA |
54904E483EB4D0A486933C8E082093FE78FD6A54489D1CB3C8180FDD0550431C |
8C83C8C0C13EBC8031DC3404918C45F3392FC6063B739E7F2EDDCD48C46D6DC5 |
806E9B8E40C0E391D783F871DB22A2E5573CED5C678E9D7D3E9FA54FE4FCA43B |
80C8C414519624633D3B62B44223460EEA1902863D9B919FAFA7F934E540AA8C |
10FCEDB773A92A48C700773D33D7AF4A6BC6C06E2A362E4A903EF741C67934D7 |
9E4930240CD85DB966CF539381F89FCCD000F22B298D005EA482DC0FA67FDDFA |
D3266DF20DB297C2AAE7278F6FE629F9728C4C8E558E092C3E738C8EBD7FCFA8 |
CB5DC489B9392793C633EA00E9C7D7B8A96044C7392016C2648DB9C74073E9F5 |
EBD3A537CA91919D0315561B8007009CE07D700FE46A40CC8B1CE8DB2404942A |
0E77020F5ED8CF6F4E94DF2F7B3B4402B646141C9C9E30075A918C681D6468DB |
E665C8CA9C8E3DC70471D7D280DB6456236152090A707EA0F6A7B26123954152 |
46D20B024907B0EA0631D7A9071E81CAAAACAEE18A311D3BAF7CE3FC452B0070 |
C32154019FA9FC3A7AFE66A30E55B76D24E705493CFA7BD4F2C51312B114C06F |
BD9621871D3207A67B75EDD2A1742872393CF3CF7FF26A9A620C31EDCFA2FE9D |
29624795D88748BE56705CE33819C67B938C0F534F31C8B888232B9031BB8C02 |
320F3EA0F5F715185C361B93DB0001E9CD20203D4F18F6A548DE591638D59DD8 |
E15546493EC295946D0DC927BD0E02ED00738E79CE79A9B0CB70DA59BE8F7575 |
25FAC7771488B15AF9649954E7736EE83181F9D57B57852E22FB4C6D25BF98A6 |
5442159941E406C1C719A882B3025413819381D07AD250058BE6B47BE99EC639 |
22B567262491B732AE7804F7E2AB9EBC5145200A28A2800ED4514EF2DCC6D205 |
2514852C07009CE3F91FCA801194A919C7233C1CD1B9B685DC76839C678CD2EE |
2C543B310381CF41ED4DA0028A28A0055CE78EB4A84061B871DF0707148AC54E |
5490718E294905413B8BE4E493DBB7F5A005DC0367A8EF83D4D2B7DE187CE070 |
7A7029A0F278E3BE074A5555638C9C9C63A53003B71C6391DBFF00AF4F56C201 |
B79071907EB8C521DA026D2080B96E32739FA71DBFCF14E542A149DA73D0839F |
5FF0A6809037EE9514AE43646EC13D318CFA55855C14390CC4670AB9C1C90060 |
FE1EBD7F0A8044AA8922CC859890630A72A06304F6C1C9EFFC272071991796C0 |
C67AF1DF1D7F9569110987FEF2FF00DF3FFD7A29D4555846753823B2338562AB |
8DC40E07D69B4AA0160090A09EA7B57394058B1CB124E31CD033DA8552CC1541 |
2C4E001D4D4BE5E049B594F4C676F23AFAF0781D3E9F500646BBC919E833D09F |
AFE993F853A24DE0FCACC067E50467A13903F0E69AE8AA485627BF41D3B74279 |
F6ED56A18E516C032031BB12370C6318E41FF3D3E95496A046C84A829F22E725 |
B271923FFD7C54B184F9C3F0C06E523B93C8FD3FCF14FDA4C8331AA8DB860700 |
30C8E7DB8C74E78CD22B051C7DF2492CA7190474C74C55A5A887A48639B7AC92 |
A9273B8312C30739CFAF7A48D51C38760871951B7A8EB9FCB3DF9A0AEDF906DC |
29C82BDE95F8202A90879048E7FF00AFD2A80748F8428ECE0851DB18230307D7 |
03F5A877148B0586EDBF4C73C83EBC13F9D29191C2B36393F9FE9DA9E9222B92 |
FF00EAD4E4066E87F2E7A73C639A00666370548C01839DBCF3D7F0C76F6ED9A6 |
FF0006318F9B04800119F7C7B714F970400AA150E405DDF87E7C0F4E9D2A3C30 |
519DB9E8334809E082D2642CF2B0F2F1BC33637E4F453FFD62724718C91072B3 |
2F95F2ED19247CA4F7FD08E3E838A71791C2EF7762A02805B2540E703B01C9FC |
E9BB4B11BB83EA0D2B01661B74007992055557C97538593040000393FC3CE383 |
D72072C5522D8863C9206D3C1030482063DFAE7A71D2A4864860B49B225FB4BA |
81148B26D11F396C8C72480307381E87B445C48EACCCC72016381FE4FF009FA9 |
AB00C0983C807F0EF566E6EEDAEE59259E3F2DCAE0A5BC4A8830AA14E3F024F1 |
CF5EF4A9653BB2ABC6C819990EE52482A016C8009E011DAAA2AAE4B7191924E4 |
71430181559F0C58A633B979C919A74D01524900BB6080086E08CF5EDDBF3A89 |
9D9E4DC3903A6063B7F9F7AB96D034921D913CCB1A79ACB1AE0ED5E58F238C0C |
9CE08E3D39A95A8149865B686C1EC0F5FF00EB54B6BF62F22ECDE2CC6531016C |
508C093729CBFF00B3B7774E7247BD4D796C6DEE678DC08E5491A231EE0E4609 |
1F787040F51D7F2AA9B70A5720ED1D875152D010E73939E4D183CFB75A785390 |
0E7A678F4A46DB9CA290B8C7CDEBDEA46329723691819CF5F4A520023D3BE3B5 |
34F148028A5DA4A96C1DA0E09ED430002E181C8C9C76F6A0054DBBBE6240C1ED |
9E71C7EB4D3D68A5652AC55810C0E083D4500252F181EB494500145145002A92 |
AC186320E7919A4A7EE7740A5C9541900B74C9EC29110BB051D4F4182727D38A |
0040580E09033DA9C33B77E40393CEEE7FCF34E10B322617EF721B6B7279007E |
8718FF00F530E42950F95382403C671FD3269812AA03B4B9719E17E5EA391EBE |
DF8F34E21DB2063628C7247A54CBFEAD73170002DB49DADC719C77EBFAF7A50A |
4E5955B6A13E531CE54718CFD33D3D4D5A421502ECDEAF8C92A5700F6EBFE7EA |
334A256489977AF00819033CF6071C7E1EFEA728B18388A304E40E0E339E7A1F |
F3D7BD39482EA73B071820743EBEB56057DD17F717FF001DFF001A2A6A28B019 |
D45145603015AC9F766FFAE49FFA21E8A2A80A177FEB97FEB947FF00A00AD293 |
FD5CBF58BFF45D145543713196FF00EB0FFB8FFF00A09A6DBFFA99FF00DDFF00 |
D9C51455F501CDFF001EB1FF00D746FE4B515145310FBAFF008FF93FDE7FE755 |
8FFAB87EAB4514BA8CB337FAE3FEEA7FE80B4CA28A04463F87FDF3FD688FB7FB |
8BFD68A2818E93FD5B7D0D3A8A2803D46CFF00E3E7C51FF6059FFF00415AF2EA |
28A6C44F27FC806CFF00EBE24FE51549A27FC7D5C7FD784BFF00A09A28A95B8C |
B9ABFDEB9FFAEF37FE8F15CF37DD93EA7F98A28A99000E907D4FF3A828A2A18C |
737DD4FA7F5352DDFF00AE5FFAE51FFE8028A28020A28A2900514514D013D97F |
C7FDBFFD755FE62A7B6FF8F68FFEDBFF00E8B1451420207FF8F087FEBABFF24A |
828A290054F07FA9BAFF00AE43FF00435A28A68083B5489FF2CFFDFF00F0A28A |
606E5C7FC8647FBE9FD2B325FE0FF7C51456BD04393EEFE27F9D3BB5145311D4 |
D1451401FFD9} |
end |
object Ueberschrift2: TLabel |
Left = 88 |
Top = 0 |
Width = 172 |
Height = 29 |
AutoSize = False |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clMaroon |
Font.Height = -24 |
Font.Name = 'LcdD' |
Font.Style = [fsBold] |
ParentFont = False |
Transparent = True |
end |
object Label2: TLabel |
Left = 8 |
Top = 277 |
Width = 252 |
Height = 18 |
Caption = '(C)Copyright 2001 Daniel Marschall.' |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clYellow |
Font.Height = -16 |
Font.Name = 'LcdD' |
Font.Style = [] |
ParentFont = False |
Transparent = True |
end |
object Label3: TLabel |
Left = 8 |
Top = 298 |
Width = 167 |
Height = 18 |
Caption = 'Alle Rechte vorbehalten.' |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clYellow |
Font.Height = -16 |
Font.Name = 'LcdD' |
Font.Style = [] |
ParentFont = False |
Transparent = True |
end |
object Gauge1: TGauge |
Left = 8 |
Top = 200 |
Width = 337 |
Height = 28 |
BackColor = clTeal |
ForeColor = clMaroon |
Progress = 0 |
end |
object Ueberschrift1: TLabel |
Left = 90 |
Top = 2 |
Width = 172 |
Height = 29 |
AutoSize = False |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clRed |
Font.Height = -24 |
Font.Name = 'LcdD' |
Font.Style = [fsBold] |
ParentFont = False |
Transparent = True |
end |
object Label1: TLabel |
Left = 8 |
Top = 237 |
Width = 48 |
Height = 18 |
Caption = 'Status:' |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clLime |
Font.Height = -16 |
Font.Name = 'LcdD' |
Font.Style = [] |
ParentFont = False |
Transparent = True |
end |
object Status: TLabel |
Left = 136 |
Top = 237 |
Width = 4 |
Height = 18 |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clLime |
Font.Height = -16 |
Font.Name = 'LcdD' |
Font.Style = [] |
ParentFont = False |
Transparent = True |
end |
object Bevel1: TBevel |
Left = 8 |
Top = 264 |
Width = 337 |
Height = 2 |
Shape = bsBottomLine |
end |
object StatusBar1: TStatusBar |
Left = 0 |
Top = 321 |
Width = 353 |
Height = 19 |
Panels = < |
item |
Text = 'http://www.d-m-home.de' |
Width = 270 |
end> |
SimplePanel = False |
OnClick = StatusBar1Click |
end |
object load_button: TButton |
Left = 8 |
Top = 40 |
Width = 89 |
Height = 25 |
Caption = 'Datei &öffnen' |
TabOrder = 0 |
OnClick = load_buttonClick |
end |
object crypt_button: TButton |
Left = 104 |
Top = 72 |
Width = 241 |
Height = 25 |
Caption = '&Verschlüsseln / Entschlüsseln' |
Default = True |
Enabled = False |
TabOrder = 2 |
OnClick = crypt_buttonClick |
end |
object beenden_button: TButton |
Left = 256 |
Top = 40 |
Width = 89 |
Height = 25 |
Caption = '&Beenden' |
TabOrder = 3 |
OnClick = beenden_buttonClick |
end |
object FileName_Edit: TEdit |
Left = 104 |
Top = 40 |
Width = 142 |
Height = 21 |
TabStop = False |
ReadOnly = True |
TabOrder = 4 |
end |
object Panel1: TPanel |
Left = 8 |
Top = 112 |
Width = 337 |
Height = 73 |
BevelOuter = bvLowered |
TabOrder = 6 |
object Label4: TLabel |
Left = 8 |
Top = 6 |
Width = 188 |
Height = 18 |
Caption = 'Verschlüsselungspasswort:' |
Enabled = False |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clWindowText |
Font.Height = -16 |
Font.Name = 'LcdD' |
Font.Style = [] |
ParentFont = False |
Transparent = True |
end |
object Edit1: TEdit |
Left = 16 |
Top = 40 |
Width = 305 |
Height = 21 |
Enabled = False |
TabOrder = 0 |
end |
end |
object close_button: TButton |
Left = 8 |
Top = 72 |
Width = 89 |
Height = 25 |
Caption = 'Datei &schließen' |
Enabled = False |
TabOrder = 1 |
OnClick = close_buttonClick |
end |
object OpenDialog1: TOpenDialog |
Filter = 'Alle Dateien (*.*)|*.*' |
Options = [ofHideReadOnly, ofPathMustExist, ofFileMustExist, ofEnableSizing] |
Left = 320 |
Top = 288 |
end |
object SaveDialog1: TSaveDialog |
Filter = 'Alle Dateien (*.*)|*.*' |
Options = [ofHideReadOnly, ofPathMustExist, ofFileMustExist, ofEnableSizing] |
Left = 288 |
Top = 288 |
end |
object Timer1: TTimer |
Enabled = False |
Interval = 550 |
OnTimer = Timer1Timer |
Left = 256 |
Top = 288 |
end |
end |
/trunk/History/Decoder30/Unit1.~pas |
---|
0,0 → 1,150 |
unit Unit1; |
interface |
uses |
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, |
ComCtrls, ExtCtrls, StdCtrls, ShellAPI, jpeg, Gauges; |
type |
TForm1 = class(TForm) |
StatusBar1: TStatusBar; |
load_button: TButton; |
crypt_button: TButton; |
beenden_button: TButton; |
FileName_Edit: TEdit; |
Image1: TImage; |
Ueberschrift2: TLabel; |
Label2: TLabel; |
OpenDialog1: TOpenDialog; |
Label3: TLabel; |
Panel1: TPanel; |
Label4: TLabel; |
close_button: TButton; |
SaveDialog1: TSaveDialog; |
Gauge1: TGauge; |
Edit1: TEdit; |
Ueberschrift1: TLabel; |
Timer1: TTimer; |
Label1: TLabel; |
Status: TLabel; |
Bevel1: TBevel; |
procedure beenden_buttonClick(Sender: TObject); |
procedure load_buttonClick(Sender: TObject); |
procedure crypt_buttonClick(Sender: TObject); |
procedure StatusBar1Click(Sender: TObject); |
procedure close_buttonClick(Sender: TObject); |
procedure FormCreate(Sender: TObject); |
procedure Timer1Timer(Sender: TObject); |
end; |
var |
Form1: TForm1; |
implementation |
{$R *.DFM} |
var |
mem: TMemoryStream; |
a, b: char; |
j: integer; |
procedure TForm1.beenden_buttonClick(Sender: TObject); |
begin |
Form1.close; |
end; |
procedure TForm1.load_buttonClick(Sender: TObject); |
begin |
if Opendialog1.Execute then |
begin |
FileName_Edit.text := ExtractFileName(OpenDialog1.FileName); |
crypt_button.Enabled := true; |
Gauge1.enabled := false; |
Edit1.Enabled:=true; |
label4.Enabled:=true; |
close_button.enabled := true; |
SaveDialog1.filename := Opendialog1.FileName; |
end; |
end; |
procedure TForm1.crypt_buttonClick(Sender: TObject); |
begin |
if not fileexists(opendialog1.filename) then |
begin |
MessageDLG('Datei ist gelöscht worden. Bitte öffnen Sie eine neue Datei!', mtInformation, [mbOK], 0); |
end |
else |
begin |
if Edit1.Text = '' then |
begin |
MessageDLG('Sie müssen ein Passwort zum Verschlüsseln / Entschlüsseln eingeben!', mtInformation, [mbOK], 0); |
end |
else |
begin |
if Savedialog1.Execute then |
begin |
Status.caption := 'Programm arbeitet...'; |
Timer1.enabled := true; |
end; |
end; |
end; |
end; |
procedure TForm1.StatusBar1Click(Sender: TObject); |
begin |
ShellExecute(Handle, 'open', 'http://www.d-m-home.de', '', '', 1); |
end; |
procedure TForm1.close_buttonClick(Sender: TObject); |
begin |
filename_edit.text := ''; |
crypt_button.Enabled := false; |
Edit1.Enabled := false; |
label4.Enabled := false; |
Gauge1.enabled := false; |
close_button.enabled := false; |
end; |
procedure TForm1.FormCreate(Sender: TObject); |
begin |
Ueberschrift1.caption := application.title; |
Ueberschrift2.caption := application.title; |
form1.caption := application.title; |
Status.caption := 'Programm bereit!'; |
end; |
procedure TForm1.Timer1Timer(Sender: TObject); |
var |
i, temp: integer; |
begin |
Timer1.enabled := false; |
mem := TMemoryStream.Create; |
mem.LoadFromfile(OpenDialog1.FileName); |
gauge1.MaxValue := mem.size; |
for i := 0 to mem.Size - 1 do |
begin |
mem.Position := i; |
mem.Read(a, 1); |
j := j + 1; |
if j > length(edit1.text) then j := 1; |
for temp := 0 to 255 do |
begin |
if copy(edit1.text, j, 1) = chr(temp) then b := chr(temp); |
end; |
a := CHR(byte(b) xor byte(a)); |
mem.Position := i; |
mem.write(a, 1); |
gauge1.Progress := gauge1.Progress + 1; |
end; |
j := 0; |
mem.SaveToFile(SaveDialog1.FileName); |
mem.Free; |
MessageDLG('Datei wurde erfolgreich Verschlüsselt / Entschlüsselt!', mtInformation, [mbOK], 0); |
gauge1.Progress := gauge1.MinValue; |
Status.caption := 'Programm bereit!'; |
end; |
end. |
/trunk/History/Decoder30/Windows V3.0.md5 |
---|
0,0 → 1,11 |
222ef4093c67ade09d4bdf899198119b *Coder.cfg |
c91c585bea751d0407f7d2eff6d1164f *Coder.dof |
875bba401e11be55bb83c7603004efc1 *Coder.dpr |
803cc6e5f9ec5b8e27b00d8ff7ade068 *Coder.exe |
30d9e6af7219db664ea084b1adb52459 *Coder.res |
af211c2601b0b43c3e61b9f476eaae3e *Hilfe.txt |
fc529899129b78d5f8dbc3c805808c4a *Unit1.dcu |
739780d1b44374f01deb374275b8418b *Unit1.dfm |
7f382b2ea905ac39d97b17bce69b8042 *Unit1.pas |
ae4dae5a357227b91ea0d90ed3500d12 *Unit1.~dfm |
7f382b2ea905ac39d97b17bce69b8042 *Unit1.~pas |
/trunk/History/Decoder30/Windows V3.0.sfv |
---|
0,0 → 1,12 |
; Generated by ViaThinkSoft |
Coder.cfg 78C2477F |
Coder.dof 7C17B585 |
Coder.dpr 1E1D7C26 |
Coder.exe 3970EA0D |
Coder.res 83E95DA1 |
Hilfe.txt 23EFC100 |
Unit1.dcu 7319B548 |
Unit1.dfm 7ED2018A |
Unit1.pas 7709B052 |
Unit1.~dfm 5D1E88F1 |
Unit1.~pas 7709B052 |
/trunk/History/Decoder30/test_in.txt |
---|
0,0 → 1,0 |
Hello World! This is a Test! |
/trunk/History/Decoder30/test_out_foobar.txt |
---|
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 |
/trunk/History/Decoder32/256zero_in.txt |
---|
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 |
/trunk/History/Decoder32/256zero_out_abcdefg.txt |
---|
0,0 → 1,0 |
bcdefggbcdefggbcdefggbcdefggbcdefggbcdefggbcdefggbcdefggbcdefggbcdefggbcdefggbcdefggbcdefggbcdefggbcdefggbcdefggbcdefggbcdefggbcdefggbcdefggbcdefggbcdefggbcdefggbcdefggbcdefggbcdefggbcdefggbcdefggbcdefggbcdefggbcdefggbcdefggbcdefggbcdefggbcdefggbcdefggbcde |
/trunk/History/Decoder32/256zero_out_foobar.txt |
---|
0,0 → 1,0 |
oobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarroobarrooba |
/trunk/History/Decoder32/Coder.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 |
/trunk/History/Decoder32/Hilfe.txt |
---|
0,0 → 1,103 |
(De)Coder V3.2 |
============== |
Der (De)Coder verschlüsselt Ihre Daten und kann sie |
anschließend wieder entschlüsseln. Die Bedienung ist |
sehr einfach. Sie können ein Passwort in beliebiger |
Länge eingeben und anschließend alles wieder mit dem |
selben Passwort entschlüsseln. Die Dateien sind von |
keinem Hacker mehr zu lesen bzw. zu benutzen. Sie |
können eine Anwendung verschlüsseln, Texte, Bilder, |
Videos, HTML-Seiten u.s.w. Das gute an dem (De)Coder |
ist, dass das Programm automatisch erkennt, ob die |
Datei eine verschlüsselt ist. Die Verschlüsselungs und |
Entschlüsselungsfunktion ist also zusammengefasst |
worden. |
Bedienung: |
---------- |
Datei öffnen: |
Öffnet eine zu verschlüsselnte Datei. |
Datei schließen: |
Schließt die Datei wieder. |
Beenden: |
Beendet das Programm. |
Verschlüsseln / Entschlüsseln: |
Verschlüsselt die Datei und fordert dazu auf, |
die Zieldatei auszuwählen. Wenn die Datei |
bereits verschlüsselt ist, wird sie wieder |
entschlüsselt. |
Verschlüsselungspasswort: |
Ein Textfeld, indem Sie Ihr geheimes Passwort |
eintragen müssen. |
Geschichte: |
----------- |
Version 1.0: |
Die Dateien werden über ein DOS-Programm |
verschlüsselt. Es werden nur die Buchstaben |
mit anderen ersetzt! |
Version 2.0: |
Es verschlüsselt als Windowsprogramm. |
Version 2.1: |
Es kann eine Zahl von 1 - 255 zum |
verschlüsseln ausgesucht werden. |
Version 2.2: |
Es kann eine Zahl von 1 - 256 zum |
verschlüsseln ausgesucht werden. |
Version 3.0: |
Nun kann auch ein Passwort eingegeben |
werden! |
Version 3.1: |
Nun noch viel schneller beim verschlüsseln/ |
entschlüsseln! |
Version 3.2: |
Die Passworteingabe wird mit Sternchen (*) |
geschrieben! |
Systemanforderungen: |
-------------------- |
Pentium 1 Prozessor mit 133 MHz > |
Windows 95 > |
32 MB RAM > |
Probleme: |
--------- |
In dieser Version kann es zu keinen Problemen |
bei der verschlüsselung kommen. |
Folgendes könnte aber die Verschlüsselung |
verhindern: |
* Systemanforderungen nicht erfüllt |
* Nicht genügend Arbeitsspeicher |
* Nicht genügend Festplattenspeicher |
* Kein Passwort eingegeben |
* Geöffnete Datei wurde vor dem |
verschlüsseln gelöscht... |
Der Programmierer: |
------------------ |
Dieses Programm wurde am 27. Februar 2002 von |
Daniel Marschall programmiert. Der Programmierer |
haftet nicht für sein Programm. Das Programm ist |
Freeware und darf vervielfältigt werden, |
solange es unverändert bleibt! |
Homepage: http://www.d-m-home.de |
E-Mail: daniel.marschall@d-m-home.de |
/trunk/History/Decoder32/Windows V3.2.md5 |
---|
0,0 → 1,2 |
9dd2f3ef0969c90eca384f6333c41537 *Coder.exe |
1888b7e7bc1e5e4a9fd167279440c30f *Hilfe.txt |
/trunk/History/Decoder32/Windows V3.2.sfv |
---|
0,0 → 1,3 |
; Generated by ViaThinkSoft |
Coder.exe 7245D279 |
Hilfe.txt 7F933C0A |
/trunk/History/Decoder32/test_in.txt |
---|
0,0 → 1,0 |
Hello World! This is a Test! |
/trunk/History/Decoder32/test_out_foobar.txt |
---|
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 |
/trunk/History/Decoder33_Beta/(De)Coder.iwz |
---|
0,0 → 1,235 |
[InstallShield Wizard] |
iDate=1 |
iTime=1 |
Flag=0 |
ISX.EXE Size=679936 |
ISX.EXE Date=11:21:52 8.4.1999 |
ISX.EXE Ver=2.1.2.62 |
SETUP.EXE Size=45312 |
SETUP.EXE Date=9:12:24 23.3.1999 |
SETUP.EXE Ver=3.0.111.0 |
SETUP.INS Size=81342 |
SETUP.INS Date=11:26:40 8.4.1999 |
SETUP.INS Ver=Nicht verfügbar |
_INST16.EX_ Size=81342 |
_INST16.EX_ Date=11:26:40 8.4.1999 |
_INST16.EX_ Ver=Nicht verfügbar |
_INST32I.EX_ Size=294079 |
_INST32I.EX_ Date=9:12:22 23.3.1999 |
_INST32I.EX_ Ver=Nicht verfügbar |
ISDEPEND.INI Size=6997 |
ISDEPEND.INI Date=14:48:50 11.8.1999 |
ISDEPEND.INI Ver=Nicht verfügbar |
SWDEPEND.INI Size=9891 |
SWDEPEND.INI Date=18:45:58 12.8.1999 |
SWDEPEND.INI Ver=Nicht verfügbar |
ICOMP.EXE Size=119808 |
ICOMP.EXE Date=9:12:24 23.3.1999 |
ICOMP.EXE Ver=3.00.062 |
SPLIT.EXE Size=90624 |
SPLIT.EXE Date=9:12:24 23.3.1999 |
SPLIT.EXE Ver=3.00.060 |
PACKLIST.EXE Size=87552 |
PACKLIST.EXE Date=9:12:24 23.3.1999 |
PACKLIST.EXE Ver=3.00.060 |
Version=2.12 |
DevTool=Delphi 5 |
Platform=Win32 |
DisksDir=(DE)CO~1\650MB\ |
TabsVisit=11111111100001111 |
LangNum=0 |
LangDir= |
[VisualDesign] |
AppName=(De)Coder |
AppExe=[Programme]\Coder.exe |
AppExeFile=D:\Programmierung\_Internet Programme\Coder V3.3\Coder.exe |
Version=3.3.0.0 |
Company=DMCS |
Title=(De)Coder 3.3 |
TitleType=1 |
BackgrndBmp= |
BackgrndAlign=4 |
Backgrnd=1 |
BackgrndColor=0 |
Uninstall=1 |
UninstallChecked=1 |
Silent=1 |
SmsMode=0 |
[Types] |
Types=1 |
Type1Components=1 |
Type1Name=Vollständig |
Type1ComponentList=1 |
[Components] |
Components=1 |
Component1Groups=4 |
Component1Name=Anwendungsdateien |
Component1Description=Zur Ausführung benötigte Anwendungsdateien |
Component1GroupList=1 2 3 4 |
[Groups] |
Groups=4 |
Group1Size=915464 |
Group1Files=3 |
Group1Name=Programme |
Group1Dir=<INSTALLDIR> |
Group1Update=0 |
Group1TargetOS=-1 |
Group1File1=D:\Programmierung\_Internet Programme\Coder V3.3\Coder.exe |
Group1File2=D:\Programmierung\_Internet Programme\Coder V3.3\QuickStart.exe |
Group1File3=D:\Programmierung\_Internet Programme\Coder V3.3\Hilfe.rtf |
Group2Size=25859 |
Group2Files=3 |
Group2Name=Bilder |
Group2Dir=<INSTALLDIR>\Bilder |
Group2Update=0 |
Group2TargetOS=-1 |
Group2File1=D:\Programmierung\_Internet Programme\Coder V3.3\Bilder\Background.jpg |
Group2File2=D:\Programmierung\_Internet Programme\Coder V3.3\Bilder\Info.bmp |
Group2File3=D:\Programmierung\_Internet Programme\Coder V3.3\Bilder\QuickStarter.bmp |
Group3Size=53864 |
Group3Files=1 |
Group3Name=Audio |
Group3Dir=<INSTALLDIR>\Audio |
Group3Update=0 |
Group3TargetOS=-1 |
Group3File1=D:\Programmierung\_Internet Programme\Coder V3.3\Audio\Meldung.wav |
Group4Size=766 |
Group4Files=1 |
Group4Name=Icons |
Group4Dir=<INSTALLDIR>\Icons |
Group4Update=0 |
Group4TargetOS=-1 |
Group4File1=D:\Programmierung\_Internet Programme\Coder V3.3\Icons\TrayIcon.ico |
[Sequence] |
DestinationLocationDir=<ProgramFilesDir>\(De)Coder |
DatabaseLocationDir=<INSTALLDIR>\data |
SelectProgramFolderName=(De)Coder |
SplashScreen=1 |
SplashScreenBmp=D:\Programmierung\_Internet Programme\_Privates\(De)Coder\Bilder\Splash2.bmp |
WelcomeMessage=1 |
WelcomeMessageFile= |
DestinationLocation=1 |
SelectProgramFolder=1 |
ProgressBar=1 |
SetupComplete=1 |
SetupCompleteRebootOpt=1 |
SetupCompleteExec=[Programme]\Coder.exe |
SetupCompleteExecParam= |
SetupCompleteExecReadme=[Programme]\Hilfe.rtf |
[RegEntries] |
Reg1Path=HKEY_CLASSES_ROOT |
Reg1Val1Type=0 |
Reg1Val1Name=(Standard) |
Reg1Val1Data=(Wert nicht gesetzt) |
Reg1Vals=1 |
Reg2Path=HKEY_CURRENT_USER |
Reg2Val1Type=0 |
Reg2Val1Name=(Standard) |
Reg2Val1Data=(Wert nicht gesetzt) |
Reg2Vals=1 |
Reg3Path=HKEY_LOCAL_MACHINE |
Reg3Val1Type=0 |
Reg3Val1Name=(Standard) |
Reg3Val1Data=(Wert nicht gesetzt) |
Reg3Vals=1 |
Reg4Path=HKEY_USERS |
Reg4Val1Type=0 |
Reg4Val1Name=(Standard) |
Reg4Val1Data=(Wert nicht gesetzt) |
Reg4Vals=1 |
Reg5Path=HKEY_CURRENT_CONFIG |
Reg5Val1Type=0 |
Reg5Val1Name=(Standard) |
Reg5Val1Data=(Wert nicht gesetzt) |
Reg5Vals=1 |
Reg6Path=HKEY_DYN_DATA |
Reg6Val1Type=0 |
Reg6Val1Name=(Standard) |
Reg6Val1Data=(Wert nicht gesetzt) |
Reg6Vals=1 |
Regs=6 |
[Registry] |
Reg1Path=HKEY_CLASSES_ROOT |
Reg1ValName=(Standard) |
Reg1ValType=0 |
Reg1ValData=(Wert nicht gesetzt) |
Reg2Path=HKEY_CURRENT_USER |
Reg2ValName=(Standard) |
Reg2ValType=0 |
Reg2ValData=(Wert nicht gesetzt) |
Reg3Path=HKEY_LOCAL_MACHINE |
Reg3ValName=(Standard) |
Reg3ValType=0 |
Reg3ValData=(Wert nicht gesetzt) |
Reg4Path=HKEY_USERS |
Reg4ValName=(Standard) |
Reg4ValType=0 |
Reg4ValData=(Wert nicht gesetzt) |
Reg5Path=HKEY_CURRENT_CONFIG |
Reg5ValName=(Standard) |
Reg5ValType=0 |
Reg5ValData=(Wert nicht gesetzt) |
Reg6Path=HKEY_DYN_DATA |
Reg6ValName=(Standard) |
Reg6ValType=0 |
Reg6ValData=(Wert nicht gesetzt) |
Regs=6 |
[Icons] |
Icons=3 |
Icon1Param= |
Icon1Cmd=[Programme]\Coder.exe |
Icon1Description=Coder |
Icon1WorkingDir=[Programme] |
Icon1IconFile= |
Icon1RealFile=D:\Programmierung\_Internet Programme\Coder V3.3\Coder.exe |
Icon1WhichIcon=0 |
Icon1KeyVirtual=0 |
Icon1KeyFlags=0 |
Icon1StartMenu=0 |
Icon1Window=0 |
Icon2Param= |
Icon2Cmd=[Programme]\QuickStart.exe |
Icon2Description=(De)Coder 3.3 - QuickStarter |
Icon2WorkingDir=[Programme] |
Icon2IconFile= |
Icon2RealFile=D:\Programmierung\_Internet Programme\Coder V3.3\QuickStart.exe |
Icon2WhichIcon=0 |
Icon2KeyVirtual=0 |
Icon2KeyFlags=0 |
Icon2StartMenu=4 |
Icon2Window=0 |
Icon3Param= |
Icon3Cmd=[Programme]\Hilfe.rtf |
Icon3Description=Hilfe |
Icon3WorkingDir=[Programme] |
Icon3IconFile= |
Icon3RealFile=D:\Programmierung\_Internet Programme\Coder V3.3\Hilfe.rtf |
Icon3WhichIcon=0 |
Icon3KeyVirtual=0 |
Icon3KeyFlags=0 |
Icon3StartMenu=0 |
Icon3Window=0 |
[Autoexec] |
PathDir= |
ShareLocks= |
ShareFiles= |
Command= |
[CopyToFloppy] |
DriveOption= |
DestinationPath= |
DestinationPathOneFile= |
Password= |
[Uninstall] |
UserUninstall=0 |
/trunk/History/Decoder33_Beta/256zero_in.txt |
---|
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 |
/trunk/History/Decoder33_Beta/256zero_out_foobar.txt |
---|
0,0 → 1,0 |
foobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoob |
/trunk/History/Decoder33_Beta/Bilder/Info.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 |
/trunk/History/Decoder33_Beta/Bilder/QuickStarter.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 |
/trunk/History/Decoder33_Beta/Coder.cfg |
---|
0,0 → 1,35 |
-$A+ |
-$B- |
-$C- |
-$D- |
-$E- |
-$F- |
-$G+ |
-$H+ |
-$I+ |
-$J+ |
-$K- |
-$L- |
-$M- |
-$N+ |
-$O+ |
-$P+ |
-$Q- |
-$R- |
-$S- |
-$T- |
-$U- |
-$V+ |
-$W- |
-$X+ |
-$Y- |
-$Z1 |
-cg |
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; |
-H+ |
-W+ |
-M |
-$M16384,1048576 |
-K$00400000 |
-LE"c:\programme\borland\delphi5\Projects\Bpl" |
-LN"c:\programme\borland\delphi5\Projects\Bpl" |
/trunk/History/Decoder33_Beta/Coder.doc |
---|
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 |
/trunk/History/Decoder33_Beta/Coder.dof |
---|
0,0 → 1,85 |
[Compiler] |
A=1 |
B=0 |
C=0 |
D=0 |
E=0 |
F=0 |
G=1 |
H=1 |
I=1 |
J=1 |
K=0 |
L=0 |
M=0 |
N=1 |
O=1 |
P=1 |
Q=0 |
R=0 |
S=0 |
T=0 |
U=0 |
V=1 |
W=0 |
X=1 |
Y=0 |
Z=1 |
ShowHints=1 |
ShowWarnings=1 |
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; |
[Linker] |
MapFile=0 |
OutputObjs=0 |
ConsoleApp=1 |
DebugInfo=0 |
RemoteSymbols=0 |
MinStackSize=16384 |
MaxStackSize=1048576 |
ImageBase=4194304 |
ExeDescription=(De)Coder 3.3 |
[Directories] |
OutputDir= |
UnitOutputDir= |
PackageDLLOutputDir= |
PackageDCPOutputDir= |
SearchPath= |
Packages=VCL50;VCLX50;VCLSMP50;VCLDB50;VCLADO50;ibevnt50;VCLBDE50;VCLDBX50;QRPT50;TEEUI50;TEEDB50;TEE50;DSS50;TEEQR50;VCLIB50;VCLMID50;VCLIE50;INETDB50;INET50;NMFAST50;WEBMID50;dclocx50;dclaxserver50;DelphiX_for5 |
Conditionals= |
DebugSourceDirs= |
UsePackages=0 |
[Parameters] |
RunParams= |
HostApplication= |
[Language] |
ActiveLang= |
ProjectLang=$00000407 |
RootDir= |
[Version Info] |
IncludeVerInfo=1 |
AutoIncBuild=0 |
MajorVer=3 |
MinorVer=3 |
Release=0 |
Build=0 |
Debug=0 |
PreRelease=0 |
Special=0 |
Private=0 |
DLL=0 |
Locale=1031 |
CodePage=1252 |
[Version Info Keys] |
CompanyName=Daniel Marschall Computersoftware |
FileDescription=Eine sehr gute Verschlüsselungssoftware... |
FileVersion=3.3.0.0 |
InternalName=(De)Coder 3.3 |
LegalCopyright=(C)Copyright 2001 - 2003 Daniel Marschall |
LegalTrademarks=Keine |
OriginalFilename=Coder.exe |
ProductName=(De)Coder 3.3 |
ProductVersion=3.3.0.0 |
Homepage=http://www.d-m-home.de/ |
[HistoryLists\hlUnitAliases] |
Count=1 |
Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; |
/trunk/History/Decoder33_Beta/Coder.dpr |
---|
0,0 → 1,24 |
program Coder; |
{$Description '(De)Coder 3.3'} |
uses |
Forms, |
Dialogs, |
Windows, |
Graphics, |
CoderUnit1 in 'CoderUnit1.pas' {MainForm}, |
CoderUnit2 in 'CoderUnit2.pas' {PasswordDlg}, |
CoderUnit3 in 'CoderUnit3.pas' {DlgForm}; |
{$R *.RES} |
begin |
Application.Initialize; |
Application.Title := '(De)Coder 3.3'; |
Application.CreateForm(TMainForm, MainForm); |
Application.CreateForm(TPasswordDlg, PasswordDlg); |
Application.CreateForm(TDlgForm, DlgForm); |
Application.Run; |
end. |
/trunk/History/Decoder33_Beta/Coder.dproj |
---|
0,0 → 1,149 |
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
<PropertyGroup> |
<ProjectGuid>{0355F0DB-3037-4FA7-A947-0F4EDCB5F21E}</ProjectGuid> |
<MainSource>Coder.dpr</MainSource> |
<Base>True</Base> |
<Config Condition="'$(Config)'==''">Debug</Config> |
<TargetedPlatforms>1</TargetedPlatforms> |
<AppType>Application</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="('$(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)'!=''"> |
<DCC_E>false</DCC_E> |
<DCC_F>false</DCC_F> |
<DCC_K>false</DCC_K> |
<DCC_N>true</DCC_N> |
<DCC_S>false</DCC_S> |
<DCC_ImageBase>00400000</DCC_ImageBase> |
<DCC_Alignment>1</DCC_Alignment> |
<DCC_AssertionsAtRuntime>false</DCC_AssertionsAtRuntime> |
<DCC_DebugInformation>0</DCC_DebugInformation> |
<DCC_WriteableConstants>true</DCC_WriteableConstants> |
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols> |
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo> |
<DCC_Description>(De)Coder 3.3</DCC_Description> |
<DCC_UsePackage>VCL50;VCLX50;VCLSMP50;VCLDB50;VCLADO50;ibevnt50;VCLBDE50;VCLDBX50;QRPT50;TEEUI50;TEEDB50;TEE50;DSS50;TEEQR50;VCLIB50;VCLMID50;VCLIE50;INETDB50;INET50;NMFAST50;WEBMID50;dclocx50;dclaxserver50;DelphiX_for5;$(DCC_UsePackage)</DCC_UsePackage> |
<SanitizedProjectName>Coder</SanitizedProjectName> |
<DCC_Namespace>Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace)</DCC_Namespace> |
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo> |
<VerInfo_MajorVer>3</VerInfo_MajorVer> |
<VerInfo_MinorVer>3</VerInfo_MinorVer> |
<VerInfo_Locale>1031</VerInfo_Locale> |
<VerInfo_Keys>CompanyName=Daniel Marschall Computersoftware;FileDescription=Eine sehr gute Verschlüsselungssoftware...;FileVersion=3.3.0.0;InternalName=(De)Coder 3.3;LegalCopyright=(C)Copyright 2001 - 2003 Daniel Marschall;LegalTrademarks=Keine;OriginalFilename=Coder.exe;ProductName=(De)Coder 3.3;ProductVersion=3.3.0.0;Homepage=http://www.d-m-home.de/</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> |
<Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File> |
<Icon_MainIcon>Coder_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="'$(Base_Win64)'!=''"> |
<Icon_MainIcon>Coder_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)'!=''"> |
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define> |
</PropertyGroup> |
<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''"> |
<AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode> |
</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)'!=''"> |
<AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode> |
</PropertyGroup> |
<ItemGroup> |
<DelphiCompile Include="$(MainSource)"> |
<MainSource>MainSource</MainSource> |
</DelphiCompile> |
<DCCReference Include="CoderUnit1.pas"> |
<Form>MainForm</Form> |
</DCCReference> |
<DCCReference Include="CoderUnit2.pas"> |
<Form>PasswordDlg</Form> |
</DCCReference> |
<DCCReference Include="CoderUnit3.pas"> |
<Form>DlgForm</Form> |
</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> |
<ProjectExtensions> |
<Borland.Personality>Delphi.Personality.12</Borland.Personality> |
<Borland.ProjectType/> |
<BorlandProject> |
<Delphi.Personality> |
<Source> |
<Source Name="MainSource">Coder.dpr</Source> |
</Source> |
<Language> |
<Language Name="ProjectLang">$00000407</Language> |
</Language> |
</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> |
/trunk/History/Decoder33_Beta/Coder.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 |
/trunk/History/Decoder33_Beta/Coder.identcache |
---|
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 |
/trunk/History/Decoder33_Beta/Coder.ism |
---|
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 |
/trunk/History/Decoder33_Beta/Coder.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 |
/trunk/History/Decoder33_Beta/CoderUnit1.dfm |
---|
0,0 → 1,352 |
object MainForm: TMainForm |
Left = 251 |
Top = 139 |
BorderIcons = [biSystemMenu, biMinimize] |
BorderStyle = bsSingle |
Caption = '(De)Coder' |
ClientHeight = 340 |
ClientWidth = 353 |
Color = clBtnFace |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clWindowText |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
OldCreateOrder = False |
Position = poDesktopCenter |
OnCreate = FormCreate |
OnDestroy = FormDestroy |
OnMouseMove = BackgroundMouseMove |
OnShow = FormShow |
PixelsPerInch = 96 |
TextHeight = 13 |
object StatusBar: TStatusBar |
Left = 0 |
Top = 321 |
Width = 353 |
Height = 19 |
Cursor = crHandPoint |
Hint = 'Besuchen Sie die Webseite der DMCS!' |
Panels = < |
item |
Text = 'Besuchen Sie uns:' |
Width = 210 |
end |
item |
Text = 'http://www.d-m-home.de' |
Width = 143 |
end> |
ParentShowHint = False |
ShowHint = True |
SimplePanel = False |
OnClick = StatusBarClick |
OnMouseMove = BackgroundMouseMove |
end |
object BgPnl: TElPanel |
Left = 0 |
Top = 0 |
Width = 353 |
Height = 321 |
BackgroundType = bgtVertGradient |
GradientEndColor = clWhite |
GradientStartColor = 13160660 |
Align = alNone |
UseXPThemes = False |
MouseCapture = False |
TabOrder = 1 |
DockOrientation = doNoOrient |
DoubleBuffered = False |
object CopyrightLbl1: TLabel |
Left = 8 |
Top = 277 |
Width = 301 |
Height = 18 |
Caption = '(C)Copyright 2001 - 2003 Daniel Marschall.' |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clBlack |
Font.Height = -16 |
Font.Name = 'LcdD' |
Font.Style = [] |
ParentFont = False |
Transparent = True |
OnMouseMove = BackgroundMouseMove |
end |
object CopyrightLbl2: TLabel |
Left = 8 |
Top = 298 |
Width = 157 |
Height = 17 |
Caption = 'Alle Rechte vorbehalten.' |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clBlack |
Font.Height = -15 |
Font.Name = 'LcdD' |
Font.Style = [] |
ParentFont = False |
Transparent = True |
OnMouseMove = BackgroundMouseMove |
end |
object StatusLbl1: TLabel |
Left = 8 |
Top = 237 |
Width = 48 |
Height = 18 |
Caption = 'Status:' |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clGreen |
Font.Height = -16 |
Font.Name = 'LcdD' |
Font.Style = [] |
ParentFont = False |
ParentShowHint = False |
ShowHint = False |
Transparent = True |
OnMouseMove = BackgroundMouseMove |
end |
object StatusLbl2: TLabel |
Left = 120 |
Top = 237 |
Width = 123 |
Height = 18 |
Hint = 'Der Status der Programms' |
Caption = 'Programm bereit!' |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clGreen |
Font.Height = -16 |
Font.Name = 'LcdD' |
Font.Style = [] |
ParentFont = False |
ParentShowHint = False |
ShowHint = True |
Transparent = True |
OnMouseMove = BackgroundMouseMove |
end |
object CopyrightBvl: TBevel |
Left = 8 |
Top = 264 |
Width = 337 |
Height = 2 |
Shape = bsBottomLine |
end |
object TitelLbl: TElLabel |
Left = 90 |
Top = 2 |
Width = 124 |
Height = 29 |
Caption = '(De)Coder' |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clBlue |
Font.Height = -24 |
Font.Name = 'MS Sans Serif' |
Font.Style = [fsBold] |
ParentFont = False |
Effect = lesShadow |
ShadowColor = clGray |
XOffset = -2 |
YOffset = -2 |
end |
object ProgressPnl: TPanel |
Left = 7 |
Top = 199 |
Width = 339 |
Height = 27 |
BevelOuter = bvLowered |
TabOrder = 0 |
object ProgressGge: TGauge |
Left = 1 |
Top = 1 |
Width = 337 |
Height = 25 |
Hint = 'Fortschritt' |
BackColor = clTeal |
Color = clWindowText |
Enabled = False |
ForeColor = clMaroon |
ParentColor = False |
ParentShowHint = False |
Progress = 0 |
ShowHint = False |
end |
end |
object OpenBtn: TElPopupButton |
Left = 8 |
Top = 40 |
Width = 89 |
Height = 25 |
DrawDefaultFrame = False |
NumGlyphs = 1 |
Caption = 'Datei &öffnen' |
TabOrder = 1 |
OnClick = OpenBtnClick |
OnMouseMove = OpenBtnMouseMove |
DockOrientation = doNoOrient |
DoubleBuffered = False |
end |
object ExitBtn: TElPopupButton |
Left = 256 |
Top = 40 |
Width = 89 |
Height = 25 |
DrawDefaultFrame = False |
NumGlyphs = 1 |
Caption = '&Beenden' |
TabOrder = 2 |
OnClick = ExitBtnClick |
OnMouseMove = ExitBtnMouseMove |
DockOrientation = doNoOrient |
DoubleBuffered = False |
end |
object CloseBtn: TElPopupButton |
Left = 8 |
Top = 72 |
Width = 89 |
Height = 25 |
DrawDefaultFrame = False |
NumGlyphs = 1 |
Caption = 'Datei &schließen' |
Enabled = False |
TabOrder = 3 |
OnClick = CloseBtnClick |
OnMouseMove = CloseBtnMouseMove |
DockOrientation = doNoOrient |
DoubleBuffered = False |
end |
object CryptBtn: TElPopupButton |
Left = 104 |
Top = 72 |
Width = 241 |
Height = 25 |
DrawDefaultFrame = False |
NumGlyphs = 1 |
Caption = '&Verschlüsseln / Entschlüsseln' |
Enabled = False |
TabOrder = 4 |
OnClick = CryptBtnClick |
OnMouseMove = CryptBtnMouseMove |
DockOrientation = doNoOrient |
DoubleBuffered = False |
end |
object KeyPnl: TElPanel |
Left = 8 |
Top = 112 |
Width = 337 |
Height = 73 |
BackgroundType = bgtVertGradient |
GradientEndColor = clWhite |
GradientStartColor = 13160660 |
Align = alNone |
BevelSpaceColor = 13160660 |
UseXPThemes = False |
Color = 13160660 |
MouseCapture = False |
TabOrder = 5 |
DockOrientation = doNoOrient |
DoubleBuffered = False |
object KeyLbl: TLabel |
Left = 8 |
Top = 6 |
Width = 188 |
Height = 18 |
Caption = 'Verschlüsselungspasswort:' |
Enabled = False |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clWindowText |
Font.Height = -16 |
Font.Name = 'LcdD' |
Font.Style = [] |
ParentFont = False |
Transparent = True |
OnMouseMove = BackgroundMouseMove |
end |
object KeyEdt: TElEdit |
Left = 16 |
Top = 40 |
Width = 305 |
Height = 21 |
Cursor = crIBeam |
VertScrollBarStyles.ShowTrackHint = False |
VertScrollBarStyles.Width = 16 |
VertScrollBarStyles.ButtonSize = 16 |
HorzScrollBarStyles.ShowTrackHint = False |
HorzScrollBarStyles.Width = 16 |
HorzScrollBarStyles.ButtonSize = 16 |
UseCustomScrollBars = True |
Alignment = taLeftJustify |
BorderSides = [ebsLeft, ebsRight, ebsTop, ebsBottom] |
RTLContent = False |
PasswordChar = '*' |
Transparent = False |
TopMargin = 3 |
BorderStyle = bsSingle |
LineBorderActiveColor = clBlack |
LineBorderInactiveColor = clBlack |
WordWrap = False |
Ctl3D = True |
Enabled = False |
ParentColor = False |
ParentCtl3D = False |
TabOrder = 0 |
TabStop = True |
end |
end |
object FileNameEdt: TEdit |
Left = 104 |
Top = 40 |
Width = 145 |
Height = 21 |
Enabled = False |
ReadOnly = True |
TabOrder = 6 |
Text = 'Keine Datei geöffnet' |
end |
end |
object WaitTmr2: TTimer |
Enabled = False |
Interval = 500 |
OnTimer = WaitTmr2Timer |
Left = 224 |
Top = 288 |
end |
object BlinkTmr: TTimer |
Enabled = False |
Interval = 150 |
OnTimer = BlinkTmrTimer |
Left = 160 |
Top = 288 |
end |
object DragDrop: TDropFileTarget |
Dragtypes = [dtCopy] |
GetDataOnEnter = False |
OnDrop = DragDropDrop |
ShowImage = True |
Left = 256 |
Top = 288 |
end |
object WaitTmr1: TTimer |
Enabled = False |
Interval = 500 |
OnTimer = WaitTmr1Timer |
Left = 192 |
Top = 288 |
end |
object OpenDlg: TOpenDialogEx |
Filter = |
'Alle Dateien (*.*)|*.*|Textdateien (*.txt)|*.txt|Dokumente (*.do' + |
'c)|*.doc|Klangdateien (*.wav)|*.wav|Bitmap-Dateien (*.bmp)|*.bmp' + |
'|Anwendungen (*.exe)|*.exe|Musikdateien (*.mid)|*.mid' |
Options = [ofHideReadOnly, ofPathMustExist, ofFileMustExist, ofEnableSizing] |
Title = 'Datei öffnen...' |
Left = 320 |
Top = 288 |
end |
object SaveDlg: TSaveDialogEx |
Filter = |
'Alle Dateien (*.*)|*.*|Textdateien (*.txt)|*.txt|Dokumente (*.do' + |
'c)|*.doc|Klangdateien (*.wav)|*.wav|Bitmap-Dateien (*.bmp)|*.bmp' + |
'|Anwendungen (*.exe)|*.exe|Musikdateien (*.mid)|*.mid' |
Options = [ofOverwritePrompt, ofHideReadOnly, ofEnableSizing] |
Title = 'Datei speichern...' |
Left = 288 |
Top = 288 |
end |
end |
/trunk/History/Decoder33_Beta/CoderUnit1.pas |
---|
0,0 → 1,439 |
unit CoderUnit1; |
interface |
uses |
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, |
ComCtrls, ExtCtrls, StdCtrls, ShellAPI, JPEG, Gauges, Buttons, CoolGauge, |
SRWave, DropSource, DropTarget, unit_DialogsEx, ShlObj, |
ElXPThemedControl, ElBtnCtl, ElPopBtn, ElACtrls, Mask, ElMaskEdit, |
ElCLabel, ElLabel, ElEdits, ElPanel; |
type |
TMainForm = class(TForm) |
StatusBar: TStatusBar; |
BgPnl: TElPanel; |
CopyrightLbl1: TLabel; |
CopyrightLbl2: TLabel; |
StatusLbl1: TLabel; |
StatusLbl2: TLabel; |
CopyrightBvl: TBevel; |
TitelLbl: TElLabel; |
ProgressPnl: TPanel; |
ProgressGge: TGauge; |
OpenBtn: TElPopupButton; |
ExitBtn: TElPopupButton; |
CloseBtn: TElPopupButton; |
CryptBtn: TElPopupButton; |
WaitTmr2: TTimer; |
BlinkTmr: TTimer; |
DragDrop: TDropFileTarget; |
WaitTmr1: TTimer; |
OpenDlg: TOpenDialogEx; |
SaveDlg: TSaveDialogEx; |
KeyPnl: TElPanel; |
KeyLbl: TLabel; |
KeyEdt: TElEdit; |
FileNameEdt: TEdit; |
procedure ExitBtnClick(Sender: TObject); |
procedure OpenBtnClick(Sender: TObject); |
procedure CryptBtnClick(Sender: TObject); |
procedure StatusBarClick(Sender: TObject); |
procedure CloseBtnClick(Sender: TObject); |
procedure FormCreate(Sender: TObject); |
procedure WaitTmr2Timer(Sender: TObject); |
procedure BlinkTmrTimer(Sender: TObject); |
procedure OpenBtnMouseMove(Sender: TObject; Shift: TShiftState; X, |
Y: Integer); |
procedure BackgroundMouseMove(Sender: TObject; Shift: TShiftState; |
X, Y: Integer); |
procedure CloseBtnMouseMove(Sender: TObject; Shift: TShiftState; X, |
Y: Integer); |
procedure CryptBtnMouseMove(Sender: TObject; Shift: TShiftState; X, |
Y: Integer); |
procedure ExitBtnMouseMove(Sender: TObject; Shift: TShiftState; X, |
Y: Integer); |
procedure FormShow(Sender: TObject); |
procedure DragDropDrop(Sender: TObject; ShiftState: TShiftState; |
Point: TPoint; var Effect: Integer); |
procedure WaitTmr1Timer(Sender: TObject); |
procedure FormDestroy(Sender: TObject); |
public |
verz: string; |
OpenedFile: string; |
procedure OpenFile(filename: string); |
end; |
TSystemDirectory = (SD_NO, |
SD_DESKTOP, |
SD_IE, |
SD_SMPROGRAMS, |
SD_SETTINGS, |
SD_PRINTER, |
SD_PERSONAL, |
SD_FAVORITES, |
SD_AUTOSTART, |
SD_RECENT, |
SD_SENDTO, |
SD_PAPERBASKED, |
SD_STARTMENU, |
SD_MUSIC, |
SD_VIDEOS, |
SD_COMPUTER, |
SD_NETWORK, |
SD_FONTS, |
SD_SHELLNEW, |
SD_AUDESKTOP, |
SD_APPDATA, |
SD_PRINTHOOD, |
SD_TEMPINETFILES, |
SD_COOKIES, |
SD_COURSE, |
SD_AUAPPDATA, |
SD_WINDOWS, |
SD_SYSTEM, |
SD_PROGRAMS, |
SD_PICTURES, |
SD_AUFILES); |
var |
MainForm: TMainForm; |
implementation |
uses CoderUnit2, CoderUnit3; |
{$R *.DFM} |
var |
mem: TMemoryStream; |
a: char; |
j: integer; |
Blinked: integer; |
FileProtection: textfile; |
function GetFolder(FolderID: TSystemDirectory): string; |
var |
pidl: PItemIDList; |
Path: array[0..MAX_PATH] of Char; |
i: Integer; |
begin |
i := 0; |
case FolderID of |
SD_NO : Exit; |
SD_DESKTOP : i := $00; |
SD_IE : i := $01; |
SD_SMPROGRAMS : i := $02; |
SD_SETTINGS : i := $03; |
SD_PRINTER : i := $04; |
SD_PERSONAL : i := $05; |
SD_FAVORITES : i := $06; |
SD_AUTOSTART : i := $07; |
SD_RECENT : i := $08; |
SD_SENDTO : i := $09; |
SD_PAPERBASKED : i := $0A; |
SD_STARTMENU : i := $0B; |
SD_MUSIC : i := $0C; |
SD_VIDEOS : i := $0D; |
SD_COMPUTER : i := $11; |
SD_NETWORK : i := $12; |
SD_FONTS : i := $14; |
SD_SHELLNEW : i := $15; |
SD_AUDESKTOP : i := $19; |
SD_APPDATA : i := $1A; |
SD_PRINTHOOD : i := $1B; |
SD_TEMPINETFILES : i := $20; |
SD_COOKIES : i := $21; |
SD_COURSE : i := $22; |
SD_AUAPPDATA : i := $23; |
SD_WINDOWS : i := $24; |
SD_SYSTEM : i := $25; |
SD_PROGRAMS : i := $26; |
SD_PICTURES : i := $27; |
SD_AUFILES : i := $28; |
end; |
if SUCCEEDED(SHGetSpecialFolderLocation(0, i, pidl)) then |
begin |
SHGetPathFromIDList(pidl, Path); |
Result := Path; |
end; |
end; |
procedure TMainForm.OpenFile(filename: string); |
begin |
if not fileexists(filename) then |
begin |
//MessageDLG('Datei nicht gefunden!', mtInformation, [mbOK], 0); |
DlgForm.DialogLbl.caption := 'Datei nicht gefunden!'; |
DlgForm.showmodal; |
exit; |
end; |
assignfile(FileProtection, filename); |
reset(FileProtection); |
FileNameEdt.text := ExtractFileName(FileName); |
fileNameEdt.enabled := true; |
CryptBtn.Enabled := true; |
ProgressGge.showhint := false; |
ProgressGge.enabled := false; |
KeyEdt.Enabled:=true; |
KeyEdt.ShowHint := true; |
KeyLbl.Enabled:=true; |
CloseBtn.enabled := true; |
SaveDlg.filename := FileName; |
CloseBtn.showhint := true; |
CryptBtn.showhint := true; |
OpenedFile := filename; |
end; |
procedure TMainForm.ExitBtnClick(Sender: TObject); |
begin |
ExitBtn.font.color := clWindowText; |
MainForm.close; |
end; |
procedure TMainForm.OpenBtnClick(Sender: TObject); |
begin |
OpenBtn.font.color := clWindowText; |
if OpenDlg.Execute then OpenFile(OpenDlg.filename); |
end; |
procedure TMainForm.CryptBtnClick(Sender: TObject); |
begin |
CryptBtn.font.color := clWindowText; |
if KeyEdt.Text = '' then |
begin |
//MessageDLG('Sie müssen ein Passwort zum Verschlüsseln / Entschlüsseln eingeben!', mtInformation, [mbOK], 0); |
DlgForm.DialogLbl.caption := 'Sie müssen ein Passwort zum' + #13#10 + 'Verschlüsseln / Entschlüsseln eingeben!'; |
DlgForm.showmodal; |
BlinkTmr.enabled := true; |
end |
else |
PasswordDlg.showmodal; |
end; |
procedure TMainForm.StatusBarClick(Sender: TObject); |
begin |
ShellExecute(Handle, 'open', 'http://www.d-m-home.de/', '', '', 1); |
end; |
procedure TMainForm.CloseBtnClick(Sender: TObject); |
begin |
CloseBtn.font.color := clWindowText; |
closefile(FileProtection); |
ProgressGge.progress := 0; |
FilenameEdt.text := 'Keine Datei geöffnet'; |
FilenameEdt.enabled := false; |
CryptBtn.Enabled := false; |
KeyEdt.Text := ''; |
KeyEdt.Enabled := false; |
KeyEdt.ShowHint := false; |
KeyLbl.Enabled := false; |
ProgressGge.showhint := false; |
ProgressGge.enabled := false; |
CloseBtn.enabled := false; |
CloseBtn.showhint := false; |
CryptBtn.showhint := false; |
end; |
procedure TMainForm.FormCreate(Sender: TObject); |
begin |
verz := extractfilepath(paramstr(0)); |
MainForm.caption := application.title; |
TitelLbl.caption := application.title; |
TitelLbl.left := ((MainForm.ClientWidth-(TitelLbl.width)) div 2); |
StatusLbl2.left := ((MainForm.ClientWidth-(StatusLbl2.width)) div 2); |
CopyrightBvl.left := ((MainForm.ClientWidth-(CopyrightBvl.width)) div 2); |
ProgressPnl.left := ((MainForm.ClientWidth-(ProgressPnl.width)) div 2); |
KeyPnl.left := ((MainForm.ClientWidth-(KeyPnl.width)) div 2); |
DragDrop.register(mainform); |
SaveDlg.InitialDir := GetFolder(SD_PERSONAL); |
OpenDlg.InitialDir := GetFolder(SD_PERSONAL); |
end; |
procedure TMainForm.WaitTmr2Timer(Sender: TObject); |
var |
i: integer; |
temp: string; |
begin |
WaitTmr2.enabled := false; |
mem := TMemoryStream.Create; |
mem.LoadFromfile(OpenedFile); |
ProgressGge.MaxValue := mem.size; |
for i := 0 to mem.Size - 1 do |
begin |
mem.Position := i; |
mem.Read(a, 1); |
inc(j); |
if j > length(KeyEdt.text) then j := 1; |
temp := copy(KeyEdt.text, j, 1); |
a := CHR(byte(a) xor byte(temp[1])); |
mem.Position := i; |
mem.Write(a, 1); |
ProgressGge.Progress := ProgressGge.Progress + 1; |
end; |
j := 0; |
if SaveDlg.Filename = OpenDlg.Filename then closefile(fileprotection); |
mem.SaveToFile(SaveDlg.FileName); |
if SaveDlg.Filename = OpenDlg.Filename then openfile(OpenDlg.Filename); |
mem.Free; |
FilenameEdt.enabled := true; |
CryptBtn.Enabled := true; |
KeyEdt.Enabled := true; |
KeyLbl.Enabled := true; |
CloseBtn.enabled := true; |
OpenBtn.enabled := true; |
TitelLbl.Cursor := crDefault; |
mainform.Cursor := crDefault; |
exitbtn.Cursor := crDefault; |
closebtn.Cursor := crDefault; |
openbtn.Cursor := crDefault; |
cryptbtn.Cursor := crDefault; |
keyedt.Cursor := crDefault; |
filenameedt.Cursor := crDefault; |
keypnl.Cursor := crDefault; |
keylbl.Cursor := crDefault; |
progressgge.Cursor := crDefault; |
copyrightbvl.Cursor := crDefault; |
copyrightlbl1.Cursor := crDefault; |
copyrightlbl2.Cursor := crDefault; |
statusbar.Cursor := crDefault; |
StatusLbl2.caption := 'Programm bereit!'; |
StatusLbl1.font.color := clGreen; |
StatusLbl2.font.color := clGreen; |
//MessageDLG('Datei wurde erfolgreich Verschlüsselt / Entschlüsselt!', mtInformation, [mbOK], 0); |
DlgForm.DialogLbl.caption := 'Datei wurde erfolgreich' + #13#10 + 'Verschlüsselt / Entschlüsselt!'; |
DlgForm.showmodal; |
ProgressGge.Progress := ProgressGge.MinValue; |
ProgressGge.showhint := false; |
ProgressGge.enabled := false; |
end; |
procedure TMainForm.BlinkTmrTimer(Sender: TObject); |
begin |
inc(Blinked); |
if Blinked = 7 then |
begin |
Blinked := 0; |
BlinkTmr.enabled := false; |
exit; |
end |
else |
begin |
if PasswordDlg.visible then |
begin |
if (Blinked = 1) or (Blinked = 3) or (Blinked = 5) then |
PasswordDlg.KeyLbl.font.color := clMaroon |
else |
PasswordDlg.KeyLbl.font.color := clWindowText; |
end |
else |
begin |
if (Blinked = 1) or (Blinked = 3) or (Blinked = 5) then |
KeyLbl.font.color := clMaroon |
else |
KeyLbl.font.color := clWindowText; |
end; |
end; |
end; |
procedure TMainForm.OpenBtnMouseMove(Sender: TObject; Shift: TShiftState; |
X, Y: Integer); |
begin |
OpenBtn.font.color := clnavy; |
CloseBtn.font.color := clWindowText; |
CryptBtn.font.color := clWindowText; |
ExitBtn.font.color := clWindowText; |
end; |
procedure TMainForm.BackgroundMouseMove(Sender: TObject; |
Shift: TShiftState; X, Y: Integer); |
begin |
OpenBtn.font.color := clWindowText; |
CloseBtn.font.color := clWindowText; |
CryptBtn.font.color := clWindowText; |
ExitBtn.font.color := clWindowText; |
end; |
procedure TMainForm.CloseBtnMouseMove(Sender: TObject; Shift: TShiftState; |
X, Y: Integer); |
begin |
CloseBtn.font.color := clnavy; |
OpenBtn.font.color := clWindowText; |
CryptBtn.font.color := clWindowText; |
ExitBtn.font.color := clWindowText; |
end; |
procedure TMainForm.CryptBtnMouseMove(Sender: TObject; Shift: TShiftState; |
X, Y: Integer); |
begin |
CryptBtn.font.color := clnavy; |
CloseBtn.font.color := clWindowText; |
OpenBtn.font.color := clWindowText; |
ExitBtn.font.color := clWindowText; |
end; |
procedure TMainForm.ExitBtnMouseMove(Sender: TObject; Shift: TShiftState; |
X, Y: Integer); |
begin |
ExitBtn.font.color := clnavy; |
CryptBtn.font.color := clWindowText; |
CloseBtn.font.color := clWindowText; |
OpenBtn.font.color := clWindowText; |
end; |
procedure TMainForm.FormShow(Sender: TObject); |
begin |
if ParamStr(1) <> '' then OpenFile(ParamStr(1)); |
end; |
procedure TMainForm.DragDropDrop(Sender: TObject; ShiftState: TShiftState; |
Point: TPoint; var Effect: Integer); |
begin |
if DragDrop.files.count>1 then |
begin |
//MessageDLG('Es kann nur eine Datei gleichzeitig geöffnet werden!', mtInformation, [mbOK], 0); |
DlgForm.DialogLbl.caption := 'Es kann nur eine Datei' + #13#10 + 'gleichzeitig geöffnet werden!'; |
DlgForm.showmodal; |
end |
else openfile(DragDrop.files[0]); |
end; |
procedure TMainForm.WaitTmr1Timer(Sender: TObject); |
begin |
WaitTmr1.enabled := false; |
if not SaveDlg.Execute then exit; |
CryptBtn.Enabled := false; |
KeyEdt.Enabled := false; |
KeyLbl.Enabled := false; |
ProgressGge.showhint := true; |
ProgressGge.enabled := true; |
CloseBtn.enabled := false; |
OpenBtn.enabled := false; |
TitelLbl.Cursor := crHourGlass; |
mainform.Cursor := crHourGlass; |
exitbtn.Cursor := crHourGlass; |
closebtn.Cursor := crHourGlass; |
openbtn.Cursor := crHourGlass; |
cryptbtn.Cursor := crHourGlass; |
keyedt.Cursor := crHourGlass; |
filenameedt.Cursor := crHourGlass; |
keypnl.Cursor := crHourGlass; |
keylbl.Cursor := crHourGlass; |
progressgge.Cursor := crHourGlass; |
copyrightbvl.Cursor := crHourGlass; |
copyrightlbl1.Cursor := crHourGlass; |
copyrightlbl2.Cursor := crHourGlass; |
statusbar.Cursor := crHourGlass; |
StatusLbl2.caption := 'Programm arbeitet...'; |
StatusLbl1.font.color := clMaroon; |
StatusLbl2.font.color := clMaroon; |
WaitTmr2.enabled := true; |
end; |
procedure TMainForm.FormDestroy(Sender: TObject); |
begin |
DragDrop.unregister; |
end; |
end. |
/trunk/History/Decoder33_Beta/CoderUnit2.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 |
/trunk/History/Decoder33_Beta/CoderUnit2.pas |
---|
0,0 → 1,84 |
unit CoderUnit2; |
interface |
uses |
Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls, |
Buttons, Dialogs, ExtCtrls, ElBtnCtl, ElPopBtn, ElXPThemedControl, |
ElEdits, ElCLabel, ElLabel; |
type |
TPasswordDlg = class(TForm) |
KeyLbl: TElLabel; |
KeyEdt: TElEdit; |
CancelBtn: TElPopupButton; |
OKBtn: TElPopupButton; |
procedure OKBtnClick(Sender: TObject); |
procedure KeyEdtChange(Sender: TObject); |
procedure FormShow(Sender: TObject); |
procedure OKBtnMouseMove(Sender: TObject; Shift: TShiftState; X, |
Y: Integer); |
procedure CancelBtnMouseMove(Sender: TObject; Shift: TShiftState; X, |
Y: Integer); |
procedure CancelBtnClick(Sender: TObject); |
procedure BackgroundMouseMove(Sender: TObject; Shift: TShiftState; X, |
Y: Integer); |
end; |
var |
PasswordDlg: TPasswordDlg; |
implementation |
uses CoderUnit1; |
{$R *.DFM} |
procedure TPasswordDlg.OKBtnClick(Sender: TObject); |
begin |
OKBtn.font.color := clWindowText; |
MainForm.WaitTmr1.enabled := true; |
end; |
procedure TPasswordDlg.KeyEdtChange(Sender: TObject); |
begin |
if KeyEdt.Text <> MainForm.KeyEdt.Text then |
OKBtn.enabled := false |
else |
OKBtn.enabled := true; |
end; |
procedure TPasswordDlg.FormShow(Sender: TObject); |
begin |
KeyEdt.Text := ''; |
KeyEdtChange(Sender); |
end; |
procedure TPasswordDlg.OKBtnMouseMove(Sender: TObject; Shift: TShiftState; |
X, Y: Integer); |
begin |
OKBtn.font.color := clNavy; |
CancelBtn.font.color := clWindowText; |
end; |
procedure TPasswordDlg.CancelBtnMouseMove(Sender: TObject; |
Shift: TShiftState; X, Y: Integer); |
begin |
CancelBtn.font.color := clNavy; |
OKBtn.font.color := clWindowText; |
end; |
procedure TPasswordDlg.CancelBtnClick(Sender: TObject); |
begin |
CancelBtn.font.color := clWindowText; |
end; |
procedure TPasswordDlg.BackgroundMouseMove(Sender: TObject; Shift: TShiftState; |
X, Y: Integer); |
begin |
OKBtn.font.color := clWindowText; |
CancelBtn.font.color := clWindowText; |
end; |
end. |
/trunk/History/Decoder33_Beta/CoderUnit3.dfm |
---|
0,0 → 1,54 |
object DlgForm: TDlgForm |
Left = 344 |
Top = 280 |
BorderIcons = [biSystemMenu] |
BorderStyle = bsSingle |
Caption = '(De)Coder' |
ClientHeight = 105 |
ClientWidth = 302 |
Color = clBtnFace |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clWindowText |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
OldCreateOrder = False |
Position = poMainFormCenter |
OnCreate = FormCreate |
OnMouseMove = BackgroundMouseMove |
OnShow = FormShow |
PixelsPerInch = 96 |
TextHeight = 13 |
object DialogImg: TImage |
Left = 8 |
Top = 8 |
Width = 32 |
Height = 32 |
AutoSize = True |
Transparent = True |
OnClick = OKBtnClick |
end |
object DialogLbl: TElLabel |
Left = 56 |
Top = 8 |
Width = 3 |
Height = 13 |
end |
object OKBtn: TElPopupButton |
Left = 200 |
Top = 72 |
Width = 91 |
Height = 25 |
DrawDefaultFrame = False |
Cancel = True |
Default = True |
ModalResult = 1 |
NumGlyphs = 1 |
Caption = 'OK' |
TabOrder = 0 |
OnClick = OKBtnClick |
OnMouseMove = OKBtnMouseMove |
DockOrientation = doNoOrient |
DoubleBuffered = False |
end |
end |
/trunk/History/Decoder33_Beta/CoderUnit3.pas |
---|
0,0 → 1,61 |
unit CoderUnit3; |
interface |
uses |
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, |
StdCtrls, ExtCtrls, Buttons, SRWave, ElXPThemedControl, ElBtnCtl, |
ElPopBtn, ElCLabel, ElLabel; |
type |
TDlgForm = class(TForm) |
DialogImg: TImage; |
OKBtn: TElPopupButton; |
DialogLbl: TElLabel; |
procedure OKBtnMouseMove(Sender: TObject; Shift: TShiftState; X, |
Y: Integer); |
procedure OKBtnClick(Sender: TObject); |
procedure BackgroundMouseMove(Sender: TObject; Shift: TShiftState; X, |
Y: Integer); |
procedure FormShow(Sender: TObject); |
procedure FormCreate(Sender: TObject); |
end; |
var |
DlgForm: TDlgForm; |
implementation |
uses CoderUnit1; |
{$R *.DFM} |
procedure TDlgForm.OKBtnMouseMove(Sender: TObject; Shift: TShiftState; X, |
Y: Integer); |
begin |
OKBtn.font.color := clNavy; |
end; |
procedure TDlgForm.OKBtnClick(Sender: TObject); |
begin |
OKBtn.font.color := clwindowText; |
end; |
procedure TDlgForm.BackgroundMouseMove(Sender: TObject; Shift: TShiftState; |
X, Y: Integer); |
begin |
OKBtn.font.color := clwindowText; |
end; |
procedure TDlgForm.FormShow(Sender: TObject); |
begin |
Beep; |
end; |
procedure TDlgForm.FormCreate(Sender: TObject); |
begin |
if fileexists(MainForm.verz+'Bilder\Info.bmp') then DialogImg.Picture.loadfromfile(MainForm.verz+'Bilder\Info.bmp'); |
end; |
end. |
/trunk/History/Decoder33_Beta/Coder_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 |
/trunk/History/Decoder33_Beta/Hilfe.rtf |
---|
0,0 → 1,182 |
{\rtf1\ansi\ansicpg1252\uc1\deff0\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang1031\deflangfe1031{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;} |
{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f10\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;} |
{\f36\fswiss\fcharset0\fprq2{\*\panose 020b0a04020102020204}Arial Black;}{\f37\fmodern\fcharset0\fprq1{\*\panose 020b0609040504020204}Lucida Console;}{\f38\fdecor\fcharset0\fprq2{\*\panose 04040905080b02020502}Broadway BT{\*\falt Courier New};} |
{\f64\froman\fcharset238\fprq2 Times New Roman CE;}{\f65\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f67\froman\fcharset161\fprq2 Times New Roman Greek;}{\f68\froman\fcharset162\fprq2 Times New Roman Tur;} |
{\f69\froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f70\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f71\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f72\froman\fcharset163\fprq2 Times New Roman (Vietnamese);} |
{\f74\fswiss\fcharset238\fprq2 Arial CE;}{\f75\fswiss\fcharset204\fprq2 Arial Cyr;}{\f77\fswiss\fcharset161\fprq2 Arial Greek;}{\f78\fswiss\fcharset162\fprq2 Arial Tur;}{\f79\fswiss\fcharset177\fprq2 Arial (Hebrew);} |
{\f80\fswiss\fcharset178\fprq2 Arial (Arabic);}{\f81\fswiss\fcharset186\fprq2 Arial Baltic;}{\f82\fswiss\fcharset163\fprq2 Arial (Vietnamese);}{\f84\fmodern\fcharset238\fprq1 Courier New CE;}{\f85\fmodern\fcharset204\fprq1 Courier New Cyr;} |
{\f87\fmodern\fcharset161\fprq1 Courier New Greek;}{\f88\fmodern\fcharset162\fprq1 Courier New Tur;}{\f89\fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f90\fmodern\fcharset178\fprq1 Courier New (Arabic);} |
{\f91\fmodern\fcharset186\fprq1 Courier New Baltic;}{\f92\fmodern\fcharset163\fprq1 Courier New (Vietnamese);}{\f424\fswiss\fcharset238\fprq2 Arial Black CE;}{\f425\fswiss\fcharset204\fprq2 Arial Black Cyr;} |
{\f427\fswiss\fcharset161\fprq2 Arial Black Greek;}{\f428\fswiss\fcharset162\fprq2 Arial Black Tur;}{\f431\fswiss\fcharset186\fprq2 Arial Black Baltic;}{\f434\fmodern\fcharset238\fprq1 Lucida Console CE;} |
{\f435\fmodern\fcharset204\fprq1 Lucida Console Cyr;}{\f437\fmodern\fcharset161\fprq1 Lucida Console Greek;}{\f438\fmodern\fcharset162\fprq1 Lucida Console Tur;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255; |
\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0; |
\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1031\langfe1031\cgrid\langnp1031\langfenp1031 \snext0 Normal;}{ |
\s1\ql \li0\ri0\keepn\nowidctlpar\faauto\outlinelevel0\rin0\lin0\itap0 \f38\fs44\ul\lang1031\langfe1031\cgrid\langnp1031\langfenp1031 \sbasedon0 \snext0 heading 1;}{\*\cs10 \additive \ssemihidden Default Paragraph Font;}{\* |
\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv |
\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs20\lang1024\langfe1024\cgrid\langnp1024\langfenp1024 \snext11 \ssemihidden Normal Table;}{\*\cs15 \additive \ul\cf2 \sbasedon10 Hyperlink;}{\*\cs16 \additive \ul\cf12 |
\sbasedon10 FollowedHyperlink;}}{\*\listtable{\list\listtemplateid1482435982\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67567617 |
\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;} |
\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160 |
\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 } |
{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23 |
\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 |
\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 |
\levelspace360\levelindent0{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext |
\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid386269968}{\list\listtemplateid-2045876772\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 |
\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360 |
\levelindent0{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext |
\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67567617 |
\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;} |
\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320 |
\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 } |
{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23 |
\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid663434895}}{\*\listoverridetable |
{\listoverride\listid386269968\listoverridecount0\ls1}{\listoverride\listid663434895\listoverridecount0\ls2}}{\*\rsidtbl \rsid2258391\rsid2892816\rsid6379893}{\*\generator Microsoft Word 10.0.2627;}{\info{\author Daniel Marschall} |
{\operator Daniel Marschall}{\creatim\yr2002\mo3\dy18\hr19\min15}{\revtim\yr2002\mo8\dy26\hr23\min57}{\version11}{\edmins0}{\nofpages3}{\nofwords588}{\nofchars3710}{\*\company DMCS}{\nofcharsws4290}{\vern16437}}\margl1417\margr1417\margt1417\margb1134 |
\widowctrl\ftnbj\aenddoc\hyphhotz425\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\horzdoc\dghspace120\dgvspace120\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind4\viewscale100\nolnhtadjtbl\rsidroot2258391 \fet0\sectd |
\linex0\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4 |
\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (} |
{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 |
\fs24\lang1031\langfe1031\cgrid\langnp1031\langfenp1031 {\f37\fs44\ul\insrsid2892816 (De)Coder V3.3}{\f37\fs44\insrsid2892816 \tab }{\b\f37\fs44\insrsid2892816 Hilfedatei}{\b\f36\ul\insrsid2892816 |
\par }{\f38\fs44\ul\insrsid2892816 |
\par }{\f1\fs20\insrsid2892816 |
\par }{\f1\fs22\insrsid2892816 Mit dem (De)Coder k\'f6nnen Sie alle Ihre geheimen und wichtigen Dateien und Programme verschl\'fcsseln und entschl\'fcsseln. Sie k\'f6nnen alle Dateitypen verwenden. Bei der Verschl\'fcsselung und der Entschl\'fc |
sselung werden die Dateien nicht gr\'f6\'dfer oder kleiner und es gehen keine Daten verloren. Sie k\'f6nnen die Dateien mit einem Passwort in beliebiger L\'e4nge verschl\'fcsseln. Die Bedienung ist ganz einfach und die Benutzeroberfl\'e4che ist grafi |
sch sehr gut. Das Programm wurde auf Bugs und Fehler gepr\'fcft und von unabh\'e4ngigen Personen mit sehr gut bewertet. Es enth\'e4lt keine Viren oder Trojaner! Das gute an dem (De)Coder ist, das das Programm selber erkennt, ob die Datei eine verschl\'fc |
sselte ist oder ob sie noch nicht verschl\'fcsselt ist. Die Verschl\'fcsselungs- und Entschl\'fcsselungsfunktionen sind in eine einzige Funktion zusammengebunden worden. Somit k\'f6nnen Sie Ihre Dateien nicht ausversehen doppelt verschl\'fc |
sseln oder entschl\'fcsseln. |
\par }{\f1\fs20\insrsid2892816 |
\par }{\b\f1\fs20\insrsid2892816 Wichtiger Hinweis: |
\par }{\f1\fs20\insrsid2892816 |
\par BITTE VERGESSEN SIE NICHT, DASS DAS PASSWORT BEI DER ENTSCHL\'dcSSELUNG GENAU SO GESCHRIEBEN }{\f1\fs20\insrsid2892816 WERDEN MUSS}{\f1\fs20\insrsid2892816 , WIE IN DER VERSCHL\'dcSSELUNG! DAS PROGRAMM UNTERSCHEIDET ZWISCHEN GRO\'df- UND KLEINSCHREIBUNG! |
\par |
\par }{\b\f1\fs20\insrsid2892816 Bedienung: |
\par }{\f1\fs20\insrsid2892816 |
\par }{\f1\fs20\ul\insrsid2892816 Datei \'f6ffnen: |
\par }{\f1\fs20\insrsid2892816 \tab \'d6ffnet eine zu verschl\'fcsselte Datei. |
\par |
\par }{\f1\fs20\ul\insrsid2892816 Datei schlie\'dfen: |
\par }{\f1\fs20\insrsid2892816 \tab Schlie\'dft die Datei wieder. |
\par |
\par }{\f1\fs20\ul\insrsid2892816 Beenden: |
\par }{\f1\fs20\insrsid2892816 \tab Beendet das Programm. |
\par |
\par }{\f1\fs20\ul\insrsid2892816 Verschl\'fcsseln / Entschl\'fcsseln: |
\par }{\f1\fs20\insrsid2892816 \tab Verschl\'fcsselt die Datei fordert dazu auf, |
\par \tab das Passwort erneut einzugeben und \'f6ffnet |
\par \tab ein Speicherfenster, um die Zieldatei |
\par \tab auszuw\'e4hlen. Wenn die Datei bereits |
\par \tab verschl\'fcsselt ist, wird sie wieder |
\par \tab entschl\'fcsselt. |
\par |
\par }{\f1\fs20\ul\insrsid2892816 Verschl\'fcsselungspasswort: |
\par }{\f1\fs20\insrsid2892816 \tab Ein Textfeld, indem Sie Ihr geheimes Passwort |
\par \tab eintragen m\'fcssen. |
\par |
\par }{\b\f1\fs20\insrsid2892816 Geschichte: |
\par }{\f1\fs20\insrsid2892816 |
\par }{\f1\fs20\ul\insrsid2892816 Version 1.0: |
\par }{\f1\fs20\insrsid2892816 \tab - Die Dateien werden \'fcber ein DOS-Programm |
\par \tab verschl\'fcsselt. Es werden nur die Buchstaben |
\par \tab mit anderen ersetzt! |
\par |
\par }{\f1\fs20\ul\insrsid2892816 Version 2.0: |
\par }{\f1\fs20\insrsid2892816 \tab - Die Dateien aus der alten Version k\'f6nnen |
\par \tab nicht mehr benutzt werden! |
\par \tab - Das erste Windowsprogramm! |
\par |
\par }{\f1\fs20\ul\insrsid2892816 Version 2.1: |
\par }{\f1\fs20\insrsid2892816 \tab - Die Dateien aus der alten Version k\'f6nnen |
\par \tab nicht mehr benutzt werden! |
\par \tab - Es kann eine Zahl von 1 - 255 zum |
\par \tab verschl\'fcsseln ausgesucht werden. |
\par |
\par }{\f1\fs20\ul\insrsid2892816 Version 2.2: |
\par }{\f1\fs20\insrsid2892816 \tab - Es kann eine Zahl von 1 - 256 zum |
\par \tab verschl\'fcsseln ausgesucht werden. |
\par |
\par }{\f1\fs20\ul\insrsid2892816 Version 3.0: |
\par }{\f1\fs20\insrsid2892816 \tab - Die Dateien aus der alten Version k\'f6nnen |
\par \tab nicht mehr benutzt werden! |
\par \tab - Nun kann auch ein Passwort eingegeben |
\par \tab werden! |
\par |
\par }{\f1\fs20\ul\insrsid2892816 Version 3.1: |
\par }{\f1\fs20\insrsid2892816 \tab - Nun noch viel schneller beim verschl\'fcsseln/ |
\par \tab entschl\'fcsseln! |
\par |
\par }{\f1\fs20\ul\insrsid2892816 Version 3.2: |
\par }{\f1\fs20\insrsid2892816 \tab - Die Passworteingabe wird mit Sternchen (*) |
\par \tab geschrieben! |
\par |
\par }{\f1\fs20\ul\insrsid2892816 Version 3.3: |
\par }{\f1\fs20\insrsid2892816 \tab - Grafische Optimierung! (Windows XP Design) |
\par \tab - Dateischutz hinzugef\'fcgt! (FileProtection) |
\par \tab - Kennwortbest\'e4tigung hinzugef\'fcgt! |
\par \tab - QuickStarter & Kontextmen\'fc sowie |
\par \tab Drag n\'b4 Drop in den Fenstern hinzugef\'fcgt. |
\par |
\par }{\b\f1\fs20\insrsid2892816 Systemanforderungen: |
\par }{\f1\fs20\insrsid2892816 |
\par {\listtext\pard\plain\f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ql \fi-360\li720\ri0\nowidctlpar\jclisttab\tx720\faauto\ls1\rin0\lin720\itap0 {\f1\fs20\insrsid2892816 Prozessor mit 133 MHz oder h\'f6her |
\par {\listtext\pard\plain\f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Windows 95 oder h\'f6her |
\par {\listtext\pard\plain\f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}32MB RAM empfohlen |
\par }\pard \ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 {\f1\fs20\insrsid2892816 |
\par }{\b\f1\fs20\insrsid2892816 Probleme: |
\par }{\f1\fs20\insrsid2892816 |
\par }{\f1\fs20\ul\insrsid2892816 Folgendes k\'f6nnte die Verschl\'fcsselung verhindern: |
\par }{\f1\fs20\insrsid2892816 |
\par {\listtext\pard\plain\f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard \ql \fi-360\li720\ri0\nowidctlpar\jclisttab\tx720\faauto\ls2\rin0\lin720\itap0 {\f1\fs20\insrsid2892816 Systemanforderungen nicht erf\'fcllt |
\par {\listtext\pard\plain\f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Nicht gen\'fcgend Arbeitsspeicher |
\par {\listtext\pard\plain\f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Nicht gen\'fcgend Festplattenspeicher |
\par {\listtext\pard\plain\f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Kein Passwort eingegeben |
\par {\listtext\pard\plain\f3\fs20 \loch\af3\dbch\af0\hich\f3 \'b7\tab}Ge\'f6ffnete Datei wurde vor dem verschl\'fcsseln gel\'f6scht... |
\par }\pard \ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 {\f1\fs20\insrsid2892816 |
\par }{\b\f1\fs20\insrsid2892816 Mitarbeiter: |
\par }{\f1\fs20\insrsid2892816 |
\par }{\f1\fs20\ul\insrsid2892816 Programmierung: |
\par }{\f1\fs20\insrsid2892816 \tab Daniel Marschall |
\par |
\par }{\f1\fs20\ul\insrsid2892816 Idee: |
\par }{\f1\fs20\insrsid2892816 \tab Daniel Marschall |
\par \tab ... und alle anderen Programmierer |
\par \tab von den Programmen, die mir |
\par \tab Inspiration verliehen haben! |
\par |
\par Ressourcen kommen aus Windows XP und anderen Webseiten. Das Programm wurde mit Delphi 5 Enterprise entwickelt und wurde mit einigen VCLs verbessert! |
\par |
\par Das Installationsprogramm wurde von InstallShield Express 3.02 German erstellt. |
\par |
\par }{\b\f1\fs20\insrsid2892816 Sonstiges: |
\par }{\f1\fs20\insrsid2892816 |
\par Dieses Programm benutzt zur Ver- / Entschl\'fcsselung den DMCS-CODEX (3.3) Algorithmus. |
\par |
\par }{\b\f1\fs20\insrsid2892816 Der Programmierer: |
\par }{\f1\fs20\insrsid2892816 |
\par Dieses Programm wurde am 1. M\'e4rz 2002 von |
\par Daniel Marschall programmiert. Der Programmierer |
\par haftet nicht f\'fcr sein Programm. Das Programm ist |
\par Freeware und darf vervielf\'e4ltigt werden, |
\par solange es unver\'e4ndert bleibt! |
\par |
\par Wenn Sie das Programm auf Ihren Server laden m\'f6chten |
\par oder wenn Sie vorhaben, das Programm auf eine CD |
\par zu packen, benachrichtigen Sie davor bitte erst den |
\par Autor. |
\par |
\par Sollte der Programmierer Rechte einer anderen |
\par Person oder Firma mit diesem Programm verletzt haben, |
\par sollte die Person / Firma erst einmal ein Gespr\'e4ch |
\par mit dem Programmierer aufnehmen und nicht sofort |
\par zum Anwalt rennen! |
\par |
\par }{\f1\fs20\ul\insrsid2892816 Homepage:}{\f1\fs20\insrsid2892816 \tab }{\field\flddirty{\*\fldinst {\b\f1\fs20\insrsid2892816 HYPERLINK "http://www.d-m-home.de/" }{\b\f1\fs20\insrsid2258391 {\*\datafield |
00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b3000000068007400740070003a002f002f007700770077002e0064002d006d002d0068006f006d0065002e00640065002f00000000000000}}}{\fldrslt {\cs15\b\f1\fs20\ul\cf2\insrsid2892816 |
http://www.d-m-home.de/}}}{\f1\fs20\insrsid2892816 |
\par }{\f1\fs20\ul\insrsid2892816 E-Mail:}{\f1\fs20\insrsid2892816 \tab \tab }{\field{\*\fldinst {\b\f1\fs20\insrsid6379893 HYPERLINK "mailto:}{\b\f1\fs20\insrsid6379893\charrsid6379893 daniel.marschall@surfeu.de}{\b\f1\fs20\insrsid6379893 " }{ |
\b\f1\fs20\insrsid6379893\charrsid15677702 {\*\datafield |
00d0c9ea79f9bace118c8200aa004ba90b02000000170000001b000000640061006e00690065006c002e006d006100720073006300680061006c006c0040007300750072006600650075002e00640065000000e0c9ea79f9bace118c8200aa004ba90b440000006d00610069006c0074006f003a00640061006e0069006500 |
6c002e006d006100720073006300680061006c006c0040007300750072006600650075002e00640065000000}}}{\fldrslt {\cs15\b\f1\fs20\ul\cf2\insrsid6379893\charrsid15677702 daniel.marschall@surfeu.de}}}{\f1\fs20\insrsid2892816 |
\par |
\par }} |
/trunk/History/Decoder33_Beta/Icons/TrayIcon.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 |
/trunk/History/Decoder33_Beta/QuickStart.cfg |
---|
0,0 → 1,35 |
-$A+ |
-$B- |
-$C+ |
-$D+ |
-$E- |
-$F- |
-$G+ |
-$H+ |
-$I+ |
-$J+ |
-$K- |
-$L+ |
-$M- |
-$N+ |
-$O+ |
-$P+ |
-$Q- |
-$R- |
-$S- |
-$T- |
-$U- |
-$V+ |
-$W- |
-$X+ |
-$YD |
-$Z1 |
-cg |
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; |
-H+ |
-W+ |
-M |
-$M16384,1048576 |
-K$00400000 |
-LE"c:\programme\borland\delphi5 enterprise\Projects\Bpl" |
-LN"c:\programme\borland\delphi5 enterprise\Projects\Bpl" |
/trunk/History/Decoder33_Beta/QuickStart.dof |
---|
0,0 → 1,88 |
[Compiler] |
A=1 |
B=0 |
C=1 |
D=1 |
E=0 |
F=0 |
G=1 |
H=1 |
I=1 |
J=1 |
K=0 |
L=1 |
M=0 |
N=1 |
O=1 |
P=1 |
Q=0 |
R=0 |
S=0 |
T=0 |
U=0 |
V=1 |
W=0 |
X=1 |
Y=1 |
Z=1 |
ShowHints=1 |
ShowWarnings=1 |
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; |
[Linker] |
MapFile=0 |
OutputObjs=0 |
ConsoleApp=1 |
DebugInfo=0 |
RemoteSymbols=0 |
MinStackSize=16384 |
MaxStackSize=1048576 |
ImageBase=4194304 |
ExeDescription=(De)Coder 3.3 - QuickStarter |
[Directories] |
OutputDir= |
UnitOutputDir= |
PackageDLLOutputDir= |
PackageDCPOutputDir= |
SearchPath= |
Packages=Vcl50;Vclx50;VclSmp50;Vcldb50;vclado50;ibevnt50;Vclbde50;vcldbx50;Qrpt50;TeeUI50;TeeDB50;Tee50;Dss50;TeeQR50;VCLIB50;Vclmid50;vclie50;Inetdb50;Inet50;NMFast50;webmid50;dclocx50;dclaxserver50;DelphiX_for5;pielib |
Conditionals= |
DebugSourceDirs= |
UsePackages=0 |
[Parameters] |
RunParams= |
HostApplication= |
[Language] |
ActiveLang= |
ProjectLang=$00000407 |
RootDir= |
[Version Info] |
IncludeVerInfo=1 |
AutoIncBuild=0 |
MajorVer=3 |
MinorVer=3 |
Release=0 |
Build=0 |
Debug=0 |
PreRelease=0 |
Special=0 |
Private=0 |
DLL=0 |
Locale=1031 |
CodePage=1252 |
[Version Info Keys] |
CompanyName=Daniel Marschall Computersoftware |
FileDescription=Der QuickStarter von (De)Coder 3.3... |
FileVersion=3.3.0.0 |
InternalName=(De)Coder 3.3 - QuickStarter |
LegalCopyright=(C)Copyright 2001 - 2002 Daniel Marschall |
LegalTrademarks=Keine |
OriginalFilename=Quickstarter.exe |
ProductName=(De)Coder 3.3 |
ProductVersion=3.3.0.0 |
Homepage=http://www.d-m-home.de |
[Excluded Packages] |
$(DELPHI)\Projects\Bpl\DCP_d3.bpl=DCPcrypt cryptographic components |
C:\Programme\BlowFish\delphi5\d5_blow.bpl=TSM Blowfish |
[HistoryLists\hlUnitAliases] |
Count=1 |
Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; |
/trunk/History/Decoder33_Beta/QuickStart.dpr |
---|
0,0 → 1,19 |
program QuickStart; |
{$Description '(De)Coder 3.3 - QuickStarter'} |
uses |
Forms, |
QuickStartUnit1 in 'QuickStartUnit1.pas' {MainForm}, |
QuickStartUnit2 in 'QuickStartUnit2.pas' {InfoForm}; |
{$R *.RES} |
begin |
Application.Initialize; |
Application.ShowMainForm := false; |
Application.Title := '(De)Coder 3.3 QuickStarter'; |
Application.CreateForm(TMainForm, MainForm); |
Application.CreateForm(TInfoForm, InfoForm); |
Application.Run; |
end. |
/trunk/History/Decoder33_Beta/QuickStart.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 |
/trunk/History/Decoder33_Beta/QuickStart.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 |
/trunk/History/Decoder33_Beta/QuickStartUnit1.dfm |
---|
0,0 → 1,96 |
object MainForm: TMainForm |
Left = 247 |
Top = 133 |
BorderIcons = [biSystemMenu] |
BorderStyle = bsSingle |
Caption = 'QuickStarter' |
ClientHeight = 105 |
ClientWidth = 302 |
Color = clBtnFace |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clWindowText |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
OldCreateOrder = False |
Position = poDesktopCenter |
OnClose = FormClose |
OnCreate = FormCreate |
OnHide = FormHide |
OnMouseMove = BackgroundMouseMove |
OnShow = FormShow |
PixelsPerInch = 96 |
TextHeight = 13 |
object DialogImg: TImage |
Left = 8 |
Top = 8 |
Width = 32 |
Height = 32 |
AutoSize = True |
Transparent = True |
OnMouseMove = BackgroundMouseMove |
end |
object DialogLbl: TElLabel |
Left = 56 |
Top = 8 |
Width = 3 |
Height = 13 |
end |
object NoBtn: TElPopupButton |
Left = 208 |
Top = 72 |
Width = 83 |
Height = 25 |
DrawDefaultFrame = False |
Cancel = True |
Default = True |
NumGlyphs = 1 |
Caption = '&Nein' |
TabOrder = 0 |
OnClick = NoBtnClick |
OnMouseMove = NoBtnMouseMove |
DockOrientation = doNoOrient |
DoubleBuffered = False |
end |
object YesBtn: TElPopupButton |
Left = 120 |
Top = 72 |
Width = 83 |
Height = 25 |
DrawDefaultFrame = False |
NumGlyphs = 1 |
Caption = '&Ja' |
TabOrder = 1 |
OnClick = YesBtnClick |
OnMouseMove = YesBtnMouseMove |
DockOrientation = doNoOrient |
DoubleBuffered = False |
end |
object TrayPopup: TPopupMenu |
Left = 40 |
Top = 72 |
object DeCoderstarten1: TMenuItem |
Caption = '(De)Coder &starten!' |
Default = True |
OnClick = TrayIconClick |
end |
object N1: TMenuItem |
Caption = '-' |
end |
object QuickStarterinfo: TMenuItem |
Caption = '&Informationen' |
OnClick = QuickStarterinfo2Click |
end |
object QuickStarterbeenden1: TMenuItem |
Caption = 'QuickStarter &beenden!' |
OnClick = QuickStarterbeenden1Click |
end |
end |
object TrayIcon: TantTaskbarIcon |
Hint = '(De)Coder 3.3 QucikStarter!' |
PopupMenu = TrayPopup |
OnClick = TrayIconClick |
Left = 8 |
Top = 72 |
end |
end |
/trunk/History/Decoder33_Beta/QuickStartUnit1.pas |
---|
0,0 → 1,137 |
unit QuickStartUnit1; |
interface |
uses |
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, |
TaskBarIcon, TaskIcon, ShellAPI, StdCtrls, Buttons, ExtCtrls, SRWave, |
Menus, antTaskbarIcon, ElBaseComp, ElTray, ElXPThemedControl, ElBtnCtl, |
ElPopBtn, ElCLabel, ElLabel; |
type |
TMainForm = class(TForm) |
DialogImg: TImage; |
TrayPopup: TPopupMenu; |
DeCoderstarten1: TMenuItem; |
N1: TMenuItem; |
QuickStarterbeenden1: TMenuItem; |
QuickStarterinfo: TMenuItem; |
TrayIcon: TantTaskbarIcon; |
NoBtn: TElPopupButton; |
YesBtn: TElPopupButton; |
DialogLbl: TElLabel; |
procedure FormCreate(Sender: TObject); |
procedure FormClose(Sender: TObject; var Action: TCloseAction); |
procedure NoBtnClick(Sender: TObject); |
procedure YesBtnClick(Sender: TObject); |
procedure FormShow(Sender: TObject); |
procedure QuickStarterbeenden1Click(Sender: TObject); |
procedure QuickStarterinfo2Click(Sender: TObject); |
procedure YesBtnMouseMove(Sender: TObject; Shift: TShiftState; X, |
Y: Integer); |
procedure NoBtnMouseMove(Sender: TObject; Shift: TShiftState; X, |
Y: Integer); |
procedure BackgroundMouseMove(Sender: TObject; Shift: TShiftState; X, |
Y: Integer); |
procedure FormHide(Sender: TObject); |
procedure TrayIconClick(Sender: TObject); |
public |
verz: string; |
end; |
var |
MainForm: TMainForm; |
implementation |
uses |
QuickStartUnit2; |
{$R *.DFM} |
procedure TMainForm.FormCreate(Sender: TObject); |
var |
Sem: THandle; |
begin |
Sem := CreateSemaphore(nil, 0, 1, 'PROGRAM_NAME'); |
if (Sem <> 0) and (GetLastError = ERROR_ALREADY_EXISTS) then |
begin |
CloseHandle(Sem); |
ShowMessage('Der QuickStarter wurde schon gestartet.'); |
Halt; |
end; |
verz := extractfilepath(paramstr(0)); |
if not fileexists(verz+'Coder.exe') then Decoderstarten1.enabled := false; |
if fileexists(verz+'Bilder\Info.bmp') then DialogImg.Picture.LoadFromFile(verz+'Bilder\Info.bmp'); |
if fileexists(verz+'Icons\TrayIcon.ico') then TrayIcon.Icon.LoadFromFile(verz+'Icons\TrayIcon.ico'); |
DialogLbl.caption := 'Möchten Sie den QuickStarter von (De)Coder 3.3' + #13#10 + 'wirklich beenden?'; |
TrayIcon.visible := true; |
end; |
procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction); |
begin |
TrayIcon.visible := false; |
end; |
procedure TMainForm.NoBtnClick(Sender: TObject); |
begin |
NoBtn.font.color := clwindowtext; |
MainForm.Hide; |
end; |
procedure TMainForm.YesBtnClick(Sender: TObject); |
begin |
YesBtn.font.color := clwindowtext; |
MainForm.close; |
end; |
procedure TMainForm.FormShow(Sender: TObject); |
begin |
Beep; |
MainForm.TrayIcon.enabled := false; |
end; |
procedure TMainForm.QuickStarterbeenden1Click(Sender: TObject); |
begin |
MainForm.Show; |
end; |
procedure TMainForm.QuickStarterinfo2Click(Sender: TObject); |
begin |
InfoForm.show; |
end; |
procedure TMainForm.YesBtnMouseMove(Sender: TObject; Shift: TShiftState; X, |
Y: Integer); |
begin |
YesBtn.font.color := clnavy; |
NoBtn.font.color := clwindowtext; |
end; |
procedure TMainForm.NoBtnMouseMove(Sender: TObject; Shift: TShiftState; X, |
Y: Integer); |
begin |
YesBtn.font.color := clwindowtext; |
NoBtn.font.color := clnavy; |
end; |
procedure TMainForm.BackgroundMouseMove(Sender: TObject; Shift: TShiftState; X, |
Y: Integer); |
begin |
YesBtn.font.color := clwindowtext; |
NoBtn.font.color := clwindowtext; |
end; |
procedure TMainForm.FormHide(Sender: TObject); |
begin |
MainForm.TrayIcon.enabled := true; |
end; |
procedure TMainForm.TrayIconClick(Sender: TObject); |
begin |
if Decoderstarten1.enabled then shellexecute(handle, 'open', |
pchar(verz+'Coder.exe'), '', '', 1); |
end; |
end. |
/trunk/History/Decoder33_Beta/QuickStartUnit2.dfm |
---|
0,0 → 1,98 |
object InfoForm: TInfoForm |
Left = 273 |
Top = 210 |
BorderIcons = [biSystemMenu] |
BorderStyle = bsSingle |
Caption = '(De)Coder QuickStarter' |
ClientHeight = 155 |
ClientWidth = 316 |
Color = clBtnFace |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clWindowText |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
OldCreateOrder = False |
Position = poDesktopCenter |
OnClose = FormClose |
OnCreate = FormCreate |
OnMouseMove = BackgroundMouseMove |
OnShow = FormShow |
PixelsPerInch = 96 |
TextHeight = 13 |
object OKBtn: TElPopupButton |
Left = 216 |
Top = 120 |
Width = 91 |
Height = 25 |
DrawDefaultFrame = False |
NumGlyphs = 1 |
Caption = '&OK' |
TabOrder = 0 |
OnClick = OKBtnClick |
OnMouseMove = OKBtnMouseMove |
DockOrientation = doNoOrient |
DoubleBuffered = False |
end |
object ElPanel1: TElPanel |
Left = 8 |
Top = 8 |
Width = 297 |
Height = 105 |
Align = alNone |
MouseCapture = False |
TabOrder = 1 |
OnMouseMove = BackgroundMouseMove |
DockOrientation = doNoOrient |
DoubleBuffered = False |
object InfoLbl5: TElLabel |
Left = 56 |
Top = 80 |
Width = 117 |
Height = 13 |
Caption = 'Alle Rechte vorbehalten!' |
OnMouseMove = BackgroundMouseMove |
end |
object InfoLbl4: TElLabel |
Left = 56 |
Top = 64 |
Width = 201 |
Height = 13 |
Caption = '(C)Copyright 2001 - 2002 Daniel Marschall.' |
OnMouseMove = BackgroundMouseMove |
end |
object InfoLbl2: TElLabel |
Left = 56 |
Top = 24 |
Width = 110 |
Height = 13 |
Caption = '(De)Coder QuickStarter' |
OnMouseMove = BackgroundMouseMove |
end |
object InfoLbl1: TElLabel |
Left = 56 |
Top = 8 |
Width = 166 |
Height = 13 |
Caption = 'Daniel Marschall Computersoftware' |
OnMouseMove = BackgroundMouseMove |
end |
object InfoLbl3: TElLabel |
Left = 232 |
Top = 24 |
Width = 53 |
Height = 13 |
Caption = 'Version 3.3' |
OnMouseMove = BackgroundMouseMove |
end |
object InfoImg: TImage |
Left = 16 |
Top = 16 |
Width = 32 |
Height = 32 |
AutoSize = True |
Transparent = True |
OnMouseMove = BackgroundMouseMove |
end |
end |
end |
/trunk/History/Decoder33_Beta/QuickStartUnit2.pas |
---|
0,0 → 1,72 |
unit QuickStartUnit2; |
interface |
uses |
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, |
StdCtrls, ExtCtrls, Buttons, ElXPThemedControl, ElBtnCtl, ElPopBtn, |
ElCLabel, ElLabel, ElPanel; |
type |
TInfoForm = class(TForm) |
OKBtn: TElPopupButton; |
ElPanel1: TElPanel; |
InfoLbl5: TElLabel; |
InfoLbl4: TElLabel; |
InfoLbl2: TElLabel; |
InfoLbl1: TElLabel; |
InfoLbl3: TElLabel; |
InfoImg: TImage; |
procedure FormShow(Sender: TObject); |
procedure FormClose(Sender: TObject; var Action: TCloseAction); |
procedure OKBtnClick(Sender: TObject); |
procedure FormCreate(Sender: TObject); |
procedure OKBtnMouseMove(Sender: TObject; Shift: TShiftState; X, |
Y: Integer); |
procedure BackgroundMouseMove(Sender: TObject; Shift: TShiftState; X, |
Y: Integer); |
end; |
var |
InfoForm: TInfoForm; |
implementation |
uses QuickStartUnit1; |
{$R *.DFM} |
procedure TInfoForm.FormShow(Sender: TObject); |
begin |
MainForm.TrayIcon.enabled := false; |
end; |
procedure TInfoForm.FormClose(Sender: TObject; var Action: TCloseAction); |
begin |
MainForm.TrayIcon.enabled := true; |
end; |
procedure TInfoForm.OKBtnClick(Sender: TObject); |
begin |
OKBtn.Font.color := clblack; |
InfoForm.close; |
end; |
procedure TInfoForm.FormCreate(Sender: TObject); |
begin |
if fileexists(mainform.verz+'Bilder\QuickStarter.bmp') then InfoImg.Picture.LoadFromFile(mainform.verz+'Bilder\QuickStarter.bmp'); |
end; |
procedure TInfoForm.OKBtnMouseMove(Sender: TObject; Shift: TShiftState; |
X, Y: Integer); |
begin |
OKBtn.Font.color := clnavy; |
end; |
procedure TInfoForm.BackgroundMouseMove(Sender: TObject; Shift: TShiftState; X, |
Y: Integer); |
begin |
OKBtn.Font.color := clblack; |
end; |
end. |
/trunk/History/Decoder33_Beta/_InnoSetup/Coder.iss |
---|
0,0 → 1,55 |
; (De)Coder 3.3 Setup Script for InnoSetup 3.0.6 |
; by Daniel Marschall |
; http://www.d-m-home.de/ |
; Shut-Down QuickStarter?! |
[Setup] |
AppName=(De)Coder |
AppVerName=(De)Coder 3.3 |
AppVersion=3.3 |
AppCopyright=(C)Copyright 2001 - 2003 Daniel Marschall. Alle Rechte vorbehalten! |
AppPublisher=Daniel Marschall Computersoftware |
AppPublisherURL=http://www.d-m-home.de/ |
AppSupportURL=http://www.d-m-home.de/ |
AppUpdatesURL=http://www.d-m-home.de/ |
DefaultDirName={pf}\(De)Coder |
DefaultGroupName=(De)Coder |
InfoBeforeFile=G:\Programmierung\Veröffentlichte Programme\(De)Coder 3.3\Hilfe.rtf |
Compression=zip/9 |
; MinVersion=4,3.51 |
[LangOptions] |
LanguageName=Deutsch |
LanguageID=$0407 |
[Tasks] |
Name: "desktopicon"; Description: "Erstelle eine Verknüpfung auf dem &Desktop"; GroupDescription: "Programmverknüpfungen:"; MinVersion: 4,4 |
Name: "contextmenu"; Description: "Erstelle Eintrag im &Kontextmenü der Dateien"; GroupDescription: "Registrierungseinträge:"; MinVersion: 4,4 |
Name: "quickstarter"; Description: "Installiere den (De)Coder &QuickStarter"; GroupDescription: "Zusatzprogramme:"; MinVersion: 4,4 |
[Files] |
Source: "G:\Programmierung\Veröffentlichte Programme\(De)Coder 3.3\Coder.exe"; DestDir: "{app}"; Flags: ignoreversion |
Source: "G:\Programmierung\Veröffentlichte Programme\(De)Coder 3.3\QuickStart.exe"; DestDir: "{app}"; Flags: ignoreversion; Tasks: quickstarter |
; Source: "G:\Programmierung\Veröffentlichte Programme\(De)Coder 3.3\Bilder\Background.jpg"; DestDir: "{app}\Bilder"; Flags: ignoreversion |
Source: "G:\Programmierung\Veröffentlichte Programme\(De)Coder 3.3\Bilder\Info.bmp"; DestDir: "{app}\Bilder"; Flags: ignoreversion |
Source: "G:\Programmierung\Veröffentlichte Programme\(De)Coder 3.3\Bilder\QuickStarter.bmp"; DestDir: "{app}\Bilder"; Flags: ignoreversion; Tasks: quickstarter |
Source: "G:\Programmierung\Veröffentlichte Programme\(De)Coder 3.3\Icons\TrayIcon.ico"; DestDir: "{app}\Icons"; Flags: ignoreversion; Tasks: quickstarter |
[Icons] |
Name: "{group}\(De)Coder"; Filename: "{app}\Coder.exe" |
Name: "{group}\Daniel Marschall Computersoftware"; Filename: "http://www.d-m-home.de/" |
Name: "{userdesktop}\(De)Coder"; Filename: "{app}\Coder.exe"; MinVersion: 4,4; Tasks: desktopicon |
Name: "{group}\(De)Coder deinstallieren"; Filename: "{uninstallexe}" |
; Must uninstall! |
[Registry] |
Root: HKCR; Subkey: "*\Shell\(De)Coder"; ValueType: string; ValueName: ""; ValueData: "(De)&Coder 3.3 starten..."; Flags: uninsdeletekey; Tasks: contextmenu |
; WITH %1 PARAMETER! |
Root: HKCR; Subkey: "*\Shell\(De)Coder\Command"; ValueType: string; ValueName: ""; ValueData: "{app}\Coder.exe"; Flags: uninsdeletekey; Tasks: contextmenu |
[Run] |
Filename: "{app}\Coder.exe"; Description: "(De)Coder starten"; Flags: nowait postinstall skipifsilent |
Filename: "{app}\QuickStart.exe"; Flags: nowait; Tasks: quickstarter |
/trunk/History/Decoder33_Beta/test_in.txt |
---|
0,0 → 1,0 |
Hello World! This is a Test! |
/trunk/History/Decoder33_Beta/test_out_foobar.txt |
---|
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 |
/trunk/History/Decoder40_DEC3AlphaSource/Coder.cfg |
---|
0,0 → 1,35 |
-$A8 |
-$B- |
-$C+ |
-$D+ |
-$E- |
-$F- |
-$G+ |
-$H+ |
-$I+ |
-$J+ |
-$K- |
-$L+ |
-$M- |
-$N+ |
-$O+ |
-$P+ |
-$Q- |
-$R- |
-$S- |
-$T- |
-$U- |
-$V+ |
-$W- |
-$X+ |
-$YD |
-$Z1 |
-cg |
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; |
-H+ |
-W+ |
-M |
-$M16384,1048576 |
-K$00400000 |
-LE"c:\programme\borland\delphi6\Projects\Bpl" |
-LN"c:\programme\borland\delphi6\Projects\Bpl" |
/trunk/History/Decoder40_DEC3AlphaSource/Coder.dof |
---|
0,0 → 1,86 |
[FileVersion] |
Version=6.0 |
[Compiler] |
A=8 |
B=0 |
C=1 |
D=1 |
E=0 |
F=0 |
G=1 |
H=1 |
I=1 |
J=1 |
K=0 |
L=1 |
M=0 |
N=1 |
O=1 |
P=1 |
Q=0 |
R=0 |
S=0 |
T=0 |
U=0 |
V=1 |
W=0 |
X=1 |
Y=1 |
Z=1 |
ShowHints=1 |
ShowWarnings=1 |
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; |
[Linker] |
MapFile=0 |
OutputObjs=0 |
ConsoleApp=1 |
DebugInfo=0 |
RemoteSymbols=0 |
MinStackSize=16384 |
MaxStackSize=1048576 |
ImageBase=4194304 |
ExeDescription=(De)Coder 4.0 |
[Directories] |
OutputDir= |
UnitOutputDir= |
PackageDLLOutputDir= |
PackageDCPOutputDir= |
SearchPath= |
Packages=Vcl50;Vclx50;VclSmp50;Vcldb50;vclado50;ibevnt50;Vclbde50;vcldbx50;Qrpt50;TeeUI50;TeeDB50;Tee50;Dss50;TeeQR50;VCLIB50;Vclmid50;vclie50;Inetdb50;Inet50;NMFast50;webmid50;dclocx50;dclaxserver50;DelphiX_for5;DragDropD5;DialogsEx |
Conditionals= |
DebugSourceDirs= |
UsePackages=0 |
[Parameters] |
RunParams= |
HostApplication= |
Launcher= |
UseLauncher=0 |
DebugCWD= |
[Version Info] |
IncludeVerInfo=1 |
AutoIncBuild=0 |
MajorVer=4 |
MinorVer=0 |
Release=0 |
Build=0 |
Debug=0 |
PreRelease=0 |
Special=0 |
Private=0 |
DLL=0 |
Locale=1031 |
CodePage=1252 |
[Version Info Keys] |
CompanyName=Daniel Marschall Computersoftware |
FileDescription=Eine sehr gute Verschlüsselungssoftware... |
FileVersion=4.0.0.0 |
InternalName=(De)Coder 4.0 |
LegalCopyright=(C)Copyright 2001 - 2003 Daniel Marschall |
LegalTrademarks=Keine |
OriginalFilename=Coder.exe |
ProductName=(De)Coder |
ProductVersion=4.0.0.0 |
Homepage=http://www.d-m-home.de/ |
[HistoryLists\hlUnitAliases] |
Count=1 |
Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; |
/trunk/History/Decoder40_DEC3AlphaSource/Coder.dpr |
---|
0,0 → 1,29 |
program Coder; |
{%ToDo 'Coder.todo'} |
{$Description '(De)Coder 4.0'} |
uses |
Forms, |
Main in 'Main.pas' {MainForm}, |
Options in 'Options.pas' {OptionsForm}, |
RepeatPassword in 'RepeatPassword.pas' {RepeatForm}, |
Message in 'Message.pas' {MessageForm}, |
FileInfo in 'FileInfo.pas' {InfoForm}, |
HSLUnit in 'HSLUnit.pas'; |
{$R *.RES} |
begin |
Application.Initialize; |
Application.Title := '(De)Coder 4.0'; |
Application.ShowMainForm := false; |
Application.CreateForm(TMainForm, MainForm); |
Application.CreateForm(TOptionsForm, OptionsForm); |
Application.CreateForm(TRepeatForm, RepeatForm); |
Application.CreateForm(TMessageForm, MessageForm); |
Application.CreateForm(TInfoForm, InfoForm); |
Application.Run; |
end. |
/trunk/History/Decoder40_DEC3AlphaSource/Coder.dproj |
---|
0,0 → 1,153 |
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
<PropertyGroup> |
<ProjectGuid>{DC8E1551-21C1-42E2-B845-88EF832AC955}</ProjectGuid> |
<MainSource>Coder.dpr</MainSource> |
<Base>True</Base> |
<Config Condition="'$(Config)'==''">Debug</Config> |
<TargetedPlatforms>1</TargetedPlatforms> |
<AppType>Application</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="('$(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)'!=''"> |
<DCC_E>false</DCC_E> |
<DCC_F>false</DCC_F> |
<DCC_K>false</DCC_K> |
<DCC_N>true</DCC_N> |
<DCC_S>false</DCC_S> |
<DCC_ImageBase>00400000</DCC_ImageBase> |
<DCC_DebugInformation>1</DCC_DebugInformation> |
<DCC_WriteableConstants>true</DCC_WriteableConstants> |
<DCC_SymbolReferenceInfo>1</DCC_SymbolReferenceInfo> |
<DCC_Description>(De)Coder 4.0</DCC_Description> |
<DCC_UsePackage>Vcl50;Vclx50;VclSmp50;Vcldb50;vclado50;ibevnt50;Vclbde50;vcldbx50;Qrpt50;TeeUI50;TeeDB50;Tee50;Dss50;TeeQR50;VCLIB50;Vclmid50;vclie50;Inetdb50;Inet50;NMFast50;webmid50;dclocx50;dclaxserver50;DelphiX_for5;DragDropD5;DialogsEx;$(DCC_UsePackage)</DCC_UsePackage> |
<SanitizedProjectName>Coder</SanitizedProjectName> |
<DCC_Namespace>Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;System.Win;DUnitX.CommandLine;FireDAC.Stan;$(DCC_Namespace)</DCC_Namespace> |
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo> |
<VerInfo_MajorVer>4</VerInfo_MajorVer> |
<VerInfo_Locale>1031</VerInfo_Locale> |
<VerInfo_Keys>CompanyName=Daniel Marschall Computersoftware;FileDescription=Eine sehr gute Verschlüsselungssoftware...;FileVersion=4.0.0.0;InternalName=(De)Coder 4.0;LegalCopyright=(C)Copyright 2001 - 2003 Daniel Marschall;LegalTrademarks=Keine;OriginalFilename=Coder.exe;ProductName=(De)Coder;ProductVersion=4.0.0.0;Homepage=http://www.d-m-home.de/</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> |
<Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File> |
<Icon_MainIcon>Coder_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="'$(Base_Win64)'!=''"> |
<Icon_MainIcon>Coder_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)'!=''"> |
<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_1_Win32)'!=''"> |
<AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode> |
</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)'!=''"> |
<AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode> |
</PropertyGroup> |
<ItemGroup> |
<DelphiCompile Include="$(MainSource)"> |
<MainSource>MainSource</MainSource> |
</DelphiCompile> |
<DCCReference Include="Main.pas"> |
<Form>MainForm</Form> |
</DCCReference> |
<DCCReference Include="Options.pas"> |
<Form>OptionsForm</Form> |
</DCCReference> |
<DCCReference Include="RepeatPassword.pas"> |
<Form>RepeatForm</Form> |
</DCCReference> |
<DCCReference Include="Message.pas"> |
<Form>MessageForm</Form> |
</DCCReference> |
<DCCReference Include="FileInfo.pas"> |
<Form>InfoForm</Form> |
</DCCReference> |
<DCCReference Include="HSLUnit.pas"/> |
<None Include="Coder.todo"/> |
<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/> |
<BorlandProject> |
<Delphi.Personality> |
<Source> |
<Source Name="MainSource">Coder.dpr</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> |
/trunk/History/Decoder40_DEC3AlphaSource/Coder.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 |
/trunk/History/Decoder40_DEC3AlphaSource/Coder.identcache |
---|
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 |
/trunk/History/Decoder40_DEC3AlphaSource/Coder.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 |
/trunk/History/Decoder40_DEC3AlphaSource/Coder.todo |
---|
0,0 → 1,4 |
{TODO : Maus auf Button klick, wegziehen -> Aufleucht} |
{TODO : Verhindern, dass man bei SaveDlg einen anderen Typ als *.dc4 wählt!!!} |
{TODO : Soll Inital Dir (Eigene Dateien) bei jedem klick auf "Öffnen" gesetzt werden?} |
{TODO : Open/SaveDlg Cascading Fehler in Debug-Runtime?}{TODO : WaitTmr1 unnötig!!!}{TODO : Wenn kein Passwort eingegeben, dann auch Enc/Dec-Buttons nicht aktiviert?}{TODO : siehe kommentare im quelltext}{TODO : Dateien auch vor verändern schützen, wenn sie von decoder geöffnet sind...}{TODO : Unnötige uses einträge? was macht die exe so fett?}{TODO : Repeat: HTMLLbl --> ElLbl}{TODO : Mit Language File und Ini File}{TODO : Icon aus Registry rausfiltern?} |
/trunk/History/Decoder40_DEC3AlphaSource/Coder_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 |
/trunk/History/Decoder40_DEC3AlphaSource/FileInfo.ddp |
---|
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 |
/trunk/History/Decoder40_DEC3AlphaSource/FileInfo.dfm |
---|
0,0 → 1,278 |
object InfoForm: TInfoForm |
Left = 631 |
Top = 237 |
BorderIcons = [biSystemMenu, biMinimize] |
BorderStyle = bsNone |
Caption = 'Dateiinformationen' |
ClientHeight = 219 |
ClientWidth = 321 |
Color = clBtnFace |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clWindowText |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
OldCreateOrder = False |
Position = poMainFormCenter |
OnShow = FormShow |
PixelsPerInch = 96 |
TextHeight = 13 |
object Capt: TElPanel |
Left = 0 |
Top = 0 |
Width = 321 |
Height = 29 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alTop |
UseXPThemes = False |
TabOrder = 0 |
OnMouseDown = CaptMouseDown |
DockOrientation = doNoOrient |
object CaptLabel: TElLabel |
Left = 8 |
Top = 7 |
Width = 131 |
Height = 16 |
Caption = 'Dateiinformationen' |
ShadowColor = clBlack |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clWhite |
Font.Height = -13 |
Font.Name = 'MS Sans Serif' |
Font.Style = [fsBold] |
ParentFont = False |
end |
object ExBtn: TElPanel |
Tag = 1 |
Left = 292 |
Top = 0 |
Width = 29 |
Height = 29 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alNone |
UseXPThemes = False |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clWhite |
Font.Height = -13 |
Font.Name = 'MS Sans Serif' |
Font.Style = [fsBold] |
ParentFont = False |
TabOrder = 0 |
Caption = 'X' |
OnMouseDown = MouseDown |
OnMouseUp = MouseUp |
OnMouseEnter = ExBtnMouseEnter |
OnMouseLeave = ExBtnMouseLeave |
DockOrientation = doNoOrient |
end |
end |
object MainPanel: TElPanel |
Left = 0 |
Top = 29 |
Width = 321 |
Height = 190 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alClient |
UseXPThemes = False |
TabOrder = 1 |
DockOrientation = doNoOrient |
object InfoLbl0: TElLabel |
Left = 8 |
Top = 8 |
Width = 251 |
Height = 13 |
Caption = 'Folgende Informationen sind in der Datei gespeichert:' |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clMaroon |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
ParentFont = False |
end |
object InfoLbl1: TElLabel |
Left = 56 |
Top = 32 |
Width = 90 |
Height = 13 |
Caption = 'Benutzte Software:' |
end |
object InfoLbl1b: TElLabel |
Left = 184 |
Top = 32 |
Width = 6 |
Height = 13 |
Caption = '?' |
end |
object InfoLbl2: TElLabel |
Left = 56 |
Top = 48 |
Width = 84 |
Height = 13 |
Caption = 'Computerbesitzer:' |
end |
object InfoLbl2b: TElLabel |
Left = 184 |
Top = 48 |
Width = 6 |
Height = 13 |
Caption = '?' |
end |
object InfoLbl3: TElLabel |
Left = 56 |
Top = 64 |
Width = 92 |
Height = 13 |
Caption = 'Original Dateiname:' |
end |
object InfoLbl3b: TElLabel |
Left = 184 |
Top = 64 |
Width = 6 |
Height = 13 |
Caption = '?' |
end |
object InfoLbl4: TElLabel |
Left = 56 |
Top = 88 |
Width = 57 |
Height = 13 |
Caption = 'Algorithmus:' |
end |
object InfoLbl4b: TElLabel |
Left = 184 |
Top = 88 |
Width = 6 |
Height = 13 |
Caption = '?' |
end |
object InfoLbl5: TElLabel |
Left = 56 |
Top = 104 |
Width = 116 |
Height = 13 |
Caption = 'Verschl'#252'sselungsmodus:' |
end |
object InfoLbl5b: TElLabel |
Left = 184 |
Top = 104 |
Width = 6 |
Height = 13 |
Caption = '?' |
end |
object InfoImg: TImage |
Left = 8 |
Top = 32 |
Width = 32 |
Height = 32 |
AutoSize = True |
Picture.Data = { |
055449636F6E0000010001002020FF0000000000A80800001600000028000000 |
2000000040000000010008000000000000000000000000000000000000000000 |
00000000000000009393930082828200858585008989890091919100A1A1A100 |
8CA8B2006CB0C60055AFCF002B91B8002487A90028748E004369760064646400 |
71717100838383009D9D9D006CA5B9000B98C8006FC9E500B2E8FF006BD1FF00 |
64CDFC004AC0EF0036B6E6002697BE002176930046636C006868680081818100 |
A5A5A5000C9FD20013A2D500AAEAFF0070D6FF0069D2FC0047C0EC00259DC700 |
296C8100565F62007A7A7A00A6A6A60040B3D9001DA8DB00A0EDFF0075DBFF00 |
73D9FF006DD3FF0071D7FF0066D3F90031ADD500286B81005F5F5F008A8A8A00 |
28ADE00098EFFF0079DFFF0076DCFF0054BBEC0059C3F50072D8FE005BCEF200 |
1B91B7004B54570033B3E60091F2FF0080E5FF007EE4FF004FAFDA0043ABDE00 |
70D8FA0060D2F2000099CC00707070003AB6E9009DF7FE0085EAFF007EE2F900 |
459CC300409ECB0074DAF50063D6F20049BDF000B5F2FD0089EFFF008BF1FF00 |
65BBD0003A87AC003D92BB0068C8E2008AF0FF0067DAF20054C3F600BCF5FD00 |
8EF4FF008FF5FF007ECED70040809F003A88AD0054AECD0091F7FF006ADDF200 |
5BC7FA00C4F7FD0093F9FF0092F8FF006193A50068C3DB006EE1F20066CCFF00 |
CBFAFE0099FFFF0094F9FF006D96A400587D90007DD7E60073E6F20073CAE500 |
D3FBFE0090F6FF006B919E0078CAE500E6FCFE00CEFDFE00CCFDFE00CAFDFE00 |
BBFEFF00B1FFFF009AF2FF0088E6FF0094EEFF00ADFFFF0082E6F20060BFDF00 |
7FCCE5008BD2EA009BD4E700BDE3F000DEF1F700EDFBFE00E8FBFE00DBFCFE00 |
99E6F2003DC0E2004CC6E1002E7198001A6E9A0020719D004FA9D90050C1F400 |
3EB5E2005BC0E300C2E9F500CEFEFF00CCFFFF003EAED40060D9EC001379A600 |
69CFFF0060C9FC0027ACDF00D7F1F80035B7DB0086F2F90045C2DE001AA6D900 |
14A3D6005CCCEB0079DEFF0064CBFE0055C3F6004ABEF00038B1E3002378A400 |
20729D00E5F7FB0066C2DF000B9FD200ADADAD0073BFD9003AB6E80085EBFF00 |
5EBFF0001696C70027ADDF0010A1D400278CBB004DBFF20035A3C90045C5E600 |
229DC60078C4DE0048BDF00042687500A0A0A0003AACD2003BB4DC001AA7D900 |
50B5DB0045C1E9007ADFFF005C5C5C0035B4E6003ABDE20054D0E90096FCFF00 |
39BFDF003A606C00676767008FA2A80087ECFF008E8E8E004DCCE6008FF9FC00 |
69DFEF0083A9B600000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
0000000000000000000000000001020304050600000000000000000000000000 |
00000000000000000000000708090A0A0B0C0D0E0F1011000000000000000000 |
00000000000000000000121314151616161718191A1B1C1D1E1F000000000000 |
0000000000000000000020211422232323232323232425262728292A00000000 |
0000000000000000002B2C2C142D2E2E2E2E2E2F30312E2E3233343536000000 |
0000000000000000002B3737143839393939393A3B3C3D3939393E3F40040000 |
0000000000000000002B414114424343434343444546474343434348494A0000 |
0000000000000000002B4B4B144C4D4D4D4D4D4E4F50514D4D4D4D52494A0000 |
0000000000000000002B5353145455555555565758595A5B5555555C494A0000 |
0000000000000000002B5D5D145E5F5F5F5F6061626364655F5F5F66494A0000 |
0000000000000000002B6767146869696969696A6B626C6A6969696D494A0000 |
0000000000000000002B6E6E146F7070707070717273747070707075494A0000 |
0000000000000000002B303076777070707070780879747070707075494A0000 |
0000000000000000002B3A3A7A7B7C7D7E7E7F808182838484848485494A0000 |
0000000000000000002B4348868788898A8B8C8D8E777E7F7F7F7F8F494A0000 |
0000000000000000002B909192939495964B979888998C8D8E9A9B8F494A0000 |
0000000000000000009C9D859E49490A9FA09625412CA15AA28C7B8F494A0000 |
00000000000000000000A3A4A5A6A7A8A930AAABACADAEAF9E9CA2B049020000 |
0000000000000000000000B12C372C7556443D9FA0599E20133FB28849B30000 |
000000000000000000000000B4B5379D7069B6A930B7B8B9BABB2CB279000000 |
000000000000000000000000B4BC4BAEBDBE9D4E443D3741A62541BF00000000 |
000000000000000000000000C0A0C1C2C30000C0C4C5C6BCA1A1BD0000000000 |
0000000000000000000000000096A0271E0000000000C767374A000000000000 |
00000000000000000000000000C8C9BFCA0600000000C79FCB4A000000000000 |
00000000000000000000000000C75552271DB300000045C9CC29000000000000 |
0000000000000000000000000000CDCECFD0D105B3D2BED3CCD4000000000000 |
00000000000000000000000000006C8570D5AFC20D26D6CE1A00000000000000 |
000000000000000000000000000000B1D770D686867070D5D800000000000000 |
0000000000000000000000000000000088A5857070A4A3080000000000000000 |
0000000000000000000000000000000000008987878700000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000FFFFFFFFFF81FFFFFE001FFFFC0003FFFC0000FFF800007FF800003F |
F800003FF800003FF800003FF800003FF800003FF800003FF800003FF800003F |
F800003FF800003FF800003FFC00003FFE00003FFF00007FFF0000FFFF0601FF |
FF87C3FFFF83C3FFFF81C3FFFFC003FFFFC007FFFFE007FFFFF00FFFFFFC3FFF |
FFFFFFFF} |
end |
object ElLabel1: TElLabel |
Left = 56 |
Top = 128 |
Width = 248 |
Height = 13 |
Caption = 'Die Datei wurde von diesem Computer verschl'#252'sselt.' |
end |
object OKBtn: TElPanel |
Left = 96 |
Top = 152 |
Width = 129 |
Height = 25 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alNone |
UseXPThemes = False |
Enabled = False |
TabOrder = 0 |
Caption = 'OK' |
OnMouseDown = MouseDown |
OnMouseUp = MouseUp |
OnMouseEnter = OKBtnMouseEnter |
OnMouseLeave = OKBtnMouseLeave |
DockOrientation = doNoOrient |
end |
end |
end |
/trunk/History/Decoder40_DEC3AlphaSource/FileInfo.pas |
---|
0,0 → 1,165 |
unit FileInfo; |
interface |
uses |
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, |
Dialogs, ElXPThemedControl, ElBtnCtl, ElPopBtn, StdCtrls, ElCLabel, |
ElLabel, ExtCtrls, ElPanel; |
type |
TInfoForm = class(TForm) |
Capt: TElPanel; |
CaptLabel: TElLabel; |
ExBtn: TElPanel; |
MainPanel: TElPanel; |
OKBtn: TElPanel; |
InfoLbl0: TElLabel; |
InfoLbl1: TElLabel; |
InfoLbl1b: TElLabel; |
InfoLbl2: TElLabel; |
InfoLbl2b: TElLabel; |
InfoLbl3: TElLabel; |
InfoLbl3b: TElLabel; |
InfoLbl4: TElLabel; |
InfoLbl4b: TElLabel; |
InfoLbl5: TElLabel; |
InfoLbl5b: TElLabel; |
InfoImg: TImage; |
ElLabel1: TElLabel; |
procedure CaptMouseDown(Sender: TObject; Button: TMouseButton; |
Shift: TShiftState; X, Y: Integer); |
procedure MouseDown(Sender: TObject; Button: TMouseButton; |
Shift: TShiftState; X, Y: Integer); |
procedure MouseUp(Sender: TObject; Button: TMouseButton; |
Shift: TShiftState; X, Y: Integer); |
procedure ExBtnMouseLeave(Sender: TObject); |
procedure FormShow(Sender: TObject); |
procedure OKBtnMouseEnter(Sender: TObject); |
procedure OKBtnMouseLeave(Sender: TObject); |
procedure ExBtnMouseEnter(Sender: TObject); |
public |
procedure DrawDesign(); |
procedure ClickHandler(Sender: TObject); |
end; |
var |
InfoForm: TInfoForm; |
implementation |
uses Main; |
{$R *.dfm} |
procedure TInfoForm.ClickHandler(Sender: TObject); |
begin; |
if (Sender = OkBtn) or (Sender = ExBtn) then |
close; |
end; |
procedure TInfoForm.CaptMouseDown(Sender: TObject; Button: TMouseButton; |
Shift: TShiftState; X, Y: Integer); |
begin |
ReleaseCapture; |
perform(WM_SysCommand, $F012, 0); |
end; |
procedure TInfoForm.MouseDown(Sender: TObject; Button: TMouseButton; |
Shift: TShiftState; X, Y: Integer); |
begin |
if Button = mbLeft then |
begin |
TElPanel(Sender).BevelOuter := bvLowered; |
MBDown := true; |
end; |
end; |
procedure TInfoForm.MouseUp(Sender: TObject; Button: TMouseButton; |
Shift: TShiftState; X, Y: Integer); |
begin |
if (Button = mbLeft) and MBDown then |
begin |
TElPanel(Sender).BevelOuter := bvRaised; |
MBDown := false; |
// Standardfarbe |
TElPanel(Sender).GradientEndColor := Design_Button_Active1; |
TElPanel(Sender).GradientStartColor := Design_Button_Active2; |
// Ausfürhung |
ClickHandler(Sender); |
end; |
end; |
procedure TInfoForm.DrawDesign(); |
begin |
MainPanel.GradientEndColor := Design_Form1; |
MainPanel.GradientStartColor := Design_Form2; |
Capt.GradientEndColor := Design_Caption1; |
Capt.GradientStartColor := Design_Caption2; |
ExBtn.GradientEndColor := Design_Caption1; |
ExBtn.GradientStartColor := Design_Caption2; |
if (OkBtn.Tag = 1) then MainForm.ChangeButtonState(true, OkBtn) else MainForm.ChangeButtonState(false, OkBtn); |
end; |
procedure TInfoForm.ExBtnMouseLeave(Sender: TObject); |
begin |
TElPanel(Sender).BevelOuter := bvRaised; |
MBDown := false; |
if (TElPanel(Sender).Tag = 1) then |
begin |
TElPanel(Sender).GradientEndColor := Design_Caption1; |
TElPanel(Sender).GradientStartColor := Design_Caption2; |
end; |
end; |
procedure TInfoForm.FormShow(Sender: TObject); |
var |
Hgt: integer; |
begin |
DrawDesign; |
MainForm.ChangeButtonState(true, OKBtn); |
// Titelleiste á la Windows |
//Hgt := GetSystemMetrics(SM_CYCAPTION); |
Hgt := MainForm.Capt.Height; |
Capt.Height := Hgt; |
ExBtn.Height := Hgt; |
ExBtn.Width := Hgt; |
ExBtn.Left := Capt.Width - ExBtn.Width; |
CaptLabel.Top := Capt.Height div 2 - CaptLabel.Height div 2; |
end; |
procedure TInfoForm.OKBtnMouseEnter(Sender: TObject); |
begin |
// Aufleuchten |
if (TElPanel(Sender).Tag = 1) then |
begin |
TElPanel(Sender).GradientEndColor := Design_Button_Leuchtend1; |
TElPanel(Sender).GradientStartColor := Design_Button_Leuchtend2; |
end; |
end; |
procedure TInfoForm.OKBtnMouseLeave(Sender: TObject); |
begin |
TElPanel(Sender).BevelOuter := bvRaised; |
MBDown := false; |
if (TElPanel(Sender).Tag = 1) then |
begin |
TElPanel(Sender).GradientEndColor := Design_Button_Active1; |
TElPanel(Sender).GradientStartColor := Design_Button_Active2; |
end; |
end; |
procedure TInfoForm.ExBtnMouseEnter(Sender: TObject); |
begin |
// Aufleuchten |
if (TElPanel(Sender).Tag = 1) then |
begin |
TElPanel(Sender).GradientEndColor := Design_Caption_Active1; |
TElPanel(Sender).GradientStartColor := Design_Caption_Active2; |
end; |
end; |
end. |
/trunk/History/Decoder40_DEC3AlphaSource/HSLUnit.pas |
---|
0,0 → 1,167 |
unit HSLUnit; |
interface |
uses |
Windows, Graphics; |
var |
HSLRange : integer = 240; |
// convert a HSL value into a RGB in a TColor |
// HSL values are 0.0 to 1.0 double |
function HSLtoRGB (H, S, L: double): TColor; |
// convert a HSL value into a RGB in a TColor |
// SL values are 0 to the HSLRange variable |
// H value is to HSLRange-1 |
function HSLRangeToRGB (H, S, L : integer): TColor; |
// convert a RGB value (as TColor) into HSL |
// HSL values are 0.0 to 1.0 double |
procedure RGBtoHSL (RGB: TColor; var H, S, L : double); |
// convert a RGB value (as TColor) into HSL |
// SL values are 0 to the HSLRange variable |
// H value is to HSLRange-1 |
procedure RGBtoHSLRange (RGB: TColor; var H, S, L : integer); |
implementation |
function HSLtoRGB (H, S, L: double): TColor; |
var |
M1, |
M2: double; |
function HueToColourValue (Hue: double) : byte; |
var |
V : double; |
begin |
if Hue < 0 then |
Hue := Hue + 1 |
else |
if Hue > 1 then |
Hue := Hue - 1; |
if 6 * Hue < 1 then |
V := M1 + (M2 - M1) * Hue * 6 |
else |
if 2 * Hue < 1 then |
V := M2 |
else |
if 3 * Hue < 2 then |
V := M1 + (M2 - M1) * (2/3 - Hue) * 6 |
else |
V := M1; |
Result := round (255 * V) |
end; |
var |
R, |
G, |
B: byte; |
begin |
if S = 0 then |
begin |
R := round (255 * L); |
G := R; |
B := R |
end else begin |
if L <= 0.5 then |
M2 := L * (1 + S) |
else |
M2 := L + S - L * S; |
M1 := 2 * L - M2; |
R := HueToColourValue (H + 1/3); |
G := HueToColourValue (H); |
B := HueToColourValue (H - 1/3) |
end; |
Result := RGB (R, G, B) |
end; |
function HSLRangeToRGB (H, S, L : integer): TColor; |
begin |
Result := HSLToRGB (H / (HSLRange-1), S / HSLRange, L / HSLRange) |
end; |
// Convert RGB value (0-255 range) into HSL value (0-1 values) |
procedure RGBtoHSL (RGB: TColor; var H, S, L : double); |
function Max (a, b : double): double; |
begin |
if a > b then |
Result := a |
else |
Result := b |
end; |
function Min (a, b : double): double; |
begin |
if a < b then |
Result := a |
else |
Result := b |
end; |
var |
R, |
G, |
B, |
D, |
Cmax, |
Cmin: double; |
begin |
R := GetRValue (RGB) / 255; |
G := GetGValue (RGB) / 255; |
B := GetBValue (RGB) / 255; |
Cmax := Max (R, Max (G, B)); |
Cmin := Min (R, Min (G, B)); |
// calculate luminosity |
L := (Cmax + Cmin) / 2; |
if Cmax = Cmin then // it's grey |
begin |
H := 0; // it's actually undefined |
S := 0 |
end else begin |
D := Cmax - Cmin; |
// calculate Saturation |
if L < 0.5 then |
S := D / (Cmax + Cmin) |
else |
S := D / (2 - Cmax - Cmin); |
// calculate Hue |
if R = Cmax then |
H := (G - B) / D |
else |
if G = Cmax then |
H := 2 + (B - R) /D |
else |
H := 4 + (R - G) / D; |
H := H / 6; |
if H < 0 then |
H := H + 1 |
end |
end; |
procedure RGBtoHSLRange (RGB: TColor; var H, S, L : integer); |
var |
Hd, |
Sd, |
Ld: double; |
begin |
RGBtoHSL (RGB, Hd, Sd, Ld); |
H := round (Hd * (HSLRange-1)); |
S := round (Sd * HSLRange); |
L := round (Ld * HSLRange); |
end; |
end. |
/trunk/History/Decoder40_DEC3AlphaSource/Main.ddp |
---|
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 |
/trunk/History/Decoder40_DEC3AlphaSource/Main.dfm |
---|
0,0 → 1,933 |
object MainForm: TMainForm |
Left = 357 |
Top = 250 |
BorderIcons = [biSystemMenu, biMinimize] |
BorderStyle = bsNone |
Caption = '(De)Coder 4.0' |
ClientHeight = 366 |
ClientWidth = 519 |
Color = clBtnFace |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clWindowText |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
OldCreateOrder = False |
Position = poDesktopCenter |
Visible = True |
OnShow = FormShow |
PixelsPerInch = 96 |
TextHeight = 13 |
object BgPanel: TElPanel |
Left = 0 |
Top = 29 |
Width = 519 |
Height = 337 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alClient |
UseXPThemes = False |
TabOrder = 0 |
DockOrientation = doNoOrient |
object ULab1: TElLabel |
Left = 8 |
Top = 8 |
Width = 153 |
Height = 30 |
Caption = '(De)Coder 4.0' |
Effect = lesShadow |
ShadowColor = 12900 |
XOffset = 1 |
YOffset = 1 |
Font.Charset = DEFAULT_CHARSET |
Font.Color = 2610 |
Font.Height = -24 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
ParentFont = False |
end |
object CLab1: TElHTMLLabel |
Left = 8 |
Top = 304 |
Width = 341 |
Height = 26 |
Cursor = crDefault |
Caption = |
'<font color="#643200">© Copyright 2001 - 2004 Daniel Marsch' + |
'all. Alle Rechte vorbehalten!<br>'#13#10'Webseite: <a href="home">http' + |
'://www.d-m-home.de/</a> - E-Mail: <a href="email">info@daniel-ma' + |
'rschall.de</a></font>' |
IsHTML = True |
WordWrap = False |
LinkColor = clRed |
LinkStyle = [fsUnderline] |
OnLinkClick = CLab1LinkClick |
end |
object DLab1: TElLabel |
Left = 72 |
Top = 56 |
Width = 100 |
Height = 13 |
Caption = 'Keine Datei ge'#246'ffnet.' |
ShadowColor = clBlack |
Font.Charset = DEFAULT_CHARSET |
Font.Color = 2610 |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
ParentFont = False |
end |
object DImg: TImage |
Left = 32 |
Top = 56 |
Width = 32 |
Height = 32 |
AutoSize = True |
Picture.Data = { |
07544269746D6170360C0000424D360C00000000000036000000280000002000 |
0000200000000100180000000000000C0000C40E0000C40E0000000000000000 |
0000FF00FFFF00FFFF00FF000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FF808080000000000000000000000000000000000000000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FF808080FFFFFFFFFFFFFFFFFFC0C0C0808080000000FF00FFFF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FF808080FFFFFFFFFFFFC0C0C0808080000000FF00FFFF00FFFF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FF808080FFFFFFC0C0C0808080000000FF00FFFF00FFFF00FFFF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FF808080C0C0C0808080000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FF808080808080000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FF808080000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080808080808080808080808080808080808080 |
8080808080808080808080808080808080808080808080808080808080808080 |
80808080FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF |
00FF} |
Transparent = True |
Visible = False |
end |
object DLab3: TElLabel |
Left = 32 |
Top = 96 |
Width = 57 |
Height = 13 |
Caption = 'Verzeichnis:' |
ShadowColor = clBlack |
Font.Charset = DEFAULT_CHARSET |
Font.Color = 2610 |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
ParentFont = False |
Visible = False |
end |
object DLab3b: TElLabel |
Left = 48 |
Top = 112 |
Width = 281 |
Height = 13 |
Caption = 'Verzeichnis' |
ShadowColor = clBlack |
AutoSize = False |
Font.Charset = DEFAULT_CHARSET |
Font.Color = 2610 |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
ParentFont = False |
Visible = False |
end |
object DLab2: TElLabel |
Left = 72 |
Top = 72 |
Width = 42 |
Height = 13 |
Caption = 'Dateityp:' |
ShadowColor = clBlack |
Font.Charset = DEFAULT_CHARSET |
Font.Color = 2610 |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
ParentFont = False |
Visible = False |
end |
object DLab1b: TElLabel |
Left = 160 |
Top = 56 |
Width = 12 |
Height = 13 |
Caption = '1b' |
ShadowColor = clBlack |
Font.Charset = DEFAULT_CHARSET |
Font.Color = 2610 |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
ParentFont = False |
Visible = False |
end |
object DLab2b: TElLabel |
Left = 160 |
Top = 72 |
Width = 12 |
Height = 13 |
Caption = '2b' |
ShadowColor = clBlack |
Font.Charset = DEFAULT_CHARSET |
Font.Color = 2610 |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
ParentFont = False |
Visible = False |
end |
object DLab4: TElHTMLLabel |
Left = 32 |
Top = 136 |
Width = 54 |
Height = 13 |
Cursor = crDefault |
Caption = 'Dateistatus' |
IsHTML = True |
WordWrap = False |
LinkColor = clMaroon |
LinkStyle = [fsUnderline] |
Font.Charset = DEFAULT_CHARSET |
Font.Color = 2610 |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
ParentFont = False |
Visible = False |
end |
object DImg2: TImage |
Left = 32 |
Top = 56 |
Width = 32 |
Height = 32 |
AutoSize = True |
Picture.Data = { |
07544269746D6170360C0000424D360C00000000000036000000280000002000 |
0000200000000100180000000000000C0000C40E0000C40E0000000000000000 |
0000FF00FFFF00FFFF00FF000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000FF00FFFF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000 |
00000000000000000000000000000000FFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0080800080800080800080800080800080 |
80008080008080008080008080008080000000C0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF008080FFFFFF00FFFF00FFFF00FFFF00FF |
FF00FFFF00FFFF00FFFF00FFFF008080000000C0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0008080FFFFFF0080800080800080800080 |
80008080008080008080C0C0C0008080000000C0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF008080FFFFFF00FFFF00FFFF00FFFF00FF |
FF00FFFF00FFFF00FFFF00FFFF008080000000C0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0008080FFFFFF0080800080800080800080 |
80008080008080008080C0C0C0008080000000C0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF008080FFFFFF00FFFF00FFFF00FFFF00FF |
FF00FFFF00FFFF00FFFF00FFFF008080000000C0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0008080FFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFF008080000000C0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0080800080800080800080800080 |
80008080008080008080008080008080000000C0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C00080800000000080800080 |
80008080008080008080000000008080FFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF008080000000FFFFFFFFFF |
FFFFFFFFFFFFFF008080000000FFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0008080000000C0C0C0C0C0 |
C0C0C0C0C0C0C0008080000000FFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF008080C0C0C0000000FFFF |
FFFFFFFF008080008080000000FFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0008080C0C0C00000 |
00000000008080000000FFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0080800080 |
80008080008080FFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FF808080000000000000000000000000000000000000000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FF808080FFFFFFFFFFFFFFFFFFC0C0C0808080000000FF00FFFF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FF808080FFFFFFFFFFFFC0C0C0808080000000FF00FFFF00FFFF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FF808080FFFFFFC0C0C0808080000000FF00FFFF00FFFF00FFFF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FF808080C0C0C0808080000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FF808080808080000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FF808080000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080808080808080808080808080808080808080 |
8080808080808080808080808080808080808080808080808080808080808080 |
80808080FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF |
00FF} |
Transparent = True |
Visible = False |
end |
object DImg3: TImage |
Left = 32 |
Top = 56 |
Width = 32 |
Height = 32 |
AutoSize = True |
Picture.Data = { |
07544269746D6170360C0000424D360C00000000000036000000280000002000 |
0000200000000100180000000000000C0000C40E0000C40E0000000000000000 |
0000FF00FFFF00FFFF00FF000000000000000000000000000000000000000000 |
0000000000000000000000000000000000000000000000000000000000000000 |
00000000000000000000000000000000000000000000000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C00000 |
80000080000080000080000080868686868686C0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000800000800000 |
FF0000FF0000FF0000FF0000FF000080000080868686868686FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000800000FF0000FF0000 |
FF0000FF0000FF0000FF0000FF0000FF0000FF000080868686868686FF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000800000FF0000FFF8F8F80000 |
FF0000FF0000FF0000FF0000FFF8F8F80000FF0000FF000080868686FF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C00000800000FFF8F8F8F8F8F8F8F8 |
F80000FF0000FF0000FFF8F8F8F8F8F8F8F8F80000FF000080868686868686FF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000800000FF0000FF0000FFF8F8F8F8F8 |
F8F8F8F80000FFF8F8F8F8F8F8F8F8F80000FF0000FF0000FF000080868686FF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C00000800000FF0000FF0000FF0000FFF8F8 |
F8F8F8F8F8F8F8F8F8F8F8F8F80000FF0000FF0000FF0000FF000080868686FF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000800000FF0000FF0000FF0000FF0000 |
FFF8F8F8F8F8F8F8F8F80000FF0000FF0000FF0000FF0000FF000080868686FF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C00000800000FF0000FF0000FF0000FFF8F8 |
F8F8F8F8F8F8F8F8F8F8F8F8F80000FF0000FF0000FF0000FF000080868686FF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000800000FF0000FF0000FFF8F8F8F8F8 |
F8F8F8F80000FFF8F8F8F8F8F8F8F8F80000FF0000FF0000FF000080FF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C00000800000FFF8F8F8F8F8F8F8F8 |
F80000FF0000FF0000FFF8F8F8F8F8F8F8F8F80000FF000080868686FF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000800000FF0000FFF8F8F80000 |
FF0000FF0000FF0000FF0000FFF8F8F80000FF0000FF000080FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C00000800000FF0000FF0000 |
FF0000FF0000FF0000FF0000FF0000FF0000FF000080000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000800000800000 |
FF0000FF0000FF0000FF0000FF000080000080C0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C00000 |
80000080000080000080000080FFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FF808080000000000000000000000000000000000000000000FF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FF808080FFFFFFFFFFFFFFFFFFC0C0C0808080000000FF00FFFF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FF808080FFFFFFFFFFFFC0C0C0808080000000FF00FFFF00FFFF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFC0C0C0C0C0C0C0C0C0C0C0C0 |
C0C0C0C0C0C0C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FF808080FFFFFFC0C0C0808080000000FF00FFFF00FFFF00FFFF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FF808080C0C0C0808080000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FF808080808080000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FF808080000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF |
00FFFF00FFFF00FFFF00FF808080808080808080808080808080808080808080 |
8080808080808080808080808080808080808080808080808080808080808080 |
80808080FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF |
00FF} |
Transparent = True |
end |
object Label1: TLabel |
Left = 32 |
Top = 120 |
Width = 213 |
Height = 26 |
Caption = |
'Klicken Sie auf "Datei '#246'ffnen", um eine Datei'#13#10'zu ver- oder ents' + |
'chl'#252'sseln.' |
Transparent = True |
end |
object MenuPanel: TElPanel |
Left = 360 |
Top = 16 |
Width = 145 |
Height = 305 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alNone |
UseXPThemes = False |
TabOrder = 0 |
DockOrientation = doNoOrient |
object MBev1: TBevel |
Left = 8 |
Top = 80 |
Width = 129 |
Height = 2 |
Shape = bsBottomLine |
end |
object MBev2: TBevel |
Left = 8 |
Top = 120 |
Width = 129 |
Height = 2 |
Shape = bsBottomLine |
end |
object MBev3: TBevel |
Left = 8 |
Top = 192 |
Width = 129 |
Height = 2 |
Shape = bsBottomLine |
end |
object OpenBtn: TElPanel |
Left = 8 |
Top = 16 |
Width = 129 |
Height = 25 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alNone |
UseXPThemes = False |
Enabled = False |
TabOrder = 0 |
Caption = 'Datei '#246'ffnen' |
OnMouseDown = BtnMouseDown |
OnMouseUp = BtnMouseUp |
OnMouseEnter = MouseEnter |
OnMouseLeave = MouseLeave |
DockOrientation = doNoOrient |
end |
object CloseBtn: TElPanel |
Left = 8 |
Top = 48 |
Width = 129 |
Height = 25 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alNone |
UseXPThemes = False |
Enabled = False |
TabOrder = 1 |
Caption = 'Datei schlie'#223'en' |
OnMouseDown = BtnMouseDown |
OnMouseUp = BtnMouseUp |
OnMouseEnter = MouseEnter |
OnMouseLeave = MouseLeave |
DockOrientation = doNoOrient |
end |
object EncBtn: TElPanel |
Left = 8 |
Top = 128 |
Width = 129 |
Height = 25 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alNone |
UseXPThemes = False |
Enabled = False |
TabOrder = 2 |
Caption = 'Verschl'#252'sseln' |
OnMouseDown = BtnMouseDown |
OnMouseUp = BtnMouseUp |
OnMouseEnter = MouseEnter |
OnMouseLeave = MouseLeave |
DockOrientation = doNoOrient |
end |
object DecBtn: TElPanel |
Left = 8 |
Top = 160 |
Width = 129 |
Height = 25 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alNone |
UseXPThemes = False |
Enabled = False |
TabOrder = 3 |
Caption = 'Entschl'#252'sseln' |
OnMouseDown = BtnMouseDown |
OnMouseUp = BtnMouseUp |
OnMouseEnter = MouseEnter |
OnMouseLeave = MouseLeave |
DockOrientation = doNoOrient |
end |
object HelpBtn: TElPanel |
Left = 8 |
Top = 232 |
Width = 129 |
Height = 25 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alNone |
UseXPThemes = False |
Enabled = False |
TabOrder = 4 |
Caption = 'Hilfe' |
OnMouseDown = BtnMouseDown |
OnMouseUp = BtnMouseUp |
OnMouseEnter = MouseEnter |
OnMouseLeave = MouseLeave |
DockOrientation = doNoOrient |
end |
object ExitBtn: TElPanel |
Left = 8 |
Top = 264 |
Width = 129 |
Height = 25 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alNone |
UseXPThemes = False |
Enabled = False |
TabOrder = 5 |
Caption = 'Beenden' |
OnMouseDown = BtnMouseDown |
OnMouseUp = BtnMouseUp |
OnMouseEnter = MouseEnter |
OnMouseLeave = MouseLeave |
DockOrientation = doNoOrient |
end |
object InfoBtn: TElPanel |
Left = 8 |
Top = 88 |
Width = 129 |
Height = 25 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alNone |
UseXPThemes = False |
Enabled = False |
TabOrder = 6 |
Caption = 'Dateiinformationen' |
OnMouseDown = BtnMouseDown |
OnMouseUp = BtnMouseUp |
OnMouseEnter = MouseEnter |
OnMouseLeave = MouseLeave |
DockOrientation = doNoOrient |
end |
object OptionBtn: TElPanel |
Left = 8 |
Top = 200 |
Width = 129 |
Height = 25 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alNone |
UseXPThemes = False |
Enabled = False |
TabOrder = 7 |
Caption = 'Einstellungen' |
OnMouseDown = BtnMouseDown |
OnMouseUp = BtnMouseUp |
OnMouseEnter = MouseEnter |
OnMouseLeave = MouseLeave |
DockOrientation = doNoOrient |
end |
end |
object VBox: TElPanel |
Left = 14 |
Top = 176 |
Width = 331 |
Height = 113 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alNone |
UseXPThemes = False |
TabOrder = 1 |
Visible = False |
DockOrientation = doNoOrient |
object VLab1: TElLabel |
Left = 8 |
Top = 12 |
Width = 41 |
Height = 13 |
Caption = 'Meldung' |
ShadowColor = clBlack |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clBlack |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
ParentFont = False |
end |
object VLab2: TElHTMLLabel |
Left = 16 |
Top = 71 |
Width = 270 |
Height = 26 |
Cursor = crDefault |
Caption = |
'Anmerkung: Es wird zwischen Gro'#223'- und Kleinschreibung<br>untersc' + |
'hieden!' |
IsHTML = True |
WordWrap = False |
LinkColor = clRed |
LinkStyle = [fsUnderline] |
OnLinkClick = CLab1LinkClick |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clMaroon |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
ParentFont = False |
end |
object PwdEdit: TElEdit |
Left = 16 |
Top = 36 |
Width = 265 |
Height = 21 |
Cursor = crIBeam |
BorderSides = [ebsLeft, ebsRight, ebsTop, ebsBottom] |
PasswordChar = '*' |
RightMargin = 1 |
TopMargin = 0 |
BorderStyle = bsSingle |
LineBorderActiveColor = clBlack |
LineBorderInactiveColor = clBlack |
MaxUndoLevel = 0 |
Ctl3D = True |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clWindowText |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
ParentCtl3D = False |
ParentFont = False |
TabOrder = 0 |
end |
end |
object TrackBar1: TTrackBar |
Left = 128 |
Top = 96 |
Width = 57 |
Height = 45 |
Max = 239 |
Min = -239 |
Orientation = trHorizontal |
Frequency = 1 |
Position = 0 |
SelEnd = 0 |
SelStart = 0 |
TabOrder = 2 |
TickMarks = tmBottomRight |
TickStyle = tsAuto |
Visible = False |
OnChange = TrackBar3Change |
end |
object TrackBar2: TTrackBar |
Left = 192 |
Top = 96 |
Width = 57 |
Height = 45 |
Max = 240 |
Orientation = trHorizontal |
Frequency = 1 |
Position = 0 |
SelEnd = 0 |
SelStart = 0 |
TabOrder = 3 |
TickMarks = tmBottomRight |
TickStyle = tsAuto |
Visible = False |
OnChange = TrackBar3Change |
end |
object TrackBar3: TTrackBar |
Left = 256 |
Top = 96 |
Width = 57 |
Height = 45 |
Max = 240 |
Orientation = trHorizontal |
Frequency = 1 |
Position = 0 |
SelEnd = 0 |
SelStart = 0 |
TabOrder = 4 |
TickMarks = tmBottomRight |
TickStyle = tsAuto |
Visible = False |
OnChange = TrackBar3Change |
end |
object Button1: TButton |
Left = 200 |
Top = 56 |
Width = 75 |
Height = 25 |
Caption = 'Button1' |
TabOrder = 5 |
Visible = False |
OnClick = Button1Click |
end |
end |
object Capt: TElPanel |
Left = 0 |
Top = 0 |
Width = 519 |
Height = 29 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alTop |
UseXPThemes = False |
TabOrder = 1 |
OnMouseDown = CaptMouseDown |
DockOrientation = doNoOrient |
object CaptLabel: TElLabel |
Left = 8 |
Top = 7 |
Width = 97 |
Height = 16 |
Caption = '(De)Coder 4.0' |
ShadowColor = clBlack |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clWhite |
Font.Height = -13 |
Font.Name = 'MS Sans Serif' |
Font.Style = [fsBold] |
ParentFont = False |
OnMouseDown = CaptMouseDown |
end |
object ExBtn: TElPanel |
Tag = 1 |
Left = 490 |
Top = 0 |
Width = 29 |
Height = 29 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alNone |
UseXPThemes = False |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clWhite |
Font.Height = -13 |
Font.Name = 'MS Sans Serif' |
Font.Style = [fsBold] |
ParentFont = False |
TabOrder = 0 |
Caption = 'X' |
OnMouseDown = BtnMouseDown |
OnMouseUp = BtnMouseUp |
OnMouseEnter = ExBtnMouseEnter |
OnMouseLeave = ExBtnMouseLeave |
DockOrientation = doNoOrient |
end |
end |
object BlinkTimer: TTimer |
Enabled = False |
Interval = 175 |
OnTimer = BlinkTimerTimer |
Left = 320 |
Top = 72 |
end |
object WaitTmr1: TTimer |
Enabled = False |
Interval = 100 |
OnTimer = WaitTmr1Timer |
Left = 288 |
Top = 72 |
end |
object OpenDlg: TOpenDialog |
Filter = 'Alle Dateien (*.*)|*.*|Verschl'#252'sselte Dateien (*.dc4)|*.dc4' |
Options = [ofShowHelp, ofPathMustExist, ofFileMustExist, ofEnableSizing] |
Left = 256 |
Top = 40 |
end |
object CipherManager1: TCipherManager |
Mode = cmCTS |
HashManager = HashManager1 |
Left = 288 |
Top = 40 |
Cipher = 'TCipher_Blowfish' |
end |
object HashManager1: THashManager |
Left = 320 |
Top = 40 |
Hash = 'THash_RipeMD256' |
end |
end |
/trunk/History/Decoder40_DEC3AlphaSource/Main.pas |
---|
0,0 → 1,992 |
unit Main; |
interface |
uses |
Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, |
HCMngr, ExtCtrls, ImgList, ElImgLst, ElBtnCtl, ElPopBtn, |
ElXPThemedControl, ElEdits, ElHTMLLbl, StdCtrls, ElCLabel, ElLabel, |
ElPanel, Windows, ShellAPI, ElHTMLView, Registry, ShlObj, IniFiles, |
MSI_STORAGE, HSLUnit, ComCtrls; |
{ |
$I VER.INC |
} |
type |
TSystemDirectory = (SD_NO, |
SD_DESKTOP, |
SD_IE, |
SD_SMPROGRAMS, |
SD_SETTINGS, |
SD_PRINTER, |
SD_PERSONAL, |
SD_FAVORITES, |
SD_AUTOSTART, |
SD_RECENT, |
SD_SENDTO, |
SD_PAPERBASKED, |
SD_STARTMENU, |
SD_MUSIC, |
SD_VIDEOS, |
SD_COMPUTER, |
SD_NETWORK, |
SD_FONTS, |
SD_SHELLNEW, |
SD_AUDESKTOP, |
SD_APPDATA, |
SD_PRINTHOOD, |
SD_TEMPINETFILES, |
SD_COOKIES, |
SD_COURSE, |
SD_AUAPPDATA, |
SD_WINDOWS, |
SD_SYSTEM, |
SD_PROGRAMS, |
SD_PICTURES, |
SD_AUFILES); |
TMainForm = class(TForm) |
BgPanel: TElPanel; |
ULab1: TElLabel; |
CLab1: TElHTMLLabel; |
MenuPanel: TElPanel; |
MBev1: TBevel; |
MBev2: TBevel; |
DLab1: TElLabel; |
DImg: TImage; |
DLab3: TElLabel; |
DLab3b: TElLabel; |
DLab2: TElLabel; |
DLab1b: TElLabel; |
DLab2b: TElLabel; |
BlinkTimer: TTimer; |
WaitTmr1: TTimer; |
OpenDlg: TOpenDialog; |
DLab4: TElHTMLLabel; |
DImg2: TImage; |
DImg3: TImage; |
CipherManager1: TCipherManager; |
HashManager1: THashManager; |
Capt: TElPanel; |
CaptLabel: TElLabel; |
ExBtn: TElPanel; |
OpenBtn: TElPanel; |
CloseBtn: TElPanel; |
EncBtn: TElPanel; |
DecBtn: TElPanel; |
MBev3: TBevel; |
HelpBtn: TElPanel; |
ExitBtn: TElPanel; |
VBox: TElPanel; |
VLab1: TElLabel; |
PwdEdit: TElEdit; |
VLab2: TElHTMLLabel; |
InfoBtn: TElPanel; |
OptionBtn: TElPanel; |
TrackBar1: TTrackBar; |
TrackBar2: TTrackBar; |
TrackBar3: TTrackBar; |
Button1: TButton; |
Label1: TLabel; |
procedure CLab1LinkClick(Sender: TObject; HRef: TElFString); |
procedure BlinkTimerTimer(Sender: TObject); |
procedure WaitTmr1Timer(Sender: TObject); |
procedure FormShow(Sender: TObject); |
procedure CaptMouseDown(Sender: TObject; Button: TMouseButton; |
Shift: TShiftState; X, Y: Integer); |
procedure ExBtnMouseLeave(Sender: TObject); |
procedure BtnMouseDown(Sender: TObject; Button: TMouseButton; |
Shift: TShiftState; X, Y: Integer); |
procedure BtnMouseUp(Sender: TObject; Button: TMouseButton; |
Shift: TShiftState; X, Y: Integer); |
procedure MouseLeave(Sender: TObject); |
procedure TrackBar3Change(Sender: TObject); |
procedure Button1Click(Sender: TObject); |
procedure MouseEnter(Sender: TObject); |
procedure ExBtnMouseEnter(Sender: TObject); |
public |
BlinkVar: integer; |
procedure dc4_CloseFile; |
procedure dc4_OpenFile(filename: string); |
procedure dc4_Showmessage(msg: string); |
procedure ChangeButtonState(Mode: boolean; Obj: TObject); |
procedure ClickHandler(Sender: TObject); |
procedure DrawDesign; |
procedure Standardfarben; |
procedure DesignInit; |
function GetFolder(FolderID: TSystemDirectory): string; |
end; |
var |
MainForm: TMainForm; |
MBDown: boolean; |
Design_Button_Active1, |
Design_Button_Active2, |
Design_Button_Leuchtend1, |
Design_Button_Leuchtend2, |
Design_Button_Inactive1, |
Design_Button_Inactive2, |
Design_Form1, |
Design_Form2, |
Design_Caption1, |
Design_Caption2, |
Design_Caption_Active1, |
Design_Caption_Active2, |
Design_Menu1, |
Design_Menu2: TColor; |
Design_Button_Active1_lock, |
Design_Button_Active2_lock, |
Design_Button_Leuchtend1_lock, |
Design_Button_Leuchtend2_lock, |
Design_Button_Inactive1_lock, |
Design_Button_Inactive2_lock, |
Design_Form1_lock, |
Design_Form2_lock, |
Design_Caption1_lock, |
Design_Caption2_lock, |
Design_Caption_Active1_lock, |
Design_Caption_Active2_lock, |
Design_Menu1_lock, |
Design_Menu2_lock: boolean; |
implementation |
uses Options, RepeatPassword, Message, FileInfo; |
var |
HSLRange: integer = 240; |
{$R *.DFM} |
function GetHWID(): string; |
var |
Storage: TStorage; |
begin |
Storage:=TStorage.Create; |
Storage.GetInfo; |
result := Storage.Devices[0].Model+'/'+Storage.Devices[0].Revision+'/'+Storage.Devices[0].SerialNumber; |
Storage.Free; |
end; |
procedure TMainForm.ChangeButtonState(Mode: boolean; Obj: TObject); |
begin |
TElPanel(Obj).Enabled := Mode; |
if TElPanel(Obj).Enabled then |
begin |
TElPanel(Obj).GradientEndColor := Design_Button_Active1; |
TElPanel(Obj).GradientStartColor := Design_Button_Active2; |
TElPanel(Obj).Tag := 1; |
end |
else |
begin |
TElPanel(Obj).GradientEndColor := Design_Button_Inactive1; |
TElPanel(Obj).GradientStartColor := Design_Button_Inactive2; |
TElPanel(Obj).Tag := 0; |
end; |
end; |
// Entnommen von FileCtrl |
procedure CutFirstDirectory(var S: TFileName); |
var |
Root: Boolean; |
P: Integer; |
begin |
if S = '\' then |
S := '' |
else |
begin |
if S[1] = '\' then |
begin |
Root := True; |
Delete(S, 1, 1); |
end |
else |
Root := False; |
if S[1] = '.' then |
Delete(S, 1, 4); |
P := AnsiPos('\',S); |
if P <> 0 then |
begin |
Delete(S, 1, P); |
S := '...\' + S; |
end |
else |
S := ''; |
if Root then |
S := '\' + S; |
end; |
end; |
// Entnommen von FileCtrl |
function MinimizeName(const Filename: TFileName; Canvas: TCanvas; |
MaxLen: Integer): TFileName; |
var |
Drive: TFileName; |
Dir: TFileName; |
Name: TFileName; |
begin |
Result := FileName; |
Dir := ExtractFilePath(Result); |
Name := ExtractFileName(Result); |
if (Length(Dir) >= 2) and (Dir[2] = ':') then |
begin |
Drive := Copy(Dir, 1, 2); |
Delete(Dir, 1, 2); |
end |
else |
Drive := ''; |
while ((Dir <> '') or (Drive <> '')) and (Canvas.TextWidth(Result) > MaxLen) do |
begin |
if Dir = '\...\' then |
begin |
Drive := ''; |
Dir := '...\'; |
end |
else if Dir = '' then |
Drive := '' |
else |
CutFirstDirectory(Dir); |
Result := Drive + Dir + Name; |
end; |
end; |
procedure TMainForm.dc4_Showmessage(msg: string); |
begin |
MessageForm.Message.caption := msg; |
MessageForm.showmodal; |
end; |
function TMainForm.GetFolder(FolderID: TSystemDirectory): string; |
var |
pidl: PItemIDList; |
Path: array[0..MAX_PATH] of Char; |
i: Integer; |
begin |
i := 0; |
case FolderID of |
SD_NO : Exit; |
SD_DESKTOP : i := $00; |
SD_IE : i := $01; |
SD_SMPROGRAMS : i := $02; |
SD_SETTINGS : i := $03; |
SD_PRINTER : i := $04; |
SD_PERSONAL : i := $05; |
SD_FAVORITES : i := $06; |
SD_AUTOSTART : i := $07; |
SD_RECENT : i := $08; |
SD_SENDTO : i := $09; |
SD_PAPERBASKED : i := $0A; |
SD_STARTMENU : i := $0B; |
SD_MUSIC : i := $0C; |
SD_VIDEOS : i := $0D; |
SD_COMPUTER : i := $11; |
SD_NETWORK : i := $12; |
SD_FONTS : i := $14; |
SD_SHELLNEW : i := $15; |
SD_AUDESKTOP : i := $19; |
SD_APPDATA : i := $1A; |
SD_PRINTHOOD : i := $1B; |
SD_TEMPINETFILES : i := $20; |
SD_COOKIES : i := $21; |
SD_COURSE : i := $22; |
SD_AUAPPDATA : i := $23; |
SD_WINDOWS : i := $24; |
SD_SYSTEM : i := $25; |
SD_PROGRAMS : i := $26; |
SD_PICTURES : i := $27; |
SD_AUFILES : i := $28; |
end; |
if SUCCEEDED(SHGetSpecialFolderLocation(0, i, pidl)) then |
begin |
SHGetPathFromIDList(pidl, Path); |
Result := Path; |
end; |
end; |
procedure TMainForm.dc4_CloseFile; |
begin |
{* Objekteigenschaften ändern *} |
DLab1.caption := 'Keine Datei geöffnet.'; |
VBox.visible := false; |
DLab3.visible := false; |
DLab3b.visible := false; |
DLab2.visible := false; |
DLab1b.visible := false; |
DLab2b.visible := false; |
DLab4.visible := false; |
ChangeButtonState(false, InfoBtn); |
ChangeButtonState(false, CloseBtn); |
ChangeButtonState(false, EncBtn); |
ChangeButtonState(false, DecBtn); |
DImg.Visible := false; |
DImg2.Visible := false; |
DImg3.Visible := true; |
RepeatForm.B2CipherCombo.ItemIndex := 1; |
RepeatForm.B2CipherComboChange(nil); |
RepeatForm.B2ModeCombo.ItemIndex := 0; |
RepeatForm.B2ModeComboChange(nil); |
Label1.Visible := true; |
end; |
procedure TMainForm.dc4_OpenFile(filename: string); |
var |
Reg: TRegistry; |
temp: string; |
INIDatei: TIniFile; |
begin |
{* Dateityp herausfinden *} |
if ExtractFileExt(filename) <> '' then |
begin |
Reg := TRegistry.Create; |
Reg.RootKey := HKEY_CLASSES_ROOT; |
if Reg.OpenKey(ExtractFileExt(filename), false) then |
begin |
temp := Reg.ReadString(''); |
Reg.CloseKey(); |
if temp <> '' then |
begin |
Reg.OpenKey(temp, false); |
temp := Reg.ReadString(''); |
Reg.CloseKey(); |
if temp <> '' then |
DLab2b.caption := temp |
else |
DLab2b.caption := 'Unbekannt'; {* Weiterleitung hat keinen Namen für den Dateityp *} |
end |
else |
DLab2b.caption := 'Unbekannt'; {* Konnte keine Weiterleitung in der Registry finden *} |
end |
else |
DLab2b.caption := 'Unbekannt'; {* Keinen Eintrag der Erweiterung in der Registry gefunden *} |
Reg.free; |
end |
else |
DLab2b.caption := 'Unbekannt'; {* Keine Erweiterung *} |
{* Objekteigenschaften ändern *} |
DLab1.caption := 'Geöffnete Datei:'; |
// DLab1b.caption := copy(ExtractFileName(filename), 0, length(ExtractFileName(filename))-length(ExtractFileExt(filename))); |
DLab1b.caption := ExtractFileName(filename); |
DLab1b.visible := true; |
DLab2b.visible := true; |
VBox.visible := true; |
PwdEdit.text := ''; |
DLab3.visible := true; |
DLab3b.visible := true; |
DLab3b.caption := MinimizeName(ExtractFilePath(filename), MainForm.Canvas, DLab3b.Width); |
DLab2.visible := true; |
ChangeButtonState(true, CloseBtn); |
ChangeButtonState((ExtractFileExt(filename) <> '.dc4'), EncBtn); |
ChangeButtonState((ExtractFileExt(filename) = '.dc4'), DecBtn); |
ChangeButtonState((ExtractFileExt(filename) = '.dc4'), InfoBtn); |
DImg.visible := (ExtractFileExt(filename) <> '.dc4'); |
DImg2.visible := (ExtractFileExt(filename) = '.dc4'); |
DImg3.Visible := false; |
DLab4.visible := true; |
VLab1.Caption := 'Passwort zum '; |
if ExtractFileExt(filename) = '.dc4' then |
begin |
DLab4.caption := 'Die Datei wurde bereits verschlüsselt.'; |
VLab1.Caption := VLab1.Caption + 'Entschlüsseln:'; |
end |
else |
begin |
DLab4.caption := 'Diese Datei wurde noch nicht verschlüsselt.'; |
VLab1.Caption := VLab1.Caption + 'Verschlüsseln:'; |
end; |
PwdEdit.SetFocus; // ist das gut? |
{* Header-Daten auslesen *} |
INIDatei := TIniFile.Create(filename); |
InfoForm.InfoLbl1b.Caption := INIDatei.ReadString('Header', 'Software', '?'); |
InfoForm.InfoLbl2b.Caption := INIDatei.ReadString('Header', 'User', '?'); |
InfoForm.InfoLbl3b.Caption := INIDatei.ReadString('Header', 'OriginalFileName', '?'); |
InfoForm.InfoLbl4b.Caption := INIDatei.ReadString('Header', 'Algotythmus', '?'); |
InfoForm.InfoLbl5b.Caption := INIDatei.ReadString('Header', 'Mode', '?'); |
INIDatei.Free; |
// ToDo: Prüfung der Header einbauen! |
Label1.Visible := false; |
end; |
procedure TMainForm.CLab1LinkClick(Sender: TObject; HRef: TElFString); |
begin |
if href = 'home' then |
shellexecute(handle, 'open', 'http://www.d-m-home.de/', '', '', 1); |
if href = 'email' then |
shellexecute(handle, 'open', 'mailto:info@daniel-marschall.de?subject=(De)Coder 4.0', '', '', 1); |
end; |
procedure TMainForm.BlinkTimerTimer(Sender: TObject); |
begin |
if not MessageForm.visible then |
begin |
inc(BlinkVar); |
if BlinkVar > 6 then |
begin |
BlinkVar := 0; |
BlinkTimer.Enabled := false; |
end; |
{* Lieber mit gleich oder ungleich abprüfen? *} |
if (BlinkVar = 1) or (BlinkVar = 3) or (BlinkVar = 5) then |
begin |
VLab1.Font.Color := clRed; |
// VLab2.Font.Color := clRed; |
end; |
if (BlinkVar = 2) or (BlinkVar = 4) or (BlinkVar = 6) then |
begin |
VLab1.Font.Color := $00000A32; |
// VLab2.Font.Color := clMaroon; |
end; |
end; |
end; |
function GetRegUser(): string; |
var |
Reg: TRegistry; |
temp: string; |
begin |
{* Benutzernamen herausfinden *} |
Reg := TRegistry.Create; |
Reg.RootKey := HKEY_LOCAL_MACHINE; |
if Reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion', false) then |
begin |
temp := Reg.ReadString('RegisteredOwner'); |
Reg.CloseKey(); |
end; |
if temp = '' then |
begin |
if Reg.OpenKey('SOFTWARE\Microsoft\Windows NT\CurrentVersion', false) then |
begin |
temp := Reg.ReadString('RegisteredOwner'); |
Reg.CloseKey(); |
end; |
if temp = '' then |
begin |
result := ''; // Unbekanntes System: Kein Benutzername gefunden! |
end |
else |
begin |
result := temp; // NT-System: Benutzername gefunden! |
end; |
end |
else |
begin |
result := temp; // 9x-System: Benutzername gefunden! |
end; |
end; |
procedure TMainForm.WaitTmr1Timer(Sender: TObject); |
var |
INIDatei: TIniFile; |
Daten: TextFile; |
DateiName, DC4Open: string; |
dstr: TStream; |
FromF: file; |
NumRead, NumWritten: longint; |
Buf: array[1..40000] of byte; |
begin |
WaitTmr1.enabled := false; |
DC4Open := RepeatForm.B4Filename.Caption; |
// VERSCHLÜSSELUNG |
if ExtractFileExt(DC4Open) <> '.dc4' then DateiName := DC4Open + '.dc4' else DateiName := DC4Open; |
AssignFile(daten, DateiName); |
ReWrite(daten); |
CloseFile(daten); |
INIDatei := TIniFile.Create(DateiName); |
INIDatei.WriteString('Header', 'Software', '(De)Coder 4.0'); |
INIDatei.WriteString('Header', 'OriginalFileName', DLab1b.Caption); |
INIDatei.WriteString('Header', 'Hardware-ID', GetHWID()); |
INIDatei.WriteString('Header', 'User', GetRegUser()); |
INIDatei.WriteString('Header', 'Algotythmus', CipherManager1.Algorithm); |
INIDatei.WriteString('Header', 'Mode', '?'); // !!! |
INIDatei.WriteString('Header', 'Compress', '?'); // !!! |
INIDatei.WriteString('Header', 'Hash', HashManager1.Algorithm); |
INIDatei.Free; |
AssignFile(daten, DateiName); |
Append(daten); |
WriteLN(daten, ''); |
// Sektion nicht mit INIFILE schreiben? |
WriteLN(daten, '[Data]'); |
WriteLN(daten, '<hier der Code>'); |
AssignFile(FromF, DC4Open); |
Reset(FromF, 1); |
dstr := TStream.Create; |
repeat |
BlockRead(FromF, Buf, SizeOf(Buf), NumRead); |
dstr.Write(Buf, SizeOf(Buf)); |
until (NumRead = 0); |
closefile(FromF); |
repeat |
dstr.ReadBuffer(Buf, SizeOf(Buf)); |
until dstr.Position >= dstr.Size; |
// CipherManager1.EncodeStream(dstr, dstr, dstr.size); |
dstr.Free; |
CloseFile(daten); |
dc4_Showmessage('Datei wurde erfolgreich verschlüsselt!'); |
end; |
procedure TMainForm.DrawDesign; |
begin |
BgPanel.GradientEndColor := Design_Form1; |
BgPanel.GradientStartColor := Design_Form2; |
Capt.GradientEndColor := Design_Caption1; |
Capt.GradientStartColor := Design_Caption2; |
ExBtn.GradientEndColor := Design_Caption1; |
ExBtn.GradientStartColor := Design_Caption2; |
MenuPanel.GradientEndColor := Design_Menu1; |
MenuPanel.GradientStartColor := Design_Menu2; |
VBox.GradientEndColor := Design_Menu1; |
VBox.GradientStartColor := Design_Menu2; |
if (OpenBtn.Tag = 1) then ChangeButtonState(true, OpenBtn) else ChangeButtonState(false, OpenBtn); |
if (CloseBtn.Tag = 1) then ChangeButtonState(true, CloseBtn) else ChangeButtonState(false, CloseBtn); |
if (OpenBtn.Tag = 1) then ChangeButtonState(true, OpenBtn) else ChangeButtonState(false, OpenBtn); |
if (InfoBtn.Tag = 1) then ChangeButtonState(true, InfoBtn) else ChangeButtonState(false, InfoBtn); |
if (EncBtn.Tag = 1) then ChangeButtonState(true, EncBtn) else ChangeButtonState(false, EncBtn); |
if (DecBtn.Tag = 1) then ChangeButtonState(true, DecBtn) else ChangeButtonState(false, DecBtn); |
if (OptionBtn.Tag = 1) then ChangeButtonState(true, OptionBtn) else ChangeButtonState(false, OptionBtn); |
if (HelpBtn.Tag = 1) then ChangeButtonState(true, HelpBtn) else ChangeButtonState(false, HelpBtn); |
if (ExitBtn.Tag = 1) then ChangeButtonState(true, ExitBtn) else ChangeButtonState(false, ExitBtn); |
end; |
procedure TMainForm.Standardfarben; |
var |
H, S, L: integer; |
begin |
Design_Form1 := clYellow; Design_Form1_lock := false; |
Design_Form2 := $000080FF; Design_Form2_lock := false; |
Design_Button_Active1 := Design_Form1; Design_Button_Active1_lock := false; |
Design_Button_Active2 := Design_Form2; Design_Button_Active2_lock := false; |
RGBtoHSLRange(Design_Button_Active1, H, S, L); Design_Button_Active1_lock := false; |
if (L+30 > HSLRange) then L := HSLRange-30; |
Design_Button_Leuchtend1 := HSLRangeToRGB(H, S, L+30); Design_Button_Leuchtend1_lock := false; |
RGBtoHSLRange(Design_Button_Active2, H, S, L); Design_Button_Active2_lock := false; |
if (L+30 > HSLRange) then L := HSLRange-30; |
Design_Button_Leuchtend2 := HSLRangeToRGB(H, S, L+30); Design_Button_Leuchtend2_lock := false; |
Design_Button_Inactive1 := clWhite; Design_Button_Inactive1_lock := true; |
Design_Button_Inactive2 := clSilver; Design_Button_Inactive2_lock := true; |
Design_Caption1 := clRed; Design_Caption1_lock := false; |
Design_Caption2 := clMaroon; Design_Caption2_lock := false; |
Design_Caption_Active1 := clRed; Design_Caption_Active1_lock := false; |
Design_Caption_Active2 := clRed; Design_Caption_Active2_lock := false; |
Design_Menu1 := clWhite; Design_Menu1_lock := true; |
Design_Menu2 := $00D8E9EC; Design_Menu2_lock := true; |
end; |
procedure TMainForm.FormShow(Sender: TObject); |
var |
//INIDatei: TIniFile; |
Hgt: integer; |
begin |
// Design Init |
Standardfarben(); |
DrawDesign(); |
OpenDlg.InitialDir := GetFolder(SD_PERSONAL); |
// Lese INI-Datei... |
{ INIDatei := TIniFile.Create(DateiName); |
INIDatei.ReadString('Properties', 'User', '?'); |
INIDatei.Free; } |
ChangeButtonState(true, OpenBtn); |
ChangeButtonState(false, CloseBtn); |
ChangeButtonState(true, OptionBtn); |
ChangeButtonState(false, EncBtn); |
ChangeButtonState(false, DecBtn); |
ChangeButtonState(false, HelpBtn); |
ChangeButtonState(true, ExitBtn); |
ChangeButtonState(false, InfoBtn); |
// Titelleiste á la Windows |
//Hgt := GetSystemMetrics(SM_CYCAPTION); |
Hgt := 25; |
Capt.Height := Hgt; |
ExBtn.Height := Hgt; |
ExBtn.Width := Hgt; |
ExBtn.Left := Capt.Width - ExBtn.Width; |
CaptLabel.Top := Capt.Height div 2 - CaptLabel.Height div 2; |
end; |
procedure TMainForm.CaptMouseDown(Sender: TObject; |
Button: TMouseButton; Shift: TShiftState; X, Y: Integer); |
begin |
ReleaseCapture; |
perform(WM_SysCommand, $F012, 0); |
end; |
procedure TMainForm.ExBtnMouseLeave(Sender: TObject); |
begin |
TElPanel(Sender).BevelOuter := bvRaised; |
MBDown := false; |
if (TElPanel(Sender).Tag = 1) then |
begin |
TElPanel(Sender).GradientEndColor := Design_Caption1; |
TElPanel(Sender).GradientStartColor := Design_Caption2; |
end; |
end; |
procedure TMainForm.BtnMouseDown(Sender: TObject; |
Button: TMouseButton; Shift: TShiftState; X, Y: Integer); |
begin |
if Button = mbLeft then |
begin |
TElPanel(Sender).BevelOuter := bvLowered; |
MBDown := true; |
end; |
end; |
procedure TMainForm.BtnMouseUp(Sender: TObject; Button: TMouseButton; |
Shift: TShiftState; X, Y: Integer); |
begin |
if (Button = mbLeft) and MBDown then |
begin |
TElPanel(Sender).BevelOuter := bvRaised; |
MBDown := false; |
// Standardfarbe |
TElPanel(Sender).GradientEndColor := Design_Button_Active1; |
TElPanel(Sender).GradientStartColor := Design_Button_Active2; |
// Ausfürhung |
ClickHandler(Sender); |
end; |
end; |
procedure TMainForm.ClickHandler(Sender: TObject); |
begin; |
if (Sender = OpenBtn) then |
begin |
if OpenDlg.Execute then |
begin |
if CloseBtn.Enabled then dc4_CloseFile; |
dc4_OpenFile(OpenDlg.FileName); |
end; |
end |
else if (Sender = DecBtn) then |
begin |
if PwdEdit.Text = '' then |
begin |
MessageForm.Message.caption := 'Sie müssen ein Passwort zum Verschlüsseln /'+#13#10+'Entschlüsseln eingeben!'; |
PwdEdit.SetFocus; |
BlinkVar := 0; |
BlinkTimer.Enabled := true; |
MessageForm.showmodal; |
end |
else |
showmessage('Entschlüsselung...'); |
end |
else if (Sender = ExitBtn) or (Sender = ExBtn) then |
begin |
if CloseBtn.Enabled then |
dc4_CloseFile; |
close; |
end |
else if (Sender = HelpBtn) then |
begin |
// Nichts da |
end |
else if (Sender = OptionBtn) then |
begin |
OptionsForm.showmodal; |
end |
else if (Sender = EncBtn) then |
begin |
if PwdEdit.Text = '' then |
begin |
dc4_Showmessage('Sie müssen ein Passwort zum Verschlüsseln /'+#13#10+'Entschlüsseln eingeben!'); |
PwdEdit.SetFocus; |
BlinkVar := 0; |
BlinkTimer.Enabled := true; |
end |
else |
RepeatForm.showmodal; |
end |
else if (Sender = InfoBtn) then |
begin |
InfoForm.showmodal; |
end |
else if (Sender = CloseBtn) then |
begin |
dc4_CloseFile; |
end; |
end; |
procedure TMainForm.MouseLeave(Sender: TObject); |
begin |
TElPanel(Sender).BevelOuter := bvRaised; |
MBDown := false; |
if (TElPanel(Sender).Tag = 1) then |
begin |
TElPanel(Sender).GradientEndColor := Design_Button_Active1; |
TElPanel(Sender).GradientStartColor := Design_Button_Active2; |
end; |
end; |
procedure TMainForm.DesignInit; |
var |
H, S, L: integer; |
begin |
Standardfarben; |
RGBtoHSLRange(Design_Form1, H, S, L); |
TrackBar1.Max := ((HSLRange-1) - H); |
TrackBar1.Min := -H; |
TrackBar1.Position := TrackBar1.Min + H; |
TrackBar2.Position := S; |
TrackBar3.Position := L; |
end; |
procedure TMainForm.TrackBar3Change(Sender: TObject); |
var |
H, S, L, W1, W2, W3: integer; |
tmp: real; |
begin |
Standardfarben; |
W1 := TrackBar1.Position; |
W2 := TrackBar2.Position; |
W3 := TrackBar3.Position; |
if not Design_Form1_lock then begin |
RGBtoHSLRange(Design_Form1, H, S, L); |
H := H + W1; |
while (H > HSLRange-1) do H := H - (HSLRange-1); |
while (H < 0) do H := H + (HSLRange-1); |
S := W2; |
if (S > HSLRange) then S := HSLRange; |
if (S < 0) then S := 0; |
L := W3; |
if (L > HSLRange) then L := HSLRange; |
if (L < 0) then L := 0; |
Design_Form1 := HSLRangeToRGB(H, S, L); |
end; |
if not Design_Form2_lock then begin |
RGBtoHSLRange(Design_Form2, H, S, L); |
H := H + W1; |
while (H > HSLRange-1) do H := H - (HSLRange-1); |
while (H < 0) do H := H + (HSLRange-1); |
S := W2; |
if (S > HSLRange) then S := HSLRange; |
if (S < 0) then S := 0; |
L := W3; |
if (L > HSLRange) then L := HSLRange; |
if (L < 0) then L := 0; |
Design_Form2 := HSLRangeToRGB(H, S, L); |
end; |
if not Design_Button_Active1_lock then begin |
RGBtoHSLRange(Design_Button_Active1, H, S, L); |
H := H + W1; |
while (H > HSLRange-1) do H := H - (HSLRange-1); |
while (H < 0) do H := H + (HSLRange-1); |
S := W2; |
if (S > HSLRange) then S := HSLRange; |
if (S < 0) then S := 0; |
L := W3; |
if (L > HSLRange) then L := HSLRange; |
if (L < 0) then L := 0; |
Design_Button_Active1 := HSLRangeToRGB(H, S, L); |
end; |
if not Design_Button_Active2_lock then begin |
RGBtoHSLRange(Design_Button_Active2, H, S, L); |
H := H + W1; |
while (H > HSLRange-1) do H := H - (HSLRange-1); |
while (H < 0) do H := H + (HSLRange-1); |
S := W2; |
if (S > HSLRange) then S := HSLRange; |
if (S < 0) then S := 0; |
L := W3; |
if (L > HSLRange) then L := HSLRange; |
if (L < 0) then L := 0; |
Design_Button_Active2 := HSLRangeToRGB(H, S, L); |
end; |
if not Design_Button_Inactive1_lock then begin |
RGBtoHSLRange(Design_Button_Inactive1, H, S, L); |
H := H + W1; |
while (H > HSLRange-1) do H := H - (HSLRange-1); |
while (H < 0) do H := H + (HSLRange-1); |
S := W2; |
if (S > HSLRange) then S := HSLRange; |
if (S < 0) then S := 0; |
L := W3; |
if (L > HSLRange) then L := HSLRange; |
if (L < 0) then L := 0; |
Design_Button_Inactive1 := HSLRangeToRGB(H, S, L); |
end; |
if not Design_Button_Inactive2_lock then begin |
RGBtoHSLRange(Design_Button_Inactive2, H, S, L); |
H := H + W1; |
while (H > HSLRange-1) do H := H - (HSLRange-1); |
while (H < 0) do H := H + (HSLRange-1); |
S := W2; |
if (S > HSLRange) then S := HSLRange; |
if (S < 0) then S := 0; |
L := W3; |
if (L > HSLRange) then L := HSLRange; |
if (L < 0) then L := 0; |
Design_Button_Inactive2 := HSLRangeToRGB(H, S, L); |
end; |
if not Design_Button_Leuchtend1_lock then begin |
RGBtoHSLRange(Design_Button_Leuchtend1, H, S, L); |
H := H + W1; |
while (H > HSLRange-1) do H := H - (HSLRange-1); |
while (H < 0) do H := H + (HSLRange-1); |
S := W2; |
if (S > HSLRange) then S := HSLRange; |
if (S < 0) then S := 0; |
L := W3; |
if (L > HSLRange) then L := HSLRange; |
if (L < 0) then L := 0; |
Design_Button_Leuchtend1 := HSLRangeToRGB(H, S, L); |
end; |
if not Design_Button_Leuchtend2_lock then begin |
RGBtoHSLRange(Design_Button_Leuchtend2, H, S, L); |
H := H + W1; |
while (H > HSLRange-1) do H := H - (HSLRange-1); |
while (H < 0) do H := H + (HSLRange-1); |
S := W2; |
if (S > HSLRange) then S := HSLRange; |
if (S < 0) then S := 0; |
L := W3; |
if (L > HSLRange) then L := HSLRange; |
if (L < 0) then L := 0; |
Design_Button_Leuchtend2 := HSLRangeToRGB(H, S, L); |
end; |
// Neu |
if not Design_Caption1_lock then begin |
RGBtoHSLRange(Design_Caption1, H, S, L); |
H := H + W1; |
while (H > HSLRange-1) do H := H - (HSLRange-1); |
while (H < 0) do H := H + (HSLRange-1); |
S := W2; |
if (S > HSLRange) then S := HSLRange; |
if (S < 0) then S := 0; |
if TrackBar3.Position = 0 then |
tmp := 0 |
else |
tmp := TrackBar3.Max / TrackBar3.Position; |
L := round((tmp/100)*L); |
if (L > HSLRange) then L := HSLRange; |
if (L < 0) then L := 0; |
Design_Caption1 := HSLRangeToRGB(H, S, L); |
end; |
// Neu |
if not Design_Caption2_lock then begin |
RGBtoHSLRange(Design_Caption2, H, S, L); |
H := H + W1; |
while (H > HSLRange-1) do H := H - (HSLRange-1); |
while (H < 0) do H := H + (HSLRange-1); |
S := S + W2; |
if (S > HSLRange) then S := HSLRange; |
if (S < 0) then S := 0; |
if TrackBar3.Position = 0 then |
tmp := 0 |
else |
tmp := TrackBar3.Max / TrackBar3.Position; |
L := round((tmp/100)*L); |
if (L > HSLRange) then L := HSLRange; |
if (L < 0) then L := 0; |
Design_Caption2 := HSLRangeToRGB(H, S, L); |
end; |
if not Design_Caption_Active1_lock then begin |
RGBtoHSLRange(Design_Caption_Active1, H, S, L); |
H := H + W1; |
while (H > HSLRange-1) do H := H - (HSLRange-1); |
while (H < 0) do H := H + (HSLRange-1); |
S := W2; |
if (S > HSLRange) then S := HSLRange; |
if (S < 0) then S := 0; |
L := W3; |
if (L > HSLRange) then L := HSLRange; |
if (L < 0) then L := 0; |
Design_Caption_Active1 := HSLRangeToRGB(H, S, L); |
end; |
if not Design_Caption_Active2_lock then begin |
RGBtoHSLRange(Design_Caption_Active2, H, S, L); |
H := H + W1; |
while (H > HSLRange-1) do H := H - (HSLRange-1); |
while (H < 0) do H := H + (HSLRange-1); |
S := W2; |
if (S > HSLRange) then S := HSLRange; |
if (S < 0) then S := 0; |
L := W3; |
if (L > HSLRange) then L := HSLRange; |
if (L < 0) then L := 0; |
Design_Caption_Active2 := HSLRangeToRGB(H, S, L); |
end; |
if not Design_Menu1_lock then begin |
RGBtoHSLRange(Design_Menu1, H, S, L); |
H := H + W1; |
while (H > HSLRange-1) do H := H - (HSLRange-1); |
while (H < 0) do H := H + (HSLRange-1); |
S := W2; |
if (S > HSLRange) then S := HSLRange; |
if (S < 0) then S := 0; |
L := W3; |
if (L > HSLRange) then L := HSLRange; |
if (L < 0) then L := 0; |
Design_Menu1 := HSLRangeToRGB(H, S, L); |
end; |
if not Design_Menu2_lock then begin |
RGBtoHSLRange(Design_Menu2, H, S, L); |
H := H + W1; |
while (H > HSLRange-1) do H := H - (HSLRange-1); |
while (H < 0) do H := H + (HSLRange-1); |
S := W2; |
if (S > HSLRange) then S := HSLRange; |
if (S < 0) then S := 0; |
L := W3; |
if (L > HSLRange) then L := HSLRange; |
if (L < 0) then L := 0; |
Design_Menu2 := HSLRangeToRGB(H, S, L); |
end; |
DrawDesign; |
end; |
procedure TMainForm.Button1Click(Sender: TObject); |
begin |
DesignInit; |
end; |
procedure TMainForm.MouseEnter(Sender: TObject); |
begin |
// Aufleuchten |
if (TElPanel(Sender).Tag = 1) then |
begin |
TElPanel(Sender).GradientEndColor := Design_Button_Leuchtend1; |
TElPanel(Sender).GradientStartColor := Design_Button_Leuchtend2; |
end; |
end; |
procedure TMainForm.ExBtnMouseEnter(Sender: TObject); |
begin |
// Aufleuchten |
if (TElPanel(Sender).Tag = 1) then |
begin |
TElPanel(Sender).GradientEndColor := Design_Caption_Active1; |
TElPanel(Sender).GradientStartColor := Design_Caption_Active2; |
end; |
end; |
end. |
/trunk/History/Decoder40_DEC3AlphaSource/Message.ddp |
---|
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 |
/trunk/History/Decoder40_DEC3AlphaSource/Message.dfm |
---|
0,0 → 1,224 |
object MessageForm: TMessageForm |
Left = 224 |
Top = 153 |
BorderIcons = [biSystemMenu] |
BorderStyle = bsNone |
Caption = 'Information' |
ClientHeight = 150 |
ClientWidth = 297 |
Color = clBtnFace |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clWindowText |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
OldCreateOrder = False |
Position = poMainFormCenter |
OnShow = FormShow |
PixelsPerInch = 96 |
TextHeight = 13 |
object Capt: TElPanel |
Left = 0 |
Top = 0 |
Width = 297 |
Height = 29 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alTop |
UseXPThemes = False |
TabOrder = 0 |
OnMouseDown = CaptMouseDown |
DockOrientation = doNoOrient |
object CaptLabel: TElLabel |
Left = 8 |
Top = 7 |
Width = 77 |
Height = 16 |
Caption = 'Information' |
ShadowColor = clBlack |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clWhite |
Font.Height = -13 |
Font.Name = 'MS Sans Serif' |
Font.Style = [fsBold] |
ParentFont = False |
OnMouseDown = CaptMouseDown |
end |
object ExBtn: TElPanel |
Tag = 1 |
Left = 268 |
Top = 0 |
Width = 29 |
Height = 29 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alNone |
UseXPThemes = False |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clWhite |
Font.Height = -13 |
Font.Name = 'MS Sans Serif' |
Font.Style = [fsBold] |
ParentFont = False |
TabOrder = 0 |
Caption = 'X' |
OnMouseDown = MouseDown |
OnMouseUp = MouseUp |
OnMouseEnter = ExBtnMouseEnter |
OnMouseLeave = ExBtnMouseLeave |
DockOrientation = doNoOrient |
end |
end |
object MainPanel: TElPanel |
Left = 0 |
Top = 29 |
Width = 297 |
Height = 121 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alClient |
UseXPThemes = False |
TabOrder = 1 |
DockOrientation = doNoOrient |
object Message: TElLabel |
Left = 56 |
Top = 16 |
Width = 41 |
Height = 13 |
Caption = 'Meldung' |
end |
object MsgImg: TImage |
Left = 16 |
Top = 16 |
Width = 33 |
Height = 33 |
Picture.Data = { |
07544269746D6170360C0000424D360C00000000000036000000280000002000 |
0000200000000100180000000000000C00000000000000000000000000000000 |
000000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 |
00FF0000FF0000FF0000FF0000FF0000FF0000FF00FCFBFBC7BBB5AA948AD3C8 |
C3FCFBFB00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 |
FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 |
00FF0000FF0000FF0000FF0000FF0000FF00F0EDECA0867695633C6A432FB8A6 |
9EFBFAFA00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 |
FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 |
00FF0000FF0000FF0000FF0000FF00DAD2CE856350D3A270DFAA72633821B8A6 |
9FFCFBFB00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 |
FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 |
00FF0000FF0000FF0000FF00CFC4BF6A422DB98A5CF3CCA1D6A16E643C28BCAB |
A400FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 |
FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00 |
00FF0000FF0000FF00E4DEDB6C4734BE9165E0BA91F9CFA5D5A17168422EBEAE |
A8FDFDFD00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 |
FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00F4F2F1 |
F4F1F0F4F1F0D9D0CC7756497E5035D3B28CE6BE94FBD2A7D7A87C603824967D |
72CEC2BCE7E0DDF8F6F500FF0000FF0000FF0000FF0000FF0000FF0000FF0000 |
FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00F4F2F1D3C9C4A59086 |
8C6D5E7E5A45673E27744A31B39071CCAA89ECC399F4CBA2CEA5806335194F26 |
156947388B6F61B4A198DDD4D0F7F5F400FF0000FF0000FF0000FF0000FF0000 |
FF0000FF0000FF0000FF0000FF0000FF0000FF00DFD7D3A792888C664E875D3E |
A37E5FBC9A79BC9B7BBF9F7FC0A081CDAD8AEEC69FECC39CD4AF8AB9926C8E62 |
3F7B4B284519075C3423836557B7A69DE7E0DD00FF0000FF0000FF0000FF0000 |
FF0000FF0000FF0000FF0000FF00FAF9F9C9BBB4957562B18C67BFA285C4AA8D |
C4AA8BC7A685CAAA86CCAB89D3B291E7C29FFCD4ADF3CDA6DBB896CFAF90CBAC |
89C5A580B48A607143264F210C6039289B8276D7CDC8FBFAFA00FF0000FF0000 |
FF0000FF0000FF0000FF00FEFEFEBFADA4AC8764C6AD8CC3AD95CAAE94D3B598 |
D8BA9BE5C5A5F5D5B1F9D9B6FADBB8FFE3BEFFE7C0FFE2BBF8D5B0E4C19ED7B5 |
93CCAD8FCAAD8ECBA983AC7F56542710522A188B6E60D3C7C2FBFAFA00FF0000 |
FF0000FF0000FF0000FF00C5B0A1BD9C7AC5B098C8B198D6BA9EE6C7A9F6D4B3 |
FFE1BEF8D2B0F1C19DFFD8B1FAD0A9F6CAA4F6CAA3FFE5BDFFD0A7F7CDA7F8D5 |
B1E8C5A1DABA98CFB191CEB092BE956F7343244D25118E7266DBD1CD00FF0000 |
FF0000FF0000FF00D5C6BBC5A888C2AE99CEB49DE1C6ABF6D7B9FFE1C2FFE4C4 |
FFF3D3CF9F7C6607009A2700BE501BCC5F2BCC5D28BD4E1A8F3002DAA880FFE7 |
C3FFDCB8F8D3AFE6C3A2D3B595CDB294C6A0786D3F22542C1B9F877BECE7E500 |
FF0000FF00F3F0EFBFA283C2B09CCCB7A2E3CAB1FADEC2FFE7C8FFE4C6FFE3C5 |
FFE5C7FFE8CAF4D9BA893E189A2E00A63E0A9930038D431CF1D8B6FFE5C3FFDF |
BFFFE0BBFFDFBCFEDAB6E8C7A7D4B799CDB396C09A7352240E684333C1B2ABFB |
FAFA00FF00C9AF99CABAA7CCB8A5E3CCB3FDE1C6FFE9CDFFE5C9FFE4C8FFE4C6 |
FFE4C8FFEBCDFFFBDF9F6442841900972A007E1800C18D69FFFFE1FFE4C4FFE1 |
C0FFDEBCFFDEBDFFE1BFFDDCB9E8C7AAD5B99ED8BD9EA77C564A1D0B967C70EB |
E6E4EBE6E2D6C0A7CABAA9DFC9B4FBE0C9FFE9D1FFE8CDFFE6CDFFE6CAFFE5CB |
FFE4CAFFE9CEFFF4DC9B613E851D009C3000811C00CA9774FFF6DAFFE3C6FFE2 |
C3FFE1C2FFE1C1FFE0C0FFE2C0FDDDBBE7C9ACD7BFA3D4B592693B206C4A3BD0 |
C4BED7C7BAC9BCAAD5C4B1F1DAC7FFECD4FFEAD3FFE8CFFFE8D0FFE8CEFFE7CF |
FFE7CDFFEBD2FFF6DE9B6140861D009C3000821C00C89675FFF8DFFFE5C9FFE3 |
C6FFE1C4FFE3C5FFE0C4FFE3C5FFE4C6F6D8B9E0C5ABDEC6AB956D51572C1AB8 |
A69DD2BCA5CDBFB2E2D0BEFCE9D2FFEED7FFEAD5FFEBD4FFEAD2FFEAD3FFE7D2 |
FFE9D1FFEDD5FFF8E19B6241861D009D3000821B00C89777FFFBE3FFE7CDFFE3 |
CAFFE4C9FFE4C7FFE2C8FFE3C7FFE5C9FFE2C5EBCFB4DEC6B0D8B6935A301BB1 |
9D94CAB8A8D3C6B8EEDBCCFFF0DDFFEEDBFFECDAFFECD8FFECD7FFEBD7FFEBD4 |
FFEBD5FFEFD9FFFAE69B6142861C009C3000821A00C89879FFFCE6FFE9D0FFE7 |
CEFFE6CBFFE4CAFFE6CCFFE5CBFFE5CAFFE8CDF5DAC1E3CCB5E2C6A958301BB0 |
9D93CDC2B4D6C8BCF1E1D1FFF3E1FFF0DDFFEEDCFFEEDCFFEDDBFFEDDAFFEDD9 |
FFEDD8FFF0DCFFFBEB9B6343851D009C3000821A00C89A7BFFFEE9FFEBD3FFE8 |
CFFFE8D0FFE6D0FFE8CDFFE7CEFFE7CDFFEBD1F9E0C7E4CEB6E6CFB759301CB0 |
9D93CEC4B8D6C9BEF2E4D6FFF4E5FFF0E1FFF0E0FFEFDFFFEFDFFFEFDEFFEFDD |
FFEFDDFFF4E3FFFFF4A26C4D871C009D3000821A00C89A7CFFFFEDFFECD7FFEA |
D5FFE8D4FFE9D1FFE9D1FFE9D2FFE7D1FFEDD6F9E1CAE4CEB8E7D3BD5A311EB0 |
9D93CDC2B8D7CDC3F3E6DAFFF7EAFFF3E5FFF2E4FFF1E3FFF1E3FFEFE2FFF2E2 |
FFF4E4FFFFF5FFFFF593471F9226009F3000841900C99C7FFFFFF2FFEEDBFFED |
D8FFECD7FFEBD5FFEBD4FFE9D4FFE9D3FFF1DAF9E4CEE6D3BDE6D4BD5D3420B6 |
A49CCFC4B8DAD3CAF3E8DEFFFAEEFFF7EBFFF2E6FFF2E7FFF4E7FFF3E5FFF5E7 |
FFFBEFC89F87812C047C0B008A1C008D20006D0A00C0957AFFFFF5FFF0DEFFEE |
DCFFEDDBFFEDDAFFEDD8FFEAD8FFEBD7FFF8E4FAE8D5EBD8C7E7D2BB724E3DCE |
C2BDDFD2C2DDD8D2EEE5DFFFFBF2FFFBF1FFF4EBFFF6EBFFF3EAFFF3E9FFF7EB |
FFFBEFA781696F371E84492B854F316D33134F1100BD9C88FFFFF5FFF1E3FFF0 |
E0FFEFDDFFEFDEFFEEDCFFEBDAFFF3E1FFFEEDF9E5D3F2E2D2E1C7AC95786BEB |
E6E3F6EEE7DAD7D4E8E1DBFBF3ECFFFFFDFFF8EFFFF8EDFFF7EEFFF7EDFFF8ED |
FFF9F0FFFFF9FFFFF6FFFFF9FFFFFEFFFEF5FBF1E5FFF7E9FFF7E9FFF3E5FFF2 |
E4FFF1E3FFF0E1FFEFE0FFF0DFFFFFF6FFF9E9F3E1D2FEF2E1987661C0B0AAFB |
FAFAFEFDFDDED4CBE0DEDCF1EBE4FFFFFDFFFFFFFFF8F2FFF7F0FFF9F1FFF9F0 |
FFF9F0FFFCF3FFFFFAFFFFFFFFFFFFFFFFF7FFFFFFFFFFF7FFF6EAFFF4E8FFF4 |
E8FFF4E6FFF1E4FFF2E1FFFFF4FFFFFFF9EBDCF6EADEECDBC5A28779EEEAE800 |
FF0000FF00F3EAE2DEDEDCE9E5E2F8F2EDFFFFFFFFFFFFFFFBF5FFF9F2FFFAF4 |
FFF9F3FFFDF6FFFFFFC79D85AA491AE38551C98763FFFFFAFFFCF4FFF7EDFFF5 |
EAFFF3E9FFF5E9FFFEF8FFFFFFFCF4E9F5E9DDFFF8EBB59983DCD4D100FF0000 |
FF0000FF0000FF00ECE2D7E2E3E3EBE8E6F9F4F1FFFFFFFFFFFFFFFDFAFFFAF5 |
FFFCF6FFFFFFF3EAE36208009C2F00DF864EA32F00D4AE99FFFFFFFFF9F1FFF6 |
ECFFFAF1FFFFFFFFFFFFFDF7EFF5EBE1FCF6EEDAC3AECFC3BFFCFCFC00FF0000 |
FF0000FF0000FF0000FF00EBE2D8E2E5E6EBEAE9FAF8F3FFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFDFD1C9480000841B008D1A00630000B48A70FFFFFFFFFFFAFFFF |
FFFFFFFFFFFFFFFEF9F4F6EDE7FFFBF8EFDDCBD0C2BA00FF0000FF0000FF0000 |
FF0000FF0000FF0000FF00FEFEFEEDE3D9E7E7E8EEF0F0F6F5F4FEFEFDFFFFFF |
FFFFFFFFFFFFFFFFFF78523D3B00003D0000571D02FAFAF7FFFFFFFFFFFFFFFF |
FFFFFFFCFDF7F1F9F6F2FFFFFBDBCABCDED4CE00FF0000FF0000FF0000FF0000 |
FF0000FF0000FF0000FF0000FF0000FF00F4EFEAEAE6E2F5F9FBF6F8FAF8F8F6 |
FCFCFBFFFFFFFFFFFFFFFFFFCAC2BBBDAFAAF6F7F4FFFFFFFFFFFFFFFDFBFDF9 |
F6FCFAF9FFFFFFFEF9F1CFBDB100FF0000FF0000FF0000FF0000FF0000FF0000 |
FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00DDD3CDDED6D0F2F4F5 |
F0F3F5F5F6F7FCFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9F9F7F8F8FFFF |
FFFDFAF4CCBDB3EDE8E600FF0000FF0000FF0000FF0000FF0000FF0000FF0000 |
FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF00FBF9F8FDFBF9 |
F2E8DDEBE6E0EDEBEBEDEDEDEDEEEEEDEEEEEEEDEEEEEBEAF1EBE4F5EBE1E5DD |
D7EBE6E400FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000 |
FF00} |
Transparent = True |
end |
object OKBtn: TElPanel |
Left = 160 |
Top = 88 |
Width = 129 |
Height = 25 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alNone |
UseXPThemes = False |
Enabled = False |
TabOrder = 0 |
Caption = 'OK' |
OnMouseDown = MouseDown |
OnMouseUp = MouseUp |
OnMouseEnter = OKBtnMouseEnter |
OnMouseLeave = OKBtnMouseLeave |
DockOrientation = doNoOrient |
end |
end |
end |
/trunk/History/Decoder40_DEC3AlphaSource/Message.pas |
---|
0,0 → 1,156 |
unit Message; |
interface |
uses |
Windows, Messages, SysUtils, Forms, ElLabel, ElCLabel, StdCtrls, ElPopBtn, |
ElBtnCtl, ElXPThemedControl, Controls, Graphics, Classes, ExtCtrls, |
ElPanel; |
type |
TMessageForm = class(TForm) |
Capt: TElPanel; |
CaptLabel: TElLabel; |
ExBtn: TElPanel; |
MainPanel: TElPanel; |
OKBtn: TElPanel; |
Message: TElLabel; |
MsgImg: TImage; |
procedure FormShow(Sender: TObject); |
procedure CaptMouseDown(Sender: TObject; Button: TMouseButton; |
Shift: TShiftState; X, Y: Integer); |
procedure MouseDown(Sender: TObject; Button: TMouseButton; |
Shift: TShiftState; X, Y: Integer); |
procedure MouseUp(Sender: TObject; Button: TMouseButton; |
Shift: TShiftState; X, Y: Integer); |
procedure ExBtnMouseLeave(Sender: TObject); |
procedure OKBtnMouseLeave(Sender: TObject); |
procedure OKBtnMouseEnter(Sender: TObject); |
procedure ExBtnMouseEnter(Sender: TObject); |
public |
procedure DrawDesign(); |
procedure ClickHandler(Sender: TObject); |
end; |
var |
MessageForm: TMessageForm; |
implementation |
uses Main; |
{$R *.DFM} |
procedure TMessageForm.DrawDesign(); |
begin |
MainPanel.GradientEndColor := Design_Form1; |
MainPanel.GradientStartColor := Design_Form2; |
Capt.GradientEndColor := Design_Caption1; |
Capt.GradientStartColor := Design_Caption2; |
ExBtn.GradientEndColor := Design_Caption1; |
ExBtn.GradientStartColor := Design_Caption2; |
if (OkBtn.Tag = 1) then MainForm.ChangeButtonState(true, OkBtn) else MainForm.ChangeButtonState(false, OkBtn); |
end; |
procedure TMessageForm.FormShow(Sender: TObject); |
var |
Hgt: integer; |
begin |
DrawDesign; |
MainForm.ChangeButtonState(true, OKBtn); |
// Titelleiste á la Windows |
//Hgt := GetSystemMetrics(SM_CYCAPTION); |
Hgt := MainForm.Capt.Height; |
Capt.Height := Hgt; |
ExBtn.Height := Hgt; |
ExBtn.Width := Hgt; |
ExBtn.Left := Capt.Width - ExBtn.Width; |
CaptLabel.Top := Capt.Height div 2 - CaptLabel.Height div 2; |
beep; |
end; |
procedure TMessageForm.CaptMouseDown(Sender: TObject; Button: TMouseButton; |
Shift: TShiftState; X, Y: Integer); |
begin |
ReleaseCapture; |
perform(WM_SysCommand, $F012, 0); |
end; |
procedure TMessageForm.MouseDown(Sender: TObject; |
Button: TMouseButton; Shift: TShiftState; X, Y: Integer); |
begin |
if Button = mbLeft then |
begin |
TElPanel(Sender).BevelOuter := bvLowered; |
MBDown := true; |
end; |
end; |
procedure TMessageForm.MouseUp(Sender: TObject; Button: TMouseButton; |
Shift: TShiftState; X, Y: Integer); |
begin |
if (Button = mbLeft) and MBDown then |
begin |
TElPanel(Sender).BevelOuter := bvRaised; |
MBDown := false; |
// Standardfarbe |
TElPanel(Sender).GradientEndColor := Design_Button_Active1; |
TElPanel(Sender).GradientStartColor := Design_Button_Active2; |
// Ausfürhung |
ClickHandler(Sender); |
end; |
end; |
procedure TMessageForm.ExBtnMouseLeave(Sender: TObject); |
begin |
TElPanel(Sender).BevelOuter := bvRaised; |
MBDown := false; |
if (TElPanel(Sender).Tag = 1) then |
begin |
TElPanel(Sender).GradientEndColor := Design_Caption1; |
TElPanel(Sender).GradientStartColor := Design_Caption2; |
end; |
end; |
procedure TMessageForm.ClickHandler(Sender: TObject); |
begin; |
if (Sender = OkBtn) or (Sender = ExBtn) then |
close; |
end; |
procedure TMessageForm.OKBtnMouseLeave(Sender: TObject); |
begin |
TElPanel(Sender).BevelOuter := bvRaised; |
MBDown := false; |
if (TElPanel(Sender).Tag = 1) then |
begin |
TElPanel(Sender).GradientEndColor := Design_Button_Active1; |
TElPanel(Sender).GradientStartColor := Design_Button_Active2; |
end; |
end; |
procedure TMessageForm.OKBtnMouseEnter(Sender: TObject); |
begin |
// Aufleuchten |
if (TElPanel(Sender).Tag = 1) then |
begin |
TElPanel(Sender).GradientEndColor := Design_Button_Leuchtend1; |
TElPanel(Sender).GradientStartColor := Design_Button_Leuchtend2; |
end; |
end; |
procedure TMessageForm.ExBtnMouseEnter(Sender: TObject); |
begin |
// Aufleuchten |
if (TElPanel(Sender).Tag = 1) then |
begin |
TElPanel(Sender).GradientEndColor := Design_Caption_Active1; |
TElPanel(Sender).GradientStartColor := Design_Caption_Active2; |
end; |
end; |
end. |
/trunk/History/Decoder40_DEC3AlphaSource/Options.ddp |
---|
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 |
/trunk/History/Decoder40_DEC3AlphaSource/Options.dfm |
---|
0,0 → 1,190 |
object OptionsForm: TOptionsForm |
Left = 375 |
Top = 213 |
BorderIcons = [biSystemMenu] |
BorderStyle = bsNone |
Caption = 'Einstellungen' |
ClientHeight = 233 |
ClientWidth = 425 |
Color = clBtnFace |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clBtnText |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
OldCreateOrder = False |
Position = poMainFormCenter |
OnCreate = FormCreate |
OnShow = FormShow |
PixelsPerInch = 96 |
TextHeight = 13 |
object Capt: TElPanel |
Left = 0 |
Top = 0 |
Width = 425 |
Height = 29 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alTop |
UseXPThemes = False |
TabOrder = 0 |
OnMouseDown = CaptMouseDown |
DockOrientation = doNoOrient |
object CaptLabel: TElLabel |
Left = 8 |
Top = 7 |
Width = 94 |
Height = 16 |
Caption = 'Einstellungen' |
ShadowColor = clBlack |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clWhite |
Font.Height = -13 |
Font.Name = 'MS Sans Serif' |
Font.Style = [fsBold] |
ParentFont = False |
end |
object ExBtn: TElPanel |
Tag = 1 |
Left = 396 |
Top = 0 |
Width = 29 |
Height = 29 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alNone |
UseXPThemes = False |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clWhite |
Font.Height = -13 |
Font.Name = 'MS Sans Serif' |
Font.Style = [fsBold] |
ParentFont = False |
TabOrder = 0 |
Caption = 'X' |
OnMouseDown = ExBtnMouseDown |
OnMouseUp = ExBtnMouseUp |
OnMouseEnter = ExBtnMouseEnter |
OnMouseLeave = ExBtnMouseLeave |
DockOrientation = doNoOrient |
end |
end |
object MainPanel: TElPanel |
Left = 0 |
Top = 29 |
Width = 425 |
Height = 204 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alClient |
UseXPThemes = False |
TabOrder = 1 |
DockOrientation = doNoOrient |
object UserLbl: TLabel |
Left = 104 |
Top = 16 |
Width = 219 |
Height = 13 |
Caption = 'Folgenden Namen in meine Dateien eintragen:' |
Transparent = True |
end |
object UserEdt: TElEdit |
Left = 104 |
Top = 32 |
Width = 257 |
Height = 21 |
Cursor = crIBeam |
BorderSides = [ebsLeft, ebsRight, ebsTop, ebsBottom] |
RightMargin = 1 |
TopMargin = 2 |
BorderStyle = bsSingle |
LineBorderActiveColor = clBlack |
LineBorderInactiveColor = clBlack |
MaxUndoLevel = 0 |
Ctl3D = True |
ParentCtl3D = False |
TabOrder = 0 |
end |
object OKBtn: TElPanel |
Left = 288 |
Top = 168 |
Width = 129 |
Height = 25 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alNone |
UseXPThemes = False |
Enabled = False |
TabOrder = 1 |
Caption = 'OK' |
OnMouseDown = BtnMouseDown |
OnMouseUp = BtnMouseUp |
OnMouseEnter = BtnMouseEnter |
OnMouseLeave = BtnMouseLeave |
DockOrientation = doNoOrient |
end |
object ElSideBar1: TElSideBar |
Left = 1 |
Top = 1 |
Width = 90 |
Height = 202 |
Sections = < |
item |
Index = 0 |
Caption = 'Einstellungen' |
Items = < |
item |
Index = 0 |
Caption = 'Sprache' |
end |
item |
Index = 1 |
Caption = 'Lizenz' |
end |
item |
Index = 2 |
ImageIndex = 1 |
Caption = 'Algorithmen' |
end> |
end> |
SectionIndex = 0 |
ItemIndex = 0 |
ItemTracking = False |
UnderlineTracked = False |
FlatActiveItem = True |
Flat = True |
ItemsFont.Charset = DEFAULT_CHARSET |
ItemsFont.Color = clWindow |
ItemsFont.Height = -11 |
ItemsFont.Name = 'MS Sans Serif' |
ItemsFont.Style = [] |
SectionsFont.Charset = DEFAULT_CHARSET |
SectionsFont.Color = clWindowText |
SectionsFont.Height = -11 |
SectionsFont.Name = 'MS Sans Serif' |
SectionsFont.Style = [] |
TrackSectionFontColor = clBtnText |
TrackItemFontColor = clBtnText |
TrackItemBkColor = clBackground |
ScrollButtonColor = clBackground |
TransparentItems = True |
ArrowColor = clBlack |
Align = alLeft |
BorderStyle = bsSingle |
Color = clSilver |
TabOrder = 2 |
object TElSideBarContainerPanel |
UseXPThemes = False |
TabOrder = 0 |
end |
end |
end |
end |
/trunk/History/Decoder40_DEC3AlphaSource/Options.pas |
---|
0,0 → 1,221 |
unit Options; |
interface |
uses |
Windows, Messages, Classes, Forms, ElPopBtn, Registry, ElXPThemedControl, |
ElEdits, Controls, StdCtrls, ElBtnCtl, ElCLabel, ElLabel, ExtCtrls, |
ElPanel, Graphics, ElSideBar; |
type |
TOptionsForm = class(TForm) |
Capt: TElPanel; |
CaptLabel: TElLabel; |
ExBtn: TElPanel; |
MainPanel: TElPanel; |
UserLbl: TLabel; |
UserEdt: TElEdit; |
OKBtn: TElPanel; |
ElSideBar1: TElSideBar; |
procedure FormCreate(Sender: TObject); |
procedure ExBtnMouseLeave(Sender: TObject); |
procedure CaptMouseDown(Sender: TObject; Button: TMouseButton; |
Shift: TShiftState; X, Y: Integer); |
procedure BtnMouseDown(Sender: TObject; Button: TMouseButton; |
Shift: TShiftState; X, Y: Integer); |
procedure BtnMouseUp(Sender: TObject; Button: TMouseButton; |
Shift: TShiftState; X, Y: Integer); |
procedure FormShow(Sender: TObject); |
procedure ExBtnMouseEnter(Sender: TObject); |
procedure ExBtnMouseDown(Sender: TObject; Button: TMouseButton; |
Shift: TShiftState; X, Y: Integer); |
procedure ExBtnMouseUp(Sender: TObject; Button: TMouseButton; |
Shift: TShiftState; X, Y: Integer); |
procedure BtnMouseLeave(Sender: TObject); |
procedure BtnMouseEnter(Sender: TObject); |
public |
procedure ClickHandler(Sender: TObject); |
procedure DrawDesign(); |
end; |
var |
OptionsForm: TOptionsForm; |
implementation |
uses Main; |
{$R *.DFM} |
procedure TOptionsForm.FormCreate(Sender: TObject); |
var |
Reg: TRegistry; |
temp: string; |
begin |
{* Benutzernamen herausfinden *} |
Reg := TRegistry.Create; |
Reg.RootKey := HKEY_LOCAL_MACHINE; |
if Reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion', false) then |
begin |
temp := Reg.ReadString('RegisteredOwner'); |
Reg.CloseKey(); |
end; |
if temp = '' then |
begin |
if Reg.OpenKey('SOFTWARE\Microsoft\Windows NT\CurrentVersion', false) then |
begin |
temp := Reg.ReadString('RegisteredOwner'); |
Reg.CloseKey(); |
end; |
if temp = '' then |
begin |
UserEdt.Text := ''; // Unbekanntes System: Kein Benutzername gefunden! |
end |
else |
begin |
UserEdt.Text := temp; // NT-System: Benutzername gefunden! |
end; |
end |
else |
begin |
UserEdt.Text := temp; // 9x-System: Benutzername gefunden! |
end; |
end; |
procedure TOptionsForm.ExBtnMouseLeave(Sender: TObject); |
begin |
TElPanel(Sender).BevelOuter := bvRaised; |
MBDown := false; |
if (TElPanel(Sender).Tag = 1) then |
begin |
TElPanel(Sender).GradientEndColor := Design_Caption1; |
TElPanel(Sender).GradientStartColor := Design_Caption2; |
end; |
end; |
procedure TOptionsForm.CaptMouseDown(Sender: TObject; Button: TMouseButton; |
Shift: TShiftState; X, Y: Integer); |
begin |
ReleaseCapture; |
perform(WM_SysCommand, $F012, 0); |
end; |
procedure TOptionsForm.BtnMouseDown(Sender: TObject; |
Button: TMouseButton; Shift: TShiftState; X, Y: Integer); |
begin |
if Button = mbLeft then |
begin |
TElPanel(Sender).BevelOuter := bvLowered; |
MBDown := true; |
end; |
end; |
procedure TOptionsForm.BtnMouseUp(Sender: TObject; Button: TMouseButton; |
Shift: TShiftState; X, Y: Integer); |
begin |
if (Button = mbLeft) and MBDown then |
begin |
TElPanel(Sender).BevelOuter := bvRaised; |
MBDown := false; |
// Standardfarbe |
TElPanel(Sender).GradientEndColor := Design_Button_Active1; |
TElPanel(Sender).GradientStartColor := Design_Button_Active2; |
// Ausfürhung |
ClickHandler(Sender); |
end; |
end; |
procedure TOptionsForm.FormShow(Sender: TObject); |
var |
Hgt: integer; |
begin |
DrawDesign(); |
MainForm.ChangeButtonState(true, OKBtn); |
// Titelleiste á la Windows |
//Hgt := GetSystemMetrics(SM_CYCAPTION); |
Hgt := MainForm.Capt.Height; |
Capt.Height := Hgt; |
ExBtn.Height := Hgt; |
ExBtn.Width := Hgt; |
ExBtn.Left := Capt.Width - ExBtn.Width; |
CaptLabel.Top := Capt.Height div 2 - CaptLabel.Height div 2; |
end; |
procedure TOptionsForm.ExBtnMouseEnter(Sender: TObject); |
begin |
// Aufleuchten |
if (TElPanel(Sender).Tag = 1) then |
begin |
TElPanel(Sender).GradientEndColor := Design_Caption_Active1; |
TElPanel(Sender).GradientStartColor := Design_Caption_Active2; |
end; |
end; |
procedure TOptionsForm.ExBtnMouseDown(Sender: TObject; |
Button: TMouseButton; Shift: TShiftState; X, Y: Integer); |
begin |
if Button = mbLeft then |
begin |
TElPanel(Sender).BevelOuter := bvLowered; |
MBDown := true; |
end; |
end; |
procedure TOptionsForm.ClickHandler(Sender: TObject); |
begin; |
if (Sender = OkBtn) or (Sender = ExBtn) then |
close; |
end; |
procedure TOptionsForm.ExBtnMouseUp(Sender: TObject; Button: TMouseButton; |
Shift: TShiftState; X, Y: Integer); |
begin |
if (Button = mbLeft) and MBDown then |
begin |
TElPanel(Sender).BevelOuter := bvRaised; |
MBDown := false; |
// Standardfarbe |
TElPanel(Sender).GradientEndColor := Design_Button_Active1; |
TElPanel(Sender).GradientStartColor := Design_Button_Active2; |
// Ausfürhung |
ClickHandler(Sender); |
end; |
end; |
procedure TOptionsForm.DrawDesign(); |
begin |
MainPanel.GradientEndColor := Design_Form1; |
MainPanel.GradientStartColor := Design_Form2; |
Capt.GradientEndColor := Design_Caption1; |
Capt.GradientStartColor := Design_Caption2; |
ExBtn.GradientEndColor := Design_Caption1; |
ExBtn.GradientStartColor := Design_Caption2; |
if (OkBtn.Tag = 1) then MainForm.ChangeButtonState(true, OkBtn) else MainForm.ChangeButtonState(false, OkBtn); |
end; |
procedure TOptionsForm.BtnMouseLeave(Sender: TObject); |
begin |
TElPanel(Sender).BevelOuter := bvRaised; |
MBDown := false; |
if (TElPanel(Sender).Tag = 1) then |
begin |
TElPanel(Sender).GradientEndColor := Design_Button_Active1; |
TElPanel(Sender).GradientStartColor := Design_Button_Active2; |
end; |
end; |
procedure TOptionsForm.BtnMouseEnter(Sender: TObject); |
begin |
// Aufleuchten |
if (TElPanel(Sender).Tag = 1) then |
begin |
TElPanel(Sender).GradientEndColor := Design_Button_Leuchtend1; |
TElPanel(Sender).GradientStartColor := Design_Button_Leuchtend2; |
end; |
end; |
end. |
/trunk/History/Decoder40_DEC3AlphaSource/RepeatPassword.ddp |
---|
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 |
/trunk/History/Decoder40_DEC3AlphaSource/RepeatPassword.dfm |
---|
0,0 → 1,876 |
object RepeatForm: TRepeatForm |
Left = 355 |
Top = 146 |
BorderIcons = [biSystemMenu] |
BorderStyle = bsNone |
Caption = '(De)Coder 4.0' |
ClientHeight = 377 |
ClientWidth = 425 |
Color = clBtnFace |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clWindowText |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
OldCreateOrder = False |
Position = poMainFormCenter |
OnCreate = FormCreate |
OnShow = FormShow |
PixelsPerInch = 96 |
TextHeight = 13 |
object Capt: TElPanel |
Left = 0 |
Top = 0 |
Width = 425 |
Height = 29 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alTop |
UseXPThemes = False |
TabOrder = 0 |
OnMouseDown = CaptMouseDown |
DockOrientation = doNoOrient |
object CaptLabel: TElLabel |
Left = 8 |
Top = 7 |
Width = 185 |
Height = 16 |
Caption = 'Verschl'#252'sselungsassistent' |
ShadowColor = clBlack |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clWhite |
Font.Height = -13 |
Font.Name = 'MS Sans Serif' |
Font.Style = [fsBold] |
ParentFont = False |
OnMouseDown = CaptMouseDown |
end |
object ExBtn: TElPanel |
Tag = 1 |
Left = 396 |
Top = 0 |
Width = 29 |
Height = 29 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alNone |
UseXPThemes = False |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clWhite |
Font.Height = -13 |
Font.Name = 'MS Sans Serif' |
Font.Style = [fsBold] |
ParentFont = False |
TabOrder = 0 |
Caption = 'X' |
OnMouseDown = MouseDown |
OnMouseUp = MouseUp |
OnMouseEnter = ExBtnMouseEnter |
OnMouseLeave = ExBtnMouseLeave |
DockOrientation = doNoOrient |
end |
end |
object MainPanel: TElPanel |
Left = 0 |
Top = 29 |
Width = 425 |
Height = 348 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alClient |
UseXPThemes = False |
TabOrder = 1 |
DockOrientation = doNoOrient |
object UebLabel: TElLabel |
Left = 8 |
Top = 8 |
Width = 89 |
Height = 24 |
Caption = #220'berschrift' |
Font.Charset = ANSI_CHARSET |
Font.Color = clBtnText |
Font.Height = -20 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
ParentFont = False |
end |
object CnclBtn: TElPanel |
Left = 8 |
Top = 312 |
Width = 129 |
Height = 25 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alNone |
UseXPThemes = False |
Enabled = False |
TabOrder = 0 |
Caption = 'Abbrechen' |
OnMouseDown = MouseDown |
OnMouseUp = MouseUp |
OnMouseEnter = BtnMouseEnter |
OnMouseLeave = BtnMouseLeave |
DockOrientation = doNoOrient |
end |
object BackBtn: TElPanel |
Left = 152 |
Top = 312 |
Width = 129 |
Height = 25 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alNone |
UseXPThemes = False |
Enabled = False |
TabOrder = 1 |
Caption = '<< Zur'#252'ck' |
OnMouseDown = MouseDown |
OnMouseUp = MouseUp |
OnMouseEnter = BtnMouseEnter |
OnMouseLeave = BtnMouseLeave |
DockOrientation = doNoOrient |
end |
object NextBtn: TElPanel |
Left = 288 |
Top = 312 |
Width = 129 |
Height = 25 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alNone |
UseXPThemes = False |
Enabled = False |
TabOrder = 2 |
OnMouseDown = MouseDown |
OnMouseUp = MouseUp |
OnMouseEnter = BtnMouseEnter |
OnMouseLeave = BtnMouseLeave |
DockOrientation = doNoOrient |
end |
object Box1: TElPanel |
Left = 8 |
Top = 40 |
Width = 409 |
Height = 113 |
BackgroundType = bgtVertGradient |
GradientEndColor = clWhite |
GradientStartColor = 14215660 |
GradientSteps = 128 |
Align = alNone |
UseXPThemes = False |
TabOrder = 3 |
DockOrientation = doNoOrient |
object B1Image: TImage |
Left = 16 |
Top = 16 |
Width = 32 |
Height = 32 |
AutoSize = True |
Picture.Data = { |
055449636F6E0000010001002020000000000000A80800001600000028000000 |
2000000040000000010008000000000000000000000000000000000000000000 |
00000000000000006F6D6F004C4B4C00CCCBCC0088828400AC979800D2BCBC00 |
867D7D00AAA4A40095919100BFBEBE00B3B2B2009C9B9B00D09E9C00D2A6A500 |
DAA29F00BE999700A38B8A00CDAAA70098878400C7BDBA00BEB7B400B3ABA700 |
B6B0AD009C9A9900D1CFCE009E9B9900A19E9C007D7772009F999400E5E0DC00 |
E1DCD800D8C8B900EBC39A00696663008B888500DBD7D300F1EDE90095949300 |
AFAEAD00DCBD9C00AB957E00EDCFB000B7A38E00A59B8E00979694006F6F6D00 |
56565500E7E7E6009D9D9C009BFFFF00D5FFFF00F3FFFF0031323200393A3A00 |
F8F9F900F1F2F200A3A4A40095FBFF00A1FDFF00CBFDFF0092F9FF008CEDF300 |
8FF7FE008FD1D600BCF9FF008BB8BD0086EDFF0097EDFB007AE1F600A1EFFF00 |
7DE5FF0067CAE50069C1D90083E5FE0070DCFF0070D6F50076DDFF006ABCD700 |
46A7CA0070D8FF0074D9FF0078DDFF006DACC100B6EBFE00B6DFED00E9F8FD00 |
3896BA0049ACD5005FC2E8006AD3FD006BCBF10090D4EE0037738D0066CCF900 |
75D3FB007ED5FB001F5C7A0053BAEF005FC9FB0063CCFE0057A2C9004786A500 |
495E68006A859200125E8A004AAFE9004CAEE50056BCF5005DC3FC004793BD00 |
214254005293B8001379BA001C82C2001F638D00389BD80047B2F5004CB6F700 |
53BDFF005AC0FF0061C3FF0048667800537082006F7C84002389CE002878AD00 |
266FA000358DCA0043A6EB0049B5FF00276187004CB1F8004EB4FB0050B6FA00 |
52B9FF0055BBFF0057BCFF0053AAE70062B4ED006BC4FF00467FA70078CAFF00 |
7AB3D80060768500606D7600157BC7002589D6002275B2003398E50039A0EE00 |
2C7AB4003EA5F20042A8F2003177AD00275E88004BB1FF004DB3FF004FB5FF00 |
4D92C600294C67003B617E00619DCB005C87A8009CD4FD0039A4FF0044AAFF00 |
47ADFF00296392004064810085C9FF002B3F4F006B95B700596C7B00C4E4FD00 |
1886E700218EEC002E93EE003096F000369EFF00359BF700399FFE003AA2FF00 |
3CA2FE003A9EF4003FA5FF0043A8FF005BB0FF0078BBF90089B1D40032393F00 |
2E97FE00329AFE00349AFF0075B0E8009DC4EB00A4C5E4002F3439007E889200 |
B0B2B4009FA0A1008C8D8E007E7F800074A6DB00E1E5EA0091929400DDDEE000 |
75767A00C5C5C600FFFFFF00F5F5F500EDEDED00EAEAEA00E3E3E300DBDBDB00 |
D6D6D600D4D4D400D2D2D200CECECE00C8C8C800C2C2C200C1C1C100BCBCBC00 |
BBBBBB00B9B9B900B6B6B600B5B5B500AFAFAF00ADADAD00ABABAB00A9A9A900 |
A7A7A700A4A4A400A3A3A3009F9F9F009A9A9A00979797009494940093939300 |
848484007A7A7A0072727200707070006F6F6F00606060005959590052525200 |
46464600404040003F3F3F003C3C3C003A3A3A00383838003737370035353500 |
00000000000000000000000000000000F0F22FFDF30000000000000000000000 |
000000000000000000000000000000E5DDD4D4F3350000000000000000000000 |
000000000000000000000000000000E2D1CED60AFB0000000000000000000000 |
000000000000000000000000000000E8CED90BD8F70000000000000000676F6F |
35EF00000000000000000000000000ECD0DCE1DAF9000000000000006E8F4848 |
61FD000000000000000000000000DC03D3E50AE2FA0000000000000070564443 |
4FFB00000000000000000000000000C838E4DDE5FC000000000000656955AA87 |
49F800000000000000000000000000EFDAC8DBEDF6000000000000655C5FB84D |
57EF000000000000000000000000E4D8D8EDDBCAF5000000000000653C759845 |
610000000000000000000000000000E5CEC9DCF1F00000000000AC5754955E4F |
7C00000000000000000000000000EEEF0AC9DDF4000000000065496075954C83 |
00000000000000000000000000D0DCE4EAEF0A2F0000000000904E469362587B |
00000000000000000000000000E1D7E5ED231502F600000070976B5B935E7300 |
000000000000000000F22FFEFCCAD927C968A29AABFA008F3E79B7936A6BAD00 |
0000000000000000EA0A0BE6F3F1E017AC76647774A0BE4F3DA6B1726D7F0000 |
00000000000000DED70ADED53803E3C78A516D9C4D59945B51B592746A7A0000 |
00000000000000E2CEE0E4DAD2D11EBD6352BA9C5132455A78B271767E000000 |
00000000000000E2D50BC8D0D4D1CC8B4764C19D513A3D5088717D99A9000000 |
00000000000000DE30E2EBE1DF1FC36343A7C19E4A323F518671B897C9000000 |
000000000000000AD3E2EBE7F1CF8A4351C1B39657443B5087B5B49BFE000000 |
000000000000E8DA38E031CD2CC45A3D9DBFB38D915D404689B3B98183C50000 |
000000000000E8D6D3DFE926CA8B3D47BFC0B1AD12057A5354BBB6786C9B0000 |
000000000000E830D2DDE81DAC8E3456BCBFC09F7C10106766A4BA896CA10000 |
000000000000E838D1D3D90BC8CBAA5634A4B7824868101383AFB97880C60000 |
00000000000018E9D0D4D1373024C4BCAE34548C4B3E070D7BB0BA85A8000000 |
0000000000001829292EE8DED6D325CEBCA4333C443F070F90C0BA96AD000000 |
000000000000182128F7F5D80B0C390A19C4AA4133421110A3A5B79700000000 |
000000000000182B2A22FEF7ECD9D7E0E61AC69F42130E078AB6B4A900000000 |
00000000000000EA282A1C0236FDF9F8F8FA02010512134047B993C600000000 |
0000000000000000182B2A20161B310C1B16140605048F4A4A84C20000000000 |
000000000000000000002D1D1614190315080918000000AEAE00000000000000 |
00000000000000000000000000E8E8E8E8000000000000000000000000000000 |
00000000FFF07FFFFFE07FFFFFE07FFFFFE07F83FFE07F03FFC07F03FFE07E03 |
FFE07E03FFC07E07FFE07C07FFC0F80FFF80F80FFF80701FF800201FF000003F |
E000003FE000007FE000007FE000007FE000007FC000003FC000003FC000003F |
C000003FC000007FC000007FC00000FFC00000FFE00000FFF00001FFFC00E7FF |
FF87FFFF} |
Transparent = True |
end |
object B1Label: TElLabel |
Left = 64 |
Top = 16 |
Width = 303 |
Height = 26 |
Caption = |
'Bitte wiederholen Sie das Kennwort noch einmal, damit die Datei'#13 + |
#10'verschl'#252'sselt werden kann.' |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clBtnText |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
ParentFont = False |
end |
object B1Status: TElLabel |
Left = 32 |
Top = 84 |
Width = 43 |
Height = 13 |
Caption = 'B1Status' |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clBtnText |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
ParentFont = False |
end |
object B1PwdEdit: TElEdit |
Left = 32 |
Top = 60 |
Width = 329 |
Height = 21 |
Cursor = crIBeam |
BorderSides = [ebsLeft, ebsRight, ebsTop, ebsBottom] |
PasswordChar = '*' |
RightMargin = 1 |
TopMargin = 2 |
BorderStyle = bsSingle |
LineBorderActiveColor = clBlack |
LineBorderInactiveColor = clBlack |
MaxUndoLevel = 0 |
OnChange = B1PwdEditChange |
Ctl3D = True |
ParentCtl3D = False |
TabOrder = 0 |
end |
end |
object Box2: TElPanel |
Left = 8 |
Top = 40 |
Width = 409 |
Height = 257 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alNone |
UseXPThemes = False |
TabOrder = 4 |
DockOrientation = doNoOrient |
object B2Label: TElLabel |
Left = 64 |
Top = 16 |
Width = 298 |
Height = 39 |
Caption = |
'Achtung! '#196'ndern Sie diese Einstellungen nur, wenn Sie wirklich'#13#10 + |
'wissen, was Sie tun! Die '#196'nderung dieser Daten beeinflussen'#13#10'die' + |
' Sicherheit der Software!' |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clBtnText |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
ParentFont = False |
end |
object B2Image: TImage |
Left = 16 |
Top = 16 |
Width = 32 |
Height = 32 |
AutoSize = True |
Picture.Data = { |
055449636F6E0000010001002020000000000000A80800001600000028000000 |
2000000040000000010008000000000000000000000000000000000000000000 |
000000002218270000000000514750004F273D008F104200543843003E001500 |
47031B00611A31006821370043101D0030000A0069081B00A64E5D00FFB2BE00 |
5D323500603032005F30320045000200603031007C0000006A00000032000000 |
2E000000220000001B0000001600000012000000090000000700000004000000 |
01000000622E2E0060323200554646006A1F1C0064292800622C2B007B0E0900 |
73130D006F181300652724006A302D007F0C0400850F0600740D060083110900 |
82190B00851E0F00841E10009A351D00A33A1E00A53F2200AA442400A3442500 |
AB4A2800A9482700A4472700AC4C2900AB4C2A00A84D2C00AD512E00C5603100 |
A7563300000000007D907F007C9280004F535100729D8A0064A997005AB3A000 |
50BCA80038D5C7000FF7F50000FDFF0000FFFF0000F6F90000F3F30000EAEB00 |
03FFFF0003FAFD0007FFFF0009FFFF000BFFFF000DFEFF000EFFFF0011FFFF00 |
13FFFF0015FFFF0016FFFF0017FDFE0018FFFF0011A6A7001CFFFF001EFFFF00 |
22FFFF001AC1C20024FFFF0025FDFF0023E2E3002AFFFF0031FFFF0068FFFF00 |
00F7FF0000F8FF0000FAFF0000EBF20000E6EA0000E1E50001E1E90003F7FE00 |
04F4F9000DF7FF000EF6FF0013FBFF0015F9FF0016F7FF001AF8FF001DF9FF00 |
5E989A0000F5FF0000F3FF0000F1FF0000F0FC0000E3F20000DBE90000DDE700 |
02B8C30003F5FF0003F0FF000DF0FF000EF4FF0011F1FF0012F5FF0019F2FF00 |
1FACB30000EFFF0000EBFF0000EDFF0001D4E60003E8FA0004E5F80005EAFF00 |
08EAFF000AD3E20011EEFF0014ECFF001CEFFF002898A20000E7FF0000E4FF00 |
00E8FF0000E5FB0000E1F90000D5EB0000CEE50000BCD00001DAF20001A3B400 |
02CCE30006E7FF0008E7FE000ECBE10011E8FF0014E9FF0015C6DA0000E3FF00 |
00DFFF0000E1FF0000DEFA0000DBF80000D5F30000CDEC0000CFE90000CAE600 |
06E2FE000AE4FF000BDEFE000DE2FF0010E3FF0000DBFF0000D9FF0000DDFF00 |
00D6FC0000D2F30000C9E80000C6E80001D6F90001CAED0003DCFF0005DAFF00 |
05C5E70006DDFF001BBAD50025B0C8001D7B8C002C89980036A3B60000D3FF00 |
00D5FF0000D6FF0000D5FD0000CEF50000C9F10000C6EC0000C1EA0000BFE500 |
02D0F70006D5FE0007D1FC0006ABCC000FA5C3001590A80031809000539EAD00 |
00D1FF0000CFFE0000CBFC0000CBFA0000CCF90000C7F60000C8F60000C1F100 |
00C5F10000C1EF0000BAE50000B8E30000B6E20000B4E00000B3DF0000B5DE00 |
00B1DA0000ACD60000A7CF0000A5CE0000A6CD0000A4CD0001CAF70001C7F500 |
01C9F50002B2DD0002A5CB00154959003D97B3003575880021698300366B8100 |
225973002E4D5C0032506400223B4F00060A1000111924005A627A004E4E5800 |
FFFFFF00010101013E37373A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3B |
3C3D01010101013F2A1310101010101010111111111110101010101010130F20 |
272301010101C5E7F1ECEBECECECECEBECEAE9E9EAEAEBEBECECEBECECEAE8F0 |
F62723010177E8E7E6E5E5E5E5E5E5E5E3E1DAD9DEE3E4E5E5E5E5E5E5E4E2E0 |
D802280101C2E6E1DFDCEEEFEFEEEFEDD7B5F5FDF3C6DADDEFEEEFEEDDDDDFE0 |
C6F42D0101E2E2CDD0BEC8C8C8C8C8B595FA1A0C0ED696C8C8C8C8C7C8B2D0DD |
C8FE040101CECECDD1B2C8C6C6C6C6B5A71E1B080CFD8AC8C6C6C6C6BE93D0D8 |
CB2804010101C1CECBB3C0C7C6C8C8B497FC1F1916F77AC8C8C7C7C7A493DBA8 |
F43101010101CECECCB1A3B5C8C8B5B489D21B1D00B7A8B5B5C8C7BD62B1C6CA |
20390101010101BFBACF92B0B5B5B4B4A7898A788997B4B4B4B5C88662C9A6C4 |
2F010101010101BABABCB191B6B4B4B4B6A896D396A8B4B4B6B5AF64B0B7B624 |
3701010101010101A5B9B891A1B6B6A7A796BB0AA797A7B6B6B47576BB97D530 |
0101010101010101AEAEACAF84A8A7A7A87AD312BC88A8A7B6A061AFB6AB2538 |
010101010101010101A2AEAB918FA6A6964AC315D26896A8A87475BB97C42F01 |
010101010101010101AEAEADA1829696974BF214D46995A6A05EA1AAA6293901 |
01010101010101010101A59B9D858E957A97000DF9789796835EA988C42F0101 |
010101010101010101019B9B9A8270974A9C180D05698A975E85A69921360101 |
01010101010101010101018B8B8D72814B9E1709039F677061957A942C010101 |
01010101010101010101018B8B9D71544BF2170707D44B5E7398792034010101 |
010101010101010101010101907D8C574FFB190612F74F618A67942E01010101 |
0101010101010101010101018B8B7C55531F1A0712FA58598979053301010101 |
010101010101010101010101017D7D81571D1C0B16F85E7969872B0101010101 |
010101010101010101010101017D7D7C555C1F1F1C63577B6922320101010101 |
01010101010101010101010101016D6D80576E7F525F684B8726010101010101 |
01010101010101010101010101017E7E6A55524B5D59784A2232010101010101 |
0101010101010101010101010101016D6B6F565264684B602D01010101010101 |
0101010101010101010101010101016C6C6A5B655F4C4B223201010101010101 |
010101010101010101010101010101016B4E5A66544B60260101010101010101 |
010101010101010101010101010101014E4E50644B4B43340101010101010101 |
01010101010101010101010101010101014D4C4B4B6035010101010101010101 |
0101010101010101010101010101010101014951483E01010101010101010101 |
0101010101010101010101010101010101010101010101010101010101010101 |
01010101F0000003E0000003C000000180000001800000018000000180000001 |
C0000003C0000003E0000007E0000007F000000FF000000FF800001FF800001F |
FC00003FFC00003FFE00007FFE00007FFF0000FFFF0000FFFF8001FFFF8001FF |
FFC003FFFFC003FFFFE007FFFFE007FFFFF00FFFFFF00FFFFFF81FFFFFFC3FFF |
FFFFFFFF} |
Transparent = True |
end |
object B2CipherLbl: TElLabel |
Left = 16 |
Top = 64 |
Width = 138 |
Height = 13 |
Caption = 'Verschl'#252'sselungsalgorithmus:' |
end |
object B2CipherStandard: TElLabel |
Left = 32 |
Top = 104 |
Width = 86 |
Height = 13 |
Caption = 'B2CipherStandard' |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clBlue |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
ParentFont = False |
end |
object B2ModeLbl: TElLabel |
Left = 16 |
Top = 128 |
Width = 116 |
Height = 13 |
Caption = 'Verschl'#252'sselungsmodus:' |
end |
object B2ModeStandard: TElLabel |
Left = 32 |
Top = 168 |
Width = 83 |
Height = 13 |
Caption = 'B2ModeStandard' |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clBlue |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
ParentFont = False |
end |
object B2HashLabel: TElLabel |
Left = 8 |
Top = 192 |
Width = 116 |
Height = 13 |
Caption = 'Validierungsalgorythmus:' |
end |
object B2HashStandard: TElLabel |
Left = 32 |
Top = 232 |
Width = 81 |
Height = 13 |
Caption = 'B2HashStandard' |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clBlue |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
ParentFont = False |
end |
object B2CipherExplain: TElLabel |
Left = 240 |
Top = 84 |
Width = 77 |
Height = 13 |
Caption = 'B2CipherExplain' |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clNavy |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
ParentFont = False |
end |
object B2ModeExplain: TElLabel |
Left = 240 |
Top = 148 |
Width = 74 |
Height = 13 |
Caption = 'B2ModeExplain' |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clNavy |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
ParentFont = False |
end |
object B2HashExplain: TElLabel |
Left = 240 |
Top = 212 |
Width = 72 |
Height = 13 |
Caption = 'B2HashExplain' |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clNavy |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
ParentFont = False |
end |
object B2CipherCombo: TElAdvancedComboBox |
Left = 32 |
Top = 80 |
Width = 201 |
Height = 21 |
AutoCompletion = False |
Flat = False |
HandleDialogKeys = False |
HorizontalScroll = False |
ItemIndex = -1 |
ItemHeight = 13 |
Style = csDropDownList |
TabOrder = 0 |
OnChange = B2CipherComboChange |
end |
object B2ModeCombo: TElAdvancedComboBox |
Left = 32 |
Top = 144 |
Width = 201 |
Height = 21 |
AutoCompletion = False |
Flat = False |
HandleDialogKeys = False |
HorizontalScroll = False |
ItemIndex = -1 |
ItemHeight = 13 |
Style = csDropDownList |
TabOrder = 1 |
OnChange = B2ModeComboChange |
Items.Strings = ( |
'cmCTS' |
'cmCBC' |
'cmCFB' |
'cmOFB' |
'cmECB') |
end |
object B2HashCombo: TElAdvancedComboBox |
Left = 32 |
Top = 208 |
Width = 201 |
Height = 21 |
AutoCompletion = False |
Flat = False |
HandleDialogKeys = False |
HorizontalScroll = False |
ItemIndex = -1 |
ItemHeight = 13 |
Style = csDropDownList |
TabOrder = 2 |
OnChange = B2HashComboChange |
end |
end |
object Box3: TElPanel |
Left = 8 |
Top = 40 |
Width = 409 |
Height = 65 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alNone |
UseXPThemes = False |
TabOrder = 5 |
DockOrientation = doNoOrient |
object B3Image: TImage |
Left = 16 |
Top = 16 |
Width = 32 |
Height = 32 |
AutoSize = True |
Picture.Data = { |
07544269746D6170360C0000424D360C00000000000036000000280000002000 |
0000200000000100180000000000000C00000000000000000000000000000000 |
0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF5F5F5EAEAEA |
DADADACBCBCBBEBEBEB6B6B6B2B2B2B1B1B1B1B1B1B3B3B3B8B8B8C3C3C3D2D2 |
D2E3E3E3F0F0F0F8F8F8FDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8ECECECD7D7D7B9B9B9 |
9898987C7C7C6666665959595252525151515151515454545D5D5D6E6E6E8888 |
88A8A8A8C7C7C7E0E0E0F1F1F1FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF5F5F5E2E2E2C1C1C1979797B1A49E |
D6C2B8EAD5CAF0DCD1F0DCD1F0DCD1F0DCD1F0DCD1EFDBD0E0CCC0C0AFA55754 |
525858587D7D7DA7A7A7CFCFCFEAEAEAF9F9F9FEFEFEFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFCFCFCF3F3F3DADADAB0B0B0AAA099EBD7CCF2E0D6 |
F4E8E3F4EFEDF4F4F3F3F4F4F0F2F3F1F2F3F1F2F3F2F1F1F4EDE9F3E5DDEEDB |
D0CDBBAF5F59575C5C5C8F8F8FC2C2C2E6E6E6F8F8F8FEFEFEFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFDFDFDF3F3F3D7D7D7A7A6A6E0CDC2F2DFD5F5F0EEF2F4F5 |
F0F2F3EBEEEFDFE2E4DFE2E3E8EBECECEFF1ECEFF1EDF0F2EDF0F2EFF2F2F3F2 |
F1F4E9E3EFDBD09889824B4B4B838383BDBDBDE5E5E5F8F8F8FEFEFEFFFFFFFF |
FFFFFFFFFFFDFDFDF5F5F5DBDBDBB5B0ADEAD6CBF5EBE5F4F5F5F0F1F2EDF1F2 |
E4DDDBCBAFA2BE8B72BF7C5BC27852C67D59CC8F71D5AB96DFCEC4E9E9E9EDF0 |
F2F0F1F2F6F4F4F2E1D8BFACA2464646828282C0C0C0E9E9E9FAFAFAFEFEFEFF |
FFFFFFFFFFF9F9F9E4E4E4BDB8B5EFDACFF6F1EFF3F4F4F0F4F5EAE7E6D5AB95 |
C07149BB5B2ABE5A27C06133C8815FC67349BC5623BB5827BE6234C98767DEC7 |
BCEDF0F2EFF0F1F4F6F6F4E6DEC1AEA44949498C8C8CCBCBCBEFEFEFFCFCFCFF |
FFFFFFFFFFEFEFEFC9C7C6EAD7CCF7F1EDF4F5F5F0F4F5E5D8D1C8805DBD5A28 |
BF5B2AC3602FC26638C5AA9DECEEEFF5EDE9D28863C25D2BC05E2DBD5927BD60 |
32D1A189EAE9E8EFF1F1F5F6F7F3E2D99B8C845757579F9F9FDADADAF6F6F6FE |
FEFEFFFFFFDCDCDCE0CCC2F6E8E1F6F7F7F2F7F8E2CDC1C36D43BE5A28C36231 |
C66332CA622EBC7755C1C4C5F8F8F9FFFFFFEACABAC76330C66332C46232C05F |
2EBC5A28CD9071ECEAE9F1F2F2F6F7F7F0DDD2726863717171BCBCBCEBEBEBFC |
FCFCFFFFFFCBC4C0F1DED3F9F9FAF4F6F6E8DBD5C46E43C05C2AC56332C86433 |
CB6633CD6431C06F47BFBBB9FEFFFFF5FCFFD9A88FCA622ECA6533C86533C763 |
31C26130BC5826D0987CEEEFF0F2F3F4F6EEEADCC8BD545251999999DADADAF7 |
F7F7FFFFFFE6D3C8F7EEE9F6F8F9F1F1F0CE8866C05C29C66433C96534CC6734 |
CC6734CC6633CB6430C98563E9C8B7DDA88FCB6836CC6431CC6634CC6634C965 |
33C66333C2602FBE5D2CDCB9A8F1F5F7F5F6F7F2DFD5796E69757575C4C4C4F0 |
F0F0FAF2EEEFDBD0F9FAF9F6FAFBE1C1B1C25F2FC66332CA6634CC6735CC6734 |
CC6734CC6633CC6632CD622CCA602BCA5F2ACB632FCC6633CC6633CC6634CB66 |
34CA6533C76432C05E2DC6764DEBE6E3F3F5F5F6EDE8DFCBC0585858ADADADE6 |
E6E6F5E5DDF4E5DCF9FAFBF4F4F4D08965C35E2BCA6635CD6836CD6835CC6734 |
CC6633CC6532CA6735CB957CE9C0ACEAC0AAD37C50CB622ECC6633CC6633CC67 |
34CC6734CA6534C56332BF5C2BDCB6A3F4F9FBF6F6F5EFDACF595654989898DB |
DBDBF2DED3F8EEE9FAFDFEEDDCD4C66636C86634CD6836CD6836CD6835CC6633 |
CC6633CC6532C76737C7BAB3FFFFFFFFFFFFDA916BCA5F29CC6633CC6633CC67 |
34CC6734CB6634C86534C15C28CE8966F1F1F1F7F9FAF2DFD59A8C84888888D3 |
D3D3F1DCD1FCF8F5FCFFFFE4BCA9C66230CC6938CF6A38CE6836CC6633CC6633 |
CC6633CC6632C86533C1AEA5FCFEFFFFFFFFE3AA8DCA5D28CC6633CC6633CC66 |
33CD6734CD6835CB6735C5602EC77349EDE4DFF7F9FBF5E6DEBFADA5808080CE |
CECEF0DCD1FEFDFDFEFFFFDFA88ECA6532CF6B39D06B38CE6836CC6633CC6633 |
CC6633CC6633CC632FB88C77E4EAECFFFFFFFAF1ECD98C65CA602CCC6633CC66 |
33CC6734CD6835CC6836C86432C66939EBDBD3F7FAFCF5E9E3C8B7AD7D7D7DCC |
CCCCF0DCD1FFFEFEFFFFFFDFA081CE6835D26E3CD16C3ACE6936CC6633CC6633 |
CC6633CC6633CD6531C66839BBA499F1F6F8FFFFFFFAF1ECD88B65CA602BCC66 |
33CC6734CE6936CE6937CA6634C86939EBD7CDF9FCFEF7EBE5C9B7AE7E7E7ECC |
CCCCF0DCD1FEFEFDFFFFFFE4A789D26C39D5713FD36E3BCF6936CC6633CC6633 |
CC6633CC6633CC6633CD642FC56839C4AEA2F6F9FBFFFFFFFBF1EDD7875FCB62 |
2DCD6734CF6937CF6B39CC6836CA6B3BEEDBD2FCFFFFF7ECE5C9B8AE838383CF |
CFCFF1DCD1FEFBFBFFFFFFECB99FD8723EDA7644D6713ED06B38CD6734CC6633 |
CC6633CC6633CC6633CC6633CD642EC5693AD1BDB3FCFFFFFFFFFFF5E0D7CE6D |
3CCD6531D16B38D26D3BCE6A37CE7143F4E5DEFFFFFFF7EAE3C8B7AD8E8E8ED5 |
D5D5F1DDD1FCF6F3FFFFFFFADBCBDF7946E07C4ADB7644D36D3BCE6835CC632E |
CB612CCA602ACB6430CC6633CC6633CD632DC4744CECE7E5FFFFFFFFFFFEDC94 |
70CD632FD26D3BD4703ECF6936D6855CFBF5F3FFFFFFF5E4DCB9A9A1A0A0A0E0 |
E0E0F3E0D5F8ECE6FFFFFFFEFAF7EC9163E8824FE37E4CD8723FCF6F3FCF9071 |
DAA68DE7B9A3D47D50CB622DCC6633CC6633CA6330E1CDC2FFFFFFFFFFFFE4B0 |
95D06733D6723ED87441D26B37E5AB8EFFFFFFFFFEFEF0DCD1988E88B7B7B7EA |
EAEAF7EAE2F4E2D9FFFFFFFFFFFFFBC9AEF18752EE8A57E37C48D27648C9C2BE |
F1F6F9FFFFFFEBC2AECA5F29CB632FCB602CCA7043ECE2DDFFFFFFF9FCFDDFA5 |
89D56D38DC7745DC7846D87644F8DFD3FFFFFFFDFAF9EED9CF848484CECECEF3 |
F3F3FDFAF8F0DBD0FDFAF8FFFFFFFFF7F0FDA374FC9562F48F5CE47B47C69F8C |
F0F5F7FFFFFFFEFDFCE6B299D2774BD17F56E4C7B9FCFEFFFFFFFFEDEDECDC8F |
6ADF7641E37F4DE07744EBAB8AFFFFFFFFFFFFF6E9E1CAB8AEA9A9A9E2E2E2F9 |
F9F9FFFFFFEDDCD4F6E8E0FFFFFFFFFFFFFFE3D2FFA36EFFA371FA9561E08A5F |
CDC6C3FAFDFEFFFFFFFFFFFFFCF5F1FBF8F6FFFFFFFFFFFFF6FBFDE3CABEE683 |
52EC8653EB834FEC9366FDF5EEFFFFFFFEFCFCEFDBD097928FCACACAF1F1F1FD |
FDFDFFFFFFF4F3F2F0DBD0FDFAF9FFFFFFFFFFFFFFE1C3FFB580FFB481FFA26E |
E6A17ED7CECBEEF3F5F5F9FBF7FBFDF7FBFCF7FAFCF1F6F9E9D8D1F19C73F892 |
5EFA9360F69461FEE2D2FFFFFFFFFFFFF7E9E2CFBDB3B1B1B1E4E4E4F9F9F9FE |
FEFEFFFFFFFBFBFBEDE1DAF3E1D7FFFFFFFFFFFFFFFFFFFFEBD4FFD09CFFCB97 |
FFBB87F7B389E9BFAADDC6BED7C7C0D7C7C0DFC9BFF0C1A9FCA97CFFA370FFA4 |
6FFFAE7EFFE8D7FFFFFFFFFFFFFCF7F5ECD8CDA7A4A2D7D7D7F4F4F4FDFDFDFF |
FFFFFFFFFFFEFEFEF9F9F9EEDDD3F6E8E0FFFFFFFFFFFFFFFFFFFFFCEDFFEFC6 |
FFE9B4FFDDA6FFD19BFFC696FEBF8FFDBD8CFFBD8BFFBB87FFBC86FFC28EFFD1 |
AFFFFCF8FFFFFFFFFFFFFEFDFDF1DDD2B3ABA7D0D0D0F0F0F0FCFCFCFFFFFFFF |
FFFFFFFFFFFFFFFFFEFEFEF8F8F8EFDDD4F6E7E0FFFFFFFFFFFFFFFFFFFFFFFF |
FFFFEDFFFDE5FFFBD1FFF6C3FFEFBBFFE8B5FFE4B1FFE6B7FFEBCDFFF6E8FFFF |
FFFFFFFFFFFFFFFDF9F8F1DDD3BDB2ADCECECEEEEEEEFBFBFBFEFEFEFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7EEDDD5F3E0D6FCF7F5FFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFDFFFFFDFFFFFCFFFFFCFFFFFDFFFFFFFFFFFFFFFF |
FFFFFFFFF8EEE8EFDBD0C2BAB6D4D4D4EFEFEFFBFBFBFEFEFEFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF9F9F9EEE2DCF0DCD1F5E6DEFCF8F4 |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFBFAF1 |
ECF2DFD5E4D0C6CBC6C3E0E0E0F3F3F3FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF4F4F3EEDDD4EFDCD0 |
F3E0D5F6E9E1FAF2EEFDFAF9FEFCFBFEFCFBFCF7F6F9EEE9F5E5DDEFDBD0E8D5 |
CAD1C7C2D9D9D9EDEDEDF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFD |
F9F0EAF4E3DAF2DED3F1DDD2F1DDD2F1DDD2F1DDD2F2DFD4F6E6DEFBF3EFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFF} |
Transparent = True |
end |
object B3CheckBox1: TElCheckBox |
Left = 64 |
Top = 16 |
Width = 112 |
Height = 17 |
Cursor = crDefault |
Transparent = True |
Caption = 'Datei komprimieren' |
TabOrder = 0 |
UseXPThemes = False |
DoubleBuffered = False |
end |
object B3CheckBox2: TElCheckBox |
Left = 64 |
Top = 32 |
Width = 184 |
Height = 17 |
Cursor = crDefault |
Transparent = True |
Caption = 'Benutzernamen in Datei schreiben' |
TabOrder = 1 |
UseXPThemes = False |
DoubleBuffered = False |
end |
end |
object Box4: TElPanel |
Left = 8 |
Top = 112 |
Width = 409 |
Height = 97 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alNone |
UseXPThemes = False |
TabOrder = 6 |
DockOrientation = doNoOrient |
object B4Image: TImage |
Left = 16 |
Top = 16 |
Width = 32 |
Height = 31 |
AutoSize = True |
Picture.Data = { |
07544269746D6170D60B0000424DD60B00000000000036000000280000002000 |
00001F0000000100180000000000A00B00000000000000000000000000000000 |
0000FFFFFFFFFFFFFFFFFFFBFBFBEFEBEDDAD0D4B8A5AD9A7F8982606E744F5E |
724C5B724C5B75505F8868759B818BB8A5ADDAD0D4F1EEEFFCFCFCFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFF4F2F3D2C6CBA388908F676E9C7679AD898BB99898B89696 |
B89494B79292A1757895696E865B64805B67886875AE98A1DAD0D4F9F8F8FFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFF3F1F2BBA4A9A2797DC4AEAED7CFCFDBD4D4DAD1D1D9CECED8CACA |
D7C6C6D6C0C0D5BBBBD3B6B6CBA8A8B487879164697E5965947883D0C4C8F9F8 |
F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFAF9F9BFA4A7BFA5A5DDDCDCDDDCDCDDDCDCDCDADADCD7D7DAD3D3D9CFCF |
D8CACABE9B9BA88181AF8383C19B9BD1ADADCDA4A4AB7B7C7E5762947883DDD3 |
D7FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFE0D0D1C3A9A9E0E0E0E4E4E4E5E5E5E5E5E5E2E2E2DEDDDDDCD8D8DAD3D3 |
CEB8B8CBB1B1C4C1C19E92929E7E7EA87B7BCDA5A5CFA3A3AC7B7C825D69BFAE |
B5F6F4F5FFFFFFFFFFFFFAF9F9F8F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFC39F9FDDDADAE6E6E6EBEBEBEEEEEEEDEDEDE9E9E9E3E3E3DDDCDCDBD6D6 |
C5A7A7DAC6C6C1B1B1A58E8EA68C8CA78888C59D9DCFA4A4C39393946870B9A7 |
AFF6F4F5F9F8F8EDE8EAD5C9CDCEC2C6EAE5E7FAF9F9FFFFFFFFFFFFFFFFFFFF |
FFFFCCAFAFE4E4E4EBEBEBF2F2F2F5F5F5F4F4F4EFEFEFE7E7E7E0E0E0DCD8D8 |
BD9696E3D2D2B89999AB8787AD8585AE8484C8A0A0CFA5A5C79898986E75BDAC |
B3E2DADDCABBC2A3848B90697181606DA38A94CFC1C7EDE8EAFBFBFBFFFFFFFF |
FFFFD7BABAE3DFDFEEEEEEF6F6F6FCFCFCF9F9F9F1F1F1EAEAEAE1E1E1DAD4D4 |
C19595DDC3C3B18282B28080B37F7FB57D7DCDA6A6CFA6A6C798989D757CA892 |
9A9D7A82AA8084CBA2A2AAA2A29B7D81825A65846470A48C95D2C6CBF1EDEFFC |
FCFCFAF7F7D0B4B4EDEDEDF4F4F4EBD8D8F4EFEFF0F0F0E9E9E9E1E1E1D1BDBD |
CEA6A6D1AAAAB87B7BB97979BB7777BC7676D1ABABCEA4A4B0818490656DB990 |
91D4B1B1D8B6B6D6B2B2ACA6A6ACA6A6AB9F9F98767A7E5763886774AE98A1D7 |
CCD1FFFFFFF3E9E9D9BFBFE2D2D2CA9292BF7373D1A0A0DCC8C8DFDEDECAA4A4 |
D1A7A7C99191BE7474C07272C27070C46F6FCEA6A6C39494C9A3A3D9BCBCDBBD |
BDD9B9B9D8B6B6D6B2B2AEA3A3AEA3A3AEA3A3AEA3A3AA9494906C727D586481 |
606DFFFFFFFFFFFFFFFFFFD4AFAFCB9696F2C697E5C6C6D29999C57E7EC88E8E |
CB8F8FC67676C66C6CC76B6BC96969CA6868D6B6B6DFC9C9DDC4C4DCC1C1DBBD |
BDD9B9B9D7B4B4D2A7A7A48383AE9B9BB09F9FB09F9FB09F9FA7AB9EA7898972 |
4C5BFFFFFFFFFFFFFFFFFFD4B0B0C78F8FFFA10FFFA821FBC576EFCDB3D9A8A8 |
C97C7CC66C6CC96666C86363C55F5FC56969E1CCCCDFC9C9DDC4C4DCC1C1D6B2 |
B2D0A3A3CC9999CD9C9C9B69699B6969A58181B09898B29C9C6BF999AB8E8E72 |
4C5BFFFFFFFFFFFFFFFFFFD0A8A8D39471FFA61BFFA81FFFAA22FFAB24FCB548 |
F3C896DEAFA7CF8A8AC46767BC5A5ABB6A6AE1CCCCDBC0C0D4ACACCD9C9CCD9B |
9BD1A5A5D5AEAED4B0B0B49898AA85859C6C6C9B6969A67F7FB29595AD8B8B72 |
4C5BFFFFFFFFFFFFFAF9F9CEA2A2D69462FFAC26FFAE2AFFB02DFFB130FFB232 |
FFB232FDB33BF4BA6BE4B292D29797C97777CE8B8BCC9393D1A6A6D6B2B2DBBD |
BDD9B9B9D8B6B6CEABABB08C8CA37878B18F8FAB83839E6E6E9B6969A2757572 |
4C5BFFFFFFFFFFFFE5D7D8D6B1B1DA9756FFB232FFB436FFB639FFB73BFFB83E |
FFB83EFFB83EFFB83EFFB73BFAB649E9B27BD69A8ACC7D7DD28A8AD8AAAADBBD |
BDD9B9B9D8B6B6CFAAAAB08686BF8C8CB98686A97A7AAF8686B08686A1707072 |
4C5BFFFFFFFFFFFFD4BCBCD3AFAFECA84BFFB73DFFBA42FFBC45FFBD48FFBE4A |
FFBF4BFFBF4BFFBE4AFFBD48FFBB45FFB941FFB73DF0AE59DC9A73CB6868DBBD |
BDD9B9B9D8B6B6CFA9A9AD7F7FBF8C8CCC9999CC9999BF8C8CA87777B1848472 |
4C5BFFFFFFFFFFFFCEB3B3CBA6A6F5B34BFFBD48FFBF4DFFC151FFC354FFC456 |
FFC558FFC558FFC455FFC354FFC151FFBF4DFFBD48FFBA42FFB73CCA6868DBBD |
BDD9B9B9D8B6B6CFA8A8AA7878BF8C8CCC9999CC9999CC9999B38080B2808072 |
4C5BFFFFFFFCFCFCCAADADC7A19AFFC04DFFC353FFC559FFC75DFFC960FFCA61 |
FFCB64FFCB64FFCA61FFC960FFC75CFFC558FFC253FFBF4DF8B24BCC7A7ADBBD |
BDD9B9B9D8B6B6D0A7A7AB7676A67373A67373B98686CC9999B38080B37D7D72 |
4C5BFFFFFFEEE8E8D4B9B9CBA287FFC557FFC85EFFCB64FFCD69FFCF6CFFD06E |
FFD06EFFD06EFFD06EFFCF6BFFCD68FFCB63FFC85DFFC457F1AC58CB8181DBBD |
BDD9B9B9D8B6B6D0A6A6AC7474BC8989B98686AC79799C6969A97676B57B7B72 |
4C5BFFFFFFD7CBCCE2CBCBCFA475FFCA62FFCD68FFD06FFFD374FFD578FFD67B |
FFD77BFFD77BFFD67AFFD577FFD373FFD06EFFCD68FFC961E5A063CD8C8CDBBD |
BDD9B9B9D8B6B6D1A5A5AC7272B98686A37070A67373BC8989AF7C7CB6787872 |
4C5BFFFFFFCFBFC0DFCBCBD9AF75FFCF6BFFD273FFD679FFD97FFFDB84FFDC87 |
FFDD88FFDD88FFDC86FFDB83FFD87EFFD579FFD272FFCE6AE19D6ACF9797DBBD |
BDD9B9B9D8B6B6D0A1A1AD7070BF8C8CCC9999C28F8FB98686B38080B7757572 |
4C5BFEFEFEC7B7B8D4C0C0E9BE74FFD374FFD77CFFDB84FFDE8AFFE18FFFE292 |
FFE394FFE394FFE292FFE08FFFDE89FFDA83FFD77BFFD273D48F70D2A2A2DBBD |
BDD9B9B9D8B6B6CD9595B47070A87474B98686C99696CC9999B38080B9737372 |
4C5BF4F2F2CABBBBC6B4B4FFD273FFD77CFFDC85FFE08DFFE395FFE69AFFE89E |
FFEAA1FFEAA1FFE89EFFE69AFFE394FFDF8DFFDB84FFD77BCF8B74D5ADADDBBD |
BDD9B9B9D8B6B6CE9393C57474C57474B56E6EAA6D6DAC7979A97676BA707072 |
4C5BE1DBDCE0D5D5C3AEA3FFD679FFDB84FFE08DFFE497FFE89FFFECA6FFEEAA |
FFEFADFFEFADFFEEAAFFEBA5FFE89EFFE496FFDF8CFFDA83BD7575D6B2B2DBBD |
BDD9B9B9D8B6B6CF9191C77070C77070C77070C77070C46F6FB66C6CBC6D6D72 |
4C5BC8C1C2F2ECECB8A28BFFD97FFFDE8AFFE395FFE89EFFEDA8FFF1B0FFF4B6 |
FFF5B9FFF5B8FFF4B5FFF0AFFFECA7FFE89DFFE393FFDD89BB7777E0C7C7E5CE |
CEECDCDCF3E9E9FDFBFBF3E0E0DEA9A9D28686C96D6DC96D6DC96D6DBD6B6B77 |
5261BBB7B7EFEAEABDA88BE7C887FFE08FFFE69AFFEBA5FFF1AFFFF5B9FFF9C0 |
FFFBC4FFFBC4FFF9C0FFF5B8FFF0AEFFEBA4FFE599EDC789BD7F7FF3E7E7F3E7 |
E7F3E7E7F3E7E7F3E7E7F3E7E7F3E7E7F3E7E7EDD6D6E0AEAED48787BE68689A |
7F89B3B1B1EBE9E99E94949F9393A19191B4A093C6B298D8C6A3E9DDB2FFFDC9 |
FFFFCCFFFFCCFFFDC9FFF8BFFFF3B3FFEDA8FFE79DE8C28BC49090E8D1D1E8D1 |
D1E8D1D1E8D1D1E8D1D1E8D1D1E8D1D1E8D1D1E4CBCBD7BABAC8A6A6C7A9AAF1 |
EEEFACACACDFDEDEF1EFEFE4DEDED2C8C8C7BABAB7A6A6A48E8EA68D8DA78B8B |
B9A096CAB5A2DACAADEADDB3FFF4B7FFEEABFFE89EDAB089C08C8CDDBCBCDDBC |
BCDDBCBCD2ADADCBA4A4D0B0B0CBACADCDB4B4E1D2D3EFE7E8FCFCFCFFFFFFFF |
FFFFF8F8F8DEDDDDCAC7C8BEBABAC4BDBDC5BCBCD6CACADFD2D2E8D9D9DDCACA |
CAB3B3BEA1A1B69696AC8686AD8585BE978ACEA88CC69885B68486BF9698D3B9 |
BADBC6C6EADEDFFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEAEADFD9D9CEC3C3CCBEBE |
CAB8B9C9B2B2D5BDBDE0C7C7DBBFBFD0AFAFC8A3A3B48585A37C81D7CCD1FBFB |
FBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFFFFFFFFFFEEE8E8E1D6D7D2BFBFCCB2B2CDAEAEB88F8FE1D5D6FBFBFBFFFF |
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
FFFF} |
Transparent = True |
end |
object B4Label: TElLabel |
Left = 64 |
Top = 16 |
Width = 159 |
Height = 13 |
Caption = 'Bitte w'#228'hlen Sie die Zieldatei aus.' |
Font.Charset = DEFAULT_CHARSET |
Font.Color = clBtnText |
Font.Height = -11 |
Font.Name = 'MS Sans Serif' |
Font.Style = [] |
ParentFont = False |
end |
object B4Filename: TLabel |
Left = 72 |
Top = 32 |
Width = 329 |
Height = 13 |
AutoSize = False |
Caption = 'Dateiname' |
Transparent = True |
end |
object ChBtn: TElPanel |
Left = 16 |
Top = 56 |
Width = 129 |
Height = 25 |
BackgroundType = bgtVertGradient |
GradientEndColor = clSilver |
GradientStartColor = clSilver |
GradientSteps = 128 |
Align = alNone |
UseXPThemes = False |
Enabled = False |
TabOrder = 0 |
Caption = 'W'#228'hlen...' |
OnMouseDown = MouseDown |
OnMouseUp = MouseUp |
OnMouseEnter = BtnMouseEnter |
OnMouseLeave = BtnMouseLeave |
DockOrientation = doNoOrient |
end |
end |
end |
object SaveDlg: TSaveDialog |
Filter = 'Veschl'#252'sselte Dateien (*.dc4)|*.dc4' |
Left = 392 |
Top = 40 |
end |
end |
/trunk/History/Decoder40_DEC3AlphaSource/RepeatPassword.pas |
---|
0,0 → 1,324 |
unit RepeatPassword; |
interface |
uses |
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, |
ElACtrls, ExtCtrls, ElPanel, ElGroupBox, Cipher, Cipher1, ElCLabel, ElLabel, |
ElBtnCtl, ElPopBtn, ElXPThemedControl, ElEdits, StdCtrls, ElCheckCtl, |
Hash, FileCtrl; |
type |
TRepeatForm = class(TForm) |
SaveDlg: TSaveDialog; |
Capt: TElPanel; |
CaptLabel: TElLabel; |
ExBtn: TElPanel; |
MainPanel: TElPanel; |
UebLabel: TElLabel; |
CnclBtn: TElPanel; |
BackBtn: TElPanel; |
NextBtn: TElPanel; |
Box1: TElPanel; |
B1Image: TImage; |
B1Label: TElLabel; |
B1PwdEdit: TElEdit; |
B1Status: TElLabel; |
Box2: TElPanel; |
B2Label: TElLabel; |
B2Image: TImage; |
B2CipherCombo: TElAdvancedComboBox; |
B2CipherLbl: TElLabel; |
B2CipherStandard: TElLabel; |
B2ModeLbl: TElLabel; |
B2ModeCombo: TElAdvancedComboBox; |
B2ModeStandard: TElLabel; |
B2HashLabel: TElLabel; |
B2HashCombo: TElAdvancedComboBox; |
B2HashStandard: TElLabel; |
B2CipherExplain: TElLabel; |
B2ModeExplain: TElLabel; |
Box3: TElPanel; |
B3CheckBox1: TElCheckBox; |
B3Image: TImage; |
B3CheckBox2: TElCheckBox; |
Box4: TElPanel; |
B4Image: TImage; |
B4Label: TElLabel; |
B4Filename: TLabel; |
B2HashExplain: TElLabel; |
ChBtn: TElPanel; |
procedure B1PwdEditChange(Sender: TObject); |
procedure FormShow(Sender: TObject); |
procedure B2CipherComboChange(Sender: TObject); |
procedure B2ModeComboChange(Sender: TObject); |
procedure FormCreate(Sender: TObject); |
procedure ElPanel2Click(Sender: TObject); |
procedure ExBtnMouseLeave(Sender: TObject); |
procedure MouseDown(Sender: TObject; Button: TMouseButton; |
Shift: TShiftState; X, Y: Integer); |
procedure MouseUp(Sender: TObject; Button: TMouseButton; |
Shift: TShiftState; X, Y: Integer); |
procedure CaptMouseDown(Sender: TObject; Button: TMouseButton; |
Shift: TShiftState; X, Y: Integer); |
procedure B2HashComboChange(Sender: TObject); |
procedure ExBtnMouseEnter(Sender: TObject); |
procedure BtnMouseEnter(Sender: TObject); |
procedure BtnMouseLeave(Sender: TObject); |
public |
aktion: integer; |
procedure ActFunc(); |
procedure DrawDesign(); |
procedure ClickHandler(Sender: TObject); |
end; |
var |
RepeatForm: TRepeatForm; |
implementation |
uses Main; |
{$R *.DFM} |
procedure TRepeatForm.ActFunc(); |
begin |
Box1.Visible := aktion = 1; |
Box2.Visible := aktion = 2; |
Box3.Visible := aktion = 3; |
Box4.Visible := aktion = 3; |
if aktion = 4 then |
begin |
close; |
MainForm.WaitTmr1.enabled := true; |
end; |
if aktion <> 3 then |
NextBtn.Caption := 'Weiter >>' |
else |
NextBtn.Caption := 'Fertigstellen'; |
MainForm.ChangeButtonState(aktion <> 1, BackBtn); |
UebLabel.Caption := 'Schritt ' + inttostr(aktion) + ' von 3 - '; |
if aktion = 1 then UebLabel.Caption := UebLabel.Caption + 'Kennwortbestätigung'; |
if aktion = 2 then UebLabel.Caption := UebLabel.Caption + 'Konfiguration'; |
if aktion = 3 then UebLabel.Caption := UebLabel.Caption + 'Fertigstellung'; |
end; |
procedure TRepeatForm.B1PwdEditChange(Sender: TObject); |
begin |
MainForm.ChangeButtonState(B1PwdEdit.Text = MainForm.PwdEdit.Text, NextBtn); |
if B1PwdEdit.Text = MainForm.PwdEdit.Text then |
begin |
B1Status.Font.Color := $00008000; |
B1Status.Caption := 'Passwort OK!'; |
end |
else |
begin |
B1Status.Font.Color := $00000080; |
B1Status.Caption := 'Keine Übereinstimmung...'; |
end; |
end; |
procedure TRepeatForm.FormShow(Sender: TObject); |
var |
Hgt: integer; |
begin |
DrawDesign(); |
aktion := 1; |
ActFunc(); |
MainForm.ChangeButtonState(false, NextBtn); |
B1PwdEdit.Text := ''; |
B1PwdEdit.SetFocus; |
B1Status.Font.Color := $00000080; |
B1Status.Caption := 'Keine Übereinstimmung...'; |
B4Filename.Caption := MinimizeName(MainForm.GetFolder(SD_PERSONAL) + '\' + copy(ExtractFileName(MainForm.OpenDlg.FileName), 0, length(ExtractFileName(MainForm.OpenDlg.FileName))-length(ExtractFileExt(MainForm.OpenDlg.FileName)))+ '.dc4', Box4.Canvas, B4Filename.Width); |
MainForm.ChangeButtonState(true, CnclBtn); |
MainForm.ChangeButtonState(false, BackBtn); |
MainForm.ChangeButtonState(false, NextBtn); |
MainForm.ChangeButtonState(true, ChBtn); |
// Titelleiste á la Windows |
//Hgt := GetSystemMetrics(SM_CYCAPTION); |
Hgt := MainForm.Capt.Height; |
Capt.Height := Hgt; |
ExBtn.Height := Hgt; |
ExBtn.Width := Hgt; |
ExBtn.Left := Capt.Width - ExBtn.Width; |
CaptLabel.Top := Capt.Height div 2 - CaptLabel.Height div 2; |
end; |
procedure TRepeatForm.B2CipherComboChange(Sender: TObject); |
begin |
// B2CipherCombo.ItemIndex := B2CipherCombo.ItemIndex; |
MainForm.CipherManager1.Algorithm := B2CipherCombo.Text; |
B2CipherExplain.Caption := MainForm.CipherManager1.Description; |
try |
if not MainForm.CipherManager1.CipherClass.SelfTest then |
MessageBox(Handle, 'Self Test failed', 'Cipher Self Test', mb_Ok); |
except |
Application.HandleException(Self); |
end; |
end; |
procedure TRepeatForm.B2ModeComboChange(Sender: TObject); |
const |
sMode : array[TCipherMode] of String = |
('Cipher Text Stealing', 'Cipher Block Chaining', 'Cipher Feedback', |
'Output Feedback', 'Electronic Code Book', 'CBC MAC', 'CTS MAC', 'CFB MAC'); |
begin |
MainForm.CipherManager1.Mode := TCipherMode(B2ModeCombo.ItemIndex); |
B2ModeExplain.Caption := sMode[MainForm.CipherManager1.Mode]; |
end; |
procedure TRepeatForm.FormCreate(Sender: TObject); |
begin |
HashNames(B2HashCombo.Items); |
B2HashCombo.ItemIndex := 1; |
B2HashComboChange(nil); |
CipherNames(B2CipherCombo.Items); |
B2CipherCombo.ItemIndex := 1; |
B2CipherComboChange(nil); |
B2ModeCombo.ItemIndex := 0; |
B2ModeComboChange(nil); |
B2CipherStandard.caption := 'Standard: ' + B2CipherCombo.Text; |
B2ModeStandard.caption := 'Standard: ' + B2ModeCombo.Text; |
B2HashStandard.caption := 'Standard: ' + B2HashCombo.Text; |
end; |
procedure TRepeatForm.ElPanel2Click(Sender: TObject); |
begin |
close; |
end; |
procedure TRepeatForm.ExBtnMouseLeave(Sender: TObject); |
begin |
TElPanel(Sender).BevelOuter := bvRaised; |
MBDown := false; |
if (TElPanel(Sender).Tag = 1) then |
begin |
TElPanel(Sender).GradientEndColor := Design_Caption1; |
TElPanel(Sender).GradientStartColor := Design_Caption2; |
end; |
end; |
procedure TRepeatForm.MouseDown(Sender: TObject; |
Button: TMouseButton; Shift: TShiftState; X, Y: Integer); |
begin |
if Button = mbLeft then |
begin |
TElPanel(Sender).BevelOuter := bvLowered; |
MBDown := true; |
end; |
end; |
procedure TRepeatForm.MouseUp(Sender: TObject; Button: TMouseButton; |
Shift: TShiftState; X, Y: Integer); |
begin |
if (Button = mbLeft) and MBDown then |
begin |
TElPanel(Sender).BevelOuter := bvRaised; |
MBDown := false; |
// Standardfarbe |
TElPanel(Sender).GradientEndColor := Design_Button_Active1; |
TElPanel(Sender).GradientStartColor := Design_Button_Active2; |
// Ausfürhung |
ClickHandler(Sender); |
end; |
end; |
procedure TRepeatForm.CaptMouseDown(Sender: TObject; |
Button: TMouseButton; Shift: TShiftState; X, Y: Integer); |
begin |
ReleaseCapture; |
perform(WM_SysCommand, $F012, 0); |
end; |
procedure TRepeatForm.B2HashComboChange(Sender: TObject); |
begin |
// B2HashCombo.ItemIndex := B2HashCombo.ItemIndex; |
MainForm.HashManager1.Algorithm := B2HashCombo.Text; |
B2HashExplain.Caption := MainForm.HashManager1.Description; |
try |
if not MainForm.HashManager1.HashClass.SelfTest then |
MessageBox(Handle, 'Self Test failed', 'Hash Self Test', mb_Ok); |
except |
Application.HandleException(Self); |
end; |
end; |
procedure TRepeatForm.ExBtnMouseEnter(Sender: TObject); |
begin |
// Aufleuchten |
if (TElPanel(Sender).Tag = 1) then |
begin |
TElPanel(Sender).GradientEndColor := Design_Caption_Active1; |
TElPanel(Sender).GradientStartColor := Design_Caption_Active2; |
end; |
end; |
procedure TRepeatForm.BtnMouseEnter(Sender: TObject); |
begin |
// Aufleuchten |
if (TElPanel(Sender).Tag = 1) then |
begin |
TElPanel(Sender).GradientEndColor := Design_Button_Leuchtend1; |
TElPanel(Sender).GradientStartColor := Design_Button_Leuchtend2; |
end; |
end; |
procedure TRepeatForm.BtnMouseLeave(Sender: TObject); |
begin |
TElPanel(Sender).BevelOuter := bvRaised; |
MBDown := false; |
if (TElPanel(Sender).Tag = 1) then |
begin |
TElPanel(Sender).GradientEndColor := Design_Button_Active1; |
TElPanel(Sender).GradientStartColor := Design_Button_Active2; |
end; |
end; |
procedure TRepeatForm.ClickHandler(Sender: TObject); |
begin; |
if (Sender = NextBtn) then |
begin |
inc(aktion); |
ActFunc(); |
end else if (Sender = BackBtn) then |
begin |
dec(aktion); |
ActFunc(); |
end else if (Sender = CnclBtn) then |
begin |
close; |
end else if (Sender = chBtn) then |
begin |
if SaveDlg.Execute then |
B4Filename.Caption := MinimizeName(SaveDlg.FileName, Box4.Canvas, B4Filename.Width); |
end; |
end; |
procedure TRepeatForm.DrawDesign(); |
begin |
MainPanel.GradientEndColor := Design_Form1; |
MainPanel.GradientStartColor := Design_Form2; |
Capt.GradientEndColor := Design_Caption1; |
Capt.GradientStartColor := Design_Caption2; |
ExBtn.GradientEndColor := Design_Caption1; |
ExBtn.GradientStartColor := Design_Caption2; |
Box1.GradientStartColor := Design_Menu2; |
Box1.GradientEndColor := Design_Menu1; |
Box2.GradientStartColor := Design_Menu2; |
Box2.GradientEndColor := Design_Menu1; |
Box3.GradientStartColor := Design_Menu2; |
Box3.GradientEndColor := Design_Menu1; |
Box4.GradientStartColor := Design_Menu2; |
Box4.GradientEndColor := Design_Menu1; |
if (ChBtn.Tag = 1) then MainForm.ChangeButtonState(true, ChBtn) else MainForm.ChangeButtonState(false, ChBtn); |
if (CnclBtn.Tag = 1) then MainForm.ChangeButtonState(true, CnclBtn) else MainForm.ChangeButtonState(false, CnclBtn); |
if (NextBtn.Tag = 1) then MainForm.ChangeButtonState(true, NextBtn) else MainForm.ChangeButtonState(false, NextBtn); |
if (BackBtn.Tag = 1) then MainForm.ChangeButtonState(true, BackBtn) else MainForm.ChangeButtonState(false, BackBtn); |
end; |
end. |
/trunk/History/Decoder40_DEC3AlphaSource/ToDo.txt |
---|
0,0 → 1,8 |
ToDo DeCoder 4.0 |
---------------- |
- Verschlüsselung möglich machen |
- Design mit Farbtransformationen (RGB <> HSV) |
- Nach verschlüsselten Dateien auf dem Computer suchen |
- Befehlszeilenfunktion (Erst in 4.1) |
- QuickStart als Tray-Icon |